6 Pro-Tips from an 11 Month Software Engineering Intern

6 Pro-Tips from an 11 Month Software Engineering Intern
Pictured: Me, Eric, Jan. We are Kapwing's Growth Engineering Team!

Hi, I’m Derrick. For the last 11 months, I’ve been a software engineering intern at Kapwing. In a couple of days, I’m going back to school to finish my degree, but before I go, I wanted to give you some pro-tips on succeeding as a software engineering intern!

I’m a sophomore at Swarthmore studying computer science. I decided to take a gap year around winter of 2020 because I felt like I wasn’t getting the most out of college ever since my classes went remote. Around that time, I had also picked up web development for fun, so I jumped at the opportunity to spend a year away from school to work on Kapwing, a cutting edge web app aimed at empowering modern creators. This blog post is for other software engineers who plan to intern at early-stage startups.

1. Grab Coffee Chats with everyone

When I first started at Kapwing, I was asked to schedule a 20 minute virtual coffee chat with everyone at the office. At the time, there were 26 full time employees, which meant: 26 * 20 = 520 minutes = ~9 hours of getting to know my coworkers.

9 hours of chatting, plus the mental burden of scheduling 26 meetings, was a lot to deal with in addition to onboarding. However, I think it was worth it in the end. Scheduling one-on-one time with your coworkers can help break the ice. Personally, having rapport with my teammates made it much easier to reach out for help, and even to accept feedback.

It’s also important to get to know people you don’t usually work with, because at a startup as small as ours, cross functional collaboration is super common. My work on the engineering team affects the marketing team’s promotional material, as well as directs tickets towards our customer support team. The more comfortable you feel around coworkers, the more efficiently you can collaborate!

My record was 4 chats / day

2. Ask for help when blocked, but try first

One of the hardest decisions to make as a junior engineer is: “Should I ask for help or figure this out on my own?” As an inexperienced engineer, you will experience blockage, but you also want to demonstrate autonomy and ingenuity.

As a rule of thumb, I ask for help if I’m blocked on a technical issue for more than two hours. However, it’s important to spend those two hours formulating pointed, answerable questions. Instead of asking your coworker: “how does our upload flow work again?”, narrow your question down to something specific: ex. “why does our upload object have this property and what does it mean?”

Another tip with asking for help is to spread the burden. Asking multiple engineers for help creates the illusion that you are less confused to any individual engineer! At Kapwing, we have a Slack channel called #nodumbquestions, where we help each other troubleshoot technical and non-technical problems. In addition, I’ve also found the GitLens extension in VSCode invaluable for asking pointed questions to individual code authors.

The #nodumbquestions manifesto

3. Don’t be scared of your manager

If I’m going to be totally honest, I was pretty intimidated by my manager when I first started (sorry Alec!). Kapwing was my first paid internship, and the imposter syndrome associated with being the only college student in a team of professional software developers hit me pretty hard. While I was working remotely, I found myself dreading our 1-on-1s whenever I was behind on my sprint.

I think a lot of this angst went away with time, as I began to get the hang of React, Redux, FFMPEG, and the other technologies we use. Relocating to SF and getting to know my coworkers also established trust and gave me a sense of relief (like, ah, you are real people after-all.) I think these factors combined helped me develop a more trusting relationship with management.

The key realization for me was seeing my manager as a resource instead of an accountability tracker. My manager on the Studio team, Alec, was a wealth of knowledge, having worked on both our React frontend and our nuanced export flows. When I switched to our Growth Engineering team, I worked directly with and learned from Eric, our co-founder. On both teams, I was able to solicit their feedback, ask for more responsibility and define my career objectives.

Pictured: Alec, me, Ryan in Napa. We ♡ Alec

4. The interviewer is nervous too

At Kapwing, all of our technical interviews are conducted in-house, and so recruiting is a big part of engineering work. While I’ve gotten the hang of interviewing candidates over time, I recall being incredibly nervous the first few times I screened candidates more senior than me.

If you’re a candidate, then I’m going to tell you a secret: nobody is out to “get you”, in fact your interviewer desperately wants to see you succeed. Engineering organizations, especially startups, spend so much time and effort recruiting that filling every position is a ‘Hallelujah’ moment.

An interview isn’t a one-way serenade, where the candidate desperately tries to impress the interviewer. Treat it like a conversation, where you demonstrate competence and we try to sell you on working at our company.

The worst feeling as an interviewer is not being able to guide the candidate

Also, if you find yourself in the position of being a more junior engineer interviewing a candidate whose resume looks senior to yours, don’t be nervous! Remember: you have the job, so you are perfectly qualified to assess anyone for a similar job at your organization. I’ve seen many experienced candidates submit spaghetti code during interviews. But hey, they’re probably nervous too!

