My Experience as an Eng Intern at Drop

David Kang
Drop Engineering
Published in
9 min readJul 23, 2020

--

Hey everyone, my name is David, and I’m a 4th year Software Engineering student from the University of Waterloo. I’m writing this post as I finish up my internship at Drop because I hope to share how my time here has helped me grow in a ton of ways. In fact, thanks to the sense of self-fulfillment I was able to find throughout the experience, when I was asked if I wanted to extend my contract on a part-time basis past the university-prescribed 4 months, I took the opportunity enthusiastically despite the current pandemic pushing everyone to work remotely. It’s been an amazing experience, and maybe this will serve as a great “semester-in-review” for anyone interested in pursuing internships or full-time positions at a high-velocity startup company!

What I did

I joined Drop as a Software Engineering Intern on the Core Experience Team, focusing on backend development. I only say “focusing on” because I was never constrained by anybody to just work on the backend of the platform. Members are always encouraged to take ownership over all areas of the stack, and I was no exception. From the very beginning, my mentor and manager made sure that I was able to decide on what kind of work I may find valuable or interesting. My choices and passions would be able to drive the kind of experience I had, with regular check-ins to allow me to bring up any questions and review that I was having fun and learning as much as I could. This was an immediate plus, and here are some of the cool things™ I was able to work on based on that.

Referrals

After getting used to the ropes from some smaller tasks and issues, the first big project I worked on was revamping the existing referral system. Previously, when using referral codes from influencers or other users, everyone would have to complete the same set of requirements and only the amount of points received could be adjusted per code in any way. The purpose of my changes were to allow flexible, plug-and-playable conditions that could be different for groups of users. This would in turn allow us to run promotions and experimental campaigns for our rapidly growing user base more easily and have a robust framework for adding, removing, and toggling different conditions on the fly.

I learned a ton from this undertaking, not just in terms of technical considerations like architecture and design but also in soft skills such as managing scope and communicating clear intentions and questions. These are arguably more important to learn during an internship in my opinion — I’m learning more and more constantly that being a good software engineer is much more than just writing quality code, it’s also about why, when, and how you choose to write that code, based on coordination with other stakeholders.

Being a good software engineer is much more than just writing quality code, it’s also about why, when, and how you choose to write that code, based on coordination with other stakeholders.

Near the end of the project, I was able to give demos of the new changes at the company’s all-hands and our Drop Tech Tingz (more on this later!) meetings and receive some great feedback. Several people commented how they’ve been hoping for these changes for a long time now and the different ways we could leverage it to fuel our organic growth and revenue. The system still has room for improvement and even now there are efforts to make the process more user-friendly on the frontend and add more security measures, so I’m glad my work resulted in something that’s scalable and maintainable.

App Performance

A major initiative that I participated in for the final portion of my internship was “improving app performance”. This was a cross-stack effort across the frontend, backend, and the infrastructure engineers to investigate, experiment with, and implement various ways to improve the application and the platform based on several different dimensions such as API response times, server load, and rendering speed. This collective endeavor allowed us to shave thousands of milliseconds across our API endpoints and add better monitoring around heavy workloads, leaving open even more future opportunities to make significant changes with confidence.

The biggest contribution I made for this project was using a multi-tiered caching strategy to dramatically reduce a core endpoint’s response time and load on our server. The general idea behind what I implemented is that if users are fetching resources that are filtered to only contain items relevant for them, we can split this up into 2 cheaper calls — one that fetches ALL of the available items, relevant or not, and one that fetches only identifiers for the relevant items. The first call returns the same set of resources for every user, so we can cache it easily at the frontend and the backend. My hope is that this concept will be available for extension on various other types of resources too, and that these cached results can also be leveraged by other potentially expensive services.

I found myself diving into this project really passionately on both the backend and the frontend because of how fulfilling and measurable the returns were, along with how it required a lot of technical thinking, architecting, and prototyping. I discovered a problem to solve and was given not just the autonomy but also the support required to pursue a solution. There were many sessions where everyone updated each other on their progress, bounced ideas, and celebrated big wins, and I think this kind of hybrid collaborative-independent work really appealed to me.

What I Loved

Apart from the type of work I got to do, there were a lot of other aspects that I really enjoyed about working at Drop and the people here. The following are just a few of them.

Transparency

One thing that made a big impact on me while working at Drop was the sheer volume of information I was hit with and was available — to everyone. People make an effort to relay and chase after information here (“Is there a dashboard for that?”), and there are always all sorts of questions and answers popping up in various channels on Slack, the weekly all-hands meetings, team office hours, and more. I’m glad that I was not just boxed into an “intern project” — I was welcomed into discussions, and was able to feel like I was ramping up as a proper full-time employee, learning to care about the product.