5. Plan things out before working on a big project

After shipping my first few features, I realized that I could eventually finish any project assigned to me, given enough time. The hardest part about engineering (for me) was finishing my work on time. I also found that the larger a project was, the harder it was for me to ship it on time.

The most overdue project I worked on was Moving Zoom, which I shipped 3-4 weeks after my initial estimate. As a bit of background, Kapwing’s existing animations are relatively static, allowing users to only define duration but not when animations appear or how they look. We wanted to move towards “keyframing”, a solution implemented by many desktop editors to give more precise control over animations. As part of this refactor, animations needed to become composable. In the end, a user should be able to say: “I want this layer to move right, while turning pink, and then subsequently zoom in 200%”.

We thought that Moving Zoom was a perfect candidate for testing out a composable animation framework, since it can conceptually be broken down into a “pan” animation and a “zoom” animation. And so I got off to coding up our new animation paradigm, defining the new data structure with composability in mind. In the end, when it came time to actually do the geometry and implement moving zoom, I realized that the calculations for “pan” and “zoom” couldn’t be decoupled at all, and it was actually going to be a lot more complicated to try to make them separate, composable animations.

Product iteration happens fast at Kapwing

Ultimately, we had to ditch the ambitious keyframing project and just implement Moving Zoom as a one-off animation. I ended up rewriting a lot of my own code after we swapped approaches, and this whole fiasco could have been avoided if I had just thought through the technical implementation before beginning work on the project. It was around this project that I began getting into the habit of really documenting my approach and keeping tabs on my todos, which ended up saving me a lot of time on my subsequent projects.

6. Not knowing is part of the fun

In contrast to my previous pro-tip, it’s also totally OK if you can’t immediately see the implementation for a project you’re starting to work on. Problems that don’t have evident solutions require an “investigation” period, which will conclude with one of three outcomes: either the project is not presently possible, or it is possible but not worth the effort, or it is possible and completely doable.

One recent project I worked on where I completely blanked on the implementation was finding a good Smart Cut heuristic. Smart Cut is one of Kapwing’s upcoming smart effects which detects silences in a user’s video and trims them out automatically. I wasn’t even sure if smart silence detection was possible for videos, and so I went down a rabbit hole of academic papers discussing state of the art voice activity detection techniques. We ended up using a relatively simple and lightweight band pass, which actually worked better than many of the more costly techniques.

It's such a good feeling to show off your feature!

Sometimes, features just don’t get to take off, and that’s OK. I remember doing some investigation for a feature that would allow users preview their files as video tracks if they just dragged it over our web app. It turned out that scanning metadata when users dragged files over your website was a big security no-no, and so it was actually banned under W3C standards. The project was dead in the water before it could be seriously executed.

The important thing to realize is that with technically opaque projects, reaching a conclusion on its viability is almost as important as completing the project itself. Which is to say, whatever happens, if you tried your best, it’s OK! When you’re working on emerging technologies, sometimes what you want to do won’t be possible, and that discovery counts as progress.

Bonus Round: Lightning Life Pro-tips

Those are my 6 pro-tips for succeeding as a software engineering intern at a startup. However, you don't want to be, as we say around the office, senior in engineering and junior in life. Here are some of my life pro-tips I've accumulated for achieving a healthy work-life balance.

  • Invest in a hobby: Not just because people will ask you "what do you do for fun?" during your coffee chats. Having a hobby is like adding redundancy to your mental health, that way if work is going badly, you still have something else to look forward to. Popular choices at Kapwing include chess, fishing, or moonlighting as a semi-professional DJ.
  • Live with roommates: It's hard to make friends when you're an adult, and roommates are essentially free friends. Roommates also come with amenities. One of my roommates has a poodle, and another is a sous chef at a 2-Michelin star restaurant. I get free puppy-licks and risotto advice.
  • Hang out with your coworkers: Besides roommates, you probably spend the most time with your coworkers. Take advantage of that proximity and convert them into friends! I've met some of my favorite people ever at Kapwing, and if you're ever lucky enough to work here, you'll know what I mean.
Me and my teammate Brian posing for a father-son pic. Brian taught me how to drive.

Interning at Kapwing these past 11 months has spurred me to grow significantly as an engineer and an individual. Working at an early stage startup carries inevitable risk, but at the right company, you can take on projects with complexity and impact years beyond your seniority. Being more scrappier and less siloed will also allow you to form stronger bonds with your coworkers. If you are a college student considering an internship at an early stage startup, do your due diligence! But if they seem legitimate, and the work seems interesting, you're in for the experience of a lifetime.