The transparency is just as prevalent on the engineering side of things. Everyone is encouraged to learn from each other and chase down more information. Pair programming or brainstorming is completely optional but commonplace. I was encouraged to participate in code reviews from day 2, and that was the way I learned my way around the codebase the fastest! After working on the referrals revamp, I essentially became the most knowledgeable person on the team related to referrals and began fielding both technical and business-logic related questions. The amount of knowledge sharing that occurs, and everyone’s openness to being tapped on the shoulder for questions and feedback make it clear that there are always different ways you can contribute to the team and any ongoing major efforts.

Driving Fast, but Responsibly

The amount of changes that we churn out consistently is really amazing. From things like UI tweaks or bug fixes to major feature releases and library updates, the changes that get deployed never seem to stop. One part of this, of course, is that everyone is working hard on different product or engineering tasks and so they collect into a stream of continuous improvements. Another is that everyone is allowed to take the driver’s seat in delivering their changes and deploy them at their discretion. This allowed me to learn slowly but surely how different areas of the stack come together and what principles and ideas drive the growth of our codebase.

However, we still take time to review everything thoroughly without sacrificing velocity. Retrospectives and frontend/backend/infrastructure team meetings are regularly scheduled to evaluate ways in which we can improve or what we need to keep in mind when introducing future changes. There is always a careful balancing act between making the changes we need now versus planning for the future. I loved that because of this philosophy, and the different opinions that everyone is allowed to bring to the table, I constantly felt challenged in a way that helped me grow as a software engineer. I had to carefully think about and plan for cases that may be missed or more important and found myself following other feature flows and gathering data and benchmarks to be able to present or explain my reasoning. Looking back, I’m really glad that the team’s accountability was able to rub off on me over the months I’ve been here.

Cool Practices

In addition to general philosophies and practices, there are some other specific cool things at Drop that also helped me enjoy working here. One of them is the above mentioned Drop Tech Tingz — a bi-weekly meeting where the anyone from the data and engineering teams are invited to give a talk on any topic they want, whether it be related to a new feature, an informative overview of a service or library, or going over areas of the stack that other engineers might not be familiar with. I always looked forward to Fridays with DTTs because I would come out learning something new or interesting, and even gave a talk myself on the changes I made to referrals discussed above! Some of my favorite short talks were discussions related to how to organize commits and pull requests, a dive into our pub-sub architecture, and a demo of Terraform.

In addition to these technical showcases, there are general demo sessions that are (in my opinion, at least!) the highlights of the weekly all-hands meetings. These are also timeslots that anyone can sign up for to present anything they want to share, but the topics are way more diverse. UX research results, design overhauls, and fascinating data science findings on user behavior — these were just a sample of all of the interesting topics I can recall, and the demos were a huge part of how I came to learn about what different teams work on as well as the vision and central themes of the product development process driving everyone forward.

Related to the above, a really wholesome aspect of the culture at Drop is how strongly people celebrate successes. For all of the daily wins, big releases, securing partnerships, there is a dedicated Slack channel for giving “kudos” to other team members in recognition of their achievements or in appreciation for their help. In fact, every DTT session even begins with some reserved time to give team appreciations! I loved seeing how everyone is always encouraged to lift each other up and how this naturally leads to a more fearless, collaborative environment, some aspects of which even seemed to be strengthened after transitioning to remote work. Mistakes or points of improvement are reflected on as a team, and successes are celebrated and recognized — tying into the theme of transparency I talked about previously, it really helps making everything feel so open.

Looking Back

I hope I hit all of the key points that stood out the most for me over the course of my time here. It honestly feels like time has passed unnaturally quickly since my first day when I entered the lobby, unsure of who to talk to, and soon, I’ll be returning all of the hardware I borrowed and going back to my full-time studies at school. I truly enjoyed these past 5 months at Drop, and I feel that I was able to level up a lot, both as a software engineer and as a collaborative professional thanks to my experiences here. I’m sure that anyone interning here in the future will be able to say the same by the time they’re done.

I want to take this opportunity to thank Sheethala, my mentor, who was always looking out for me to make sure I was having a valuable experience and that I had the help I needed. She was the one who pushed me to explore all of the different things I could work on and connected me to other people who were able to give me valuable insights in various domains. I also want to thank everyone on the Core team as well as everyone I worked with during my time at Drop for showing me what great teamwork looks like and allowing me to feel like a full-fledged member. I have you all to thank for building this environment that I felt like a comfortable, productive part of — not as “the intern”, but just David, a Drop employee just like everyone else.

I’ll soon be logging off for the last time, but I’m excited to see how Drop will grow as a company in the near future. Stay classy, everyone!

--

--

University of Waterloo Software Engineering | Incoming SWE intern @ Facebook, previously Google & Drop