How to have a Successful Software Engineering Internship
May 15, 2023
Since summer internships are round the corner, I figured it'd be useful to share some tips for interns to have a successful internship. Having mentored a few interns who and seen many examples of successful interns at Meta, I observed a list of traits that successful interns demonstrate.
At the end of the internship, a good litmus test on whether your internship was successful is whether the team would hire you or take their chances with someone else.
Recommended Intern Behaviors
1. Do what is expected of you
Firstly in order to do what is expected of you, you need to know what is expected of you. If you're a SWE intern, most of the time you need to complete a given project before the end of the internship by writing high quality code. Look at how code is written in the code base and follow existing conventions, directory structure, naming, use existing abstractions. Break your code into small PRs so that it's easy to review. Write tests and test your code thoroughly before submitting for review.
2. Demonstrate independence
Your intern manager/mentor/host is also a busy employee and they have their own work to do. If you run into issues, try to unblock yourself first before asking someone. Look up internal documentation, refer to existing code and see if you can follow similar approaches. If you're still stuck, then ask. Post in support groups/chats and share your high level goal, the approaches you've tried and why they didn't work. This helps people to help you. It's ok to ask more questions at the start but the frequency should go down over time.
3. Take initiative and ownership of your project
Rather than waiting for tasks to be handed to you, look at the plan/roadmap (or create one if it doesn't exist) and work through the tasks. Break down the project and create tasks for yourself, closing them when completed. Be your own project manager and product manager. Anticipate blockers where possible and unblock yourself ahead of time. Keep a log of the work you've done. This will be super useful if you have to write a self evaluation at the end of your internship.
You are the best advocate of your work. In large companies, peer feedback is taken into account for the internship evaluation so it'd be good if more people knew about your work. Tell your team what you are doing, make occasional updates about your work, give others visibility into your work and demo your work during sprint retros. Communicate if you are unblocked or if you don't feel like you're heading in the right direction.
5. Ask for and address feedback
Your mentor should already be providing you feedback constantly and you should address them in the remaining time you have. If your company doesn't have the open feedback culture, you can ask your mentor or teammates when you get the chance. Ask how you can improve and what you can do better. Since you'll be spending lots of time writing code, make sure you pay attention to the code review comments and that your reviewers don't have to make the same comment twice.
6. Assess the company
As much as an internship is an extended interview of your fit for the company, it is also a chance for you to interview the company. Do you enjoy the team's and company's working style? Do they overwork their employees and treat employees with respect? Sometimes interns can be too busy with their projects to pay attention to these things but ultimately these are important factors to take into consideration when deciding whether to sign the return offer. You might not be joining back the same team but the company culture affects the team's culture to some extent.
Your performance during the internship will affect the offer you're given. At Meta, the top interns (< 10%), or what we commonly refer to as "rockstar interns" were given out-of-the-band offers that enter the L4 (mid-level) salary range, where few other big tech companies can match. I've encountered some of them throughout my time at Meta and Grab and they're all doing really well in their careers now. Here's what they did:
There are a few ways to overdeliver, by completing things faster, doing more things, or doing them better. This intern did all of that and completed the intern project even before the mid-point review (6 weeks in, out of a 12-week internship) and spent the remaining time working on things beyond the intern project.
2. Review code
As part of the project, the intern became familiar with certain features owned by the team. Usually interns are the most junior members of the team, but this intern became such an expert that they were able to review code of not just fellow interns, but also full-time members of the team, making meaningful suggestions and spotting bugs during code review.
3. Refactor code
This intern saw that there was a similar component that could help achieve their task, but not without some changes. Instead of duplicating the code for their own use case, they refactored it such that it could be used in the current callsite and also their work.
4. Provide customer support to users
This intern was working on an internal tool and adding an entirely new feature to it. Before that, they had to understand how the internal tool worked. As a result, they became extremely familiar with the tool and was helping to answer questions from users all over the company. Some were shocked to find out that it was an intern that helped them with their issue.
Being oncall is a responsibility of being available outside of regular working hours to respond to urgent issues with a product with the goal of addressing issues promptly and minimizing downtime and full-time engineers take turns to be oncall. This intern understood the team's work so well after a few weeks that the team trusted them to be added to the oncall rotation. They were able to pull this off by exploring beyond their assigned project, reading lots of the team's code and being familiar with the operations of the team.
6. Have time for side projects
This intern was not from my team, but someone I knew prior to them joining the company. They completed their assigned work so fast and was constantly bored, and they asked if they could help me with my work. I was working on some code modernization efforts and they wrote a codemod (script to do AST-based code modifications) to help me complete my refactoring work in a fraction of the time. They were able to dive into a code base outside of their team, entirely new stack (front end) and make impact. Mindblown.
Most of these interns had something in common, they functioned like a full-time member of the team. The primary goal of internships is to convert interns to full-time. Interns who exhibit behaviors of full-time employees will come out on top. Naturally these intern got the top ratings and one of them was even selected to have dinner with Mark Zuckerberg, a privilege only a handful of the top interns had.
However, it's also important to note that one has to complete their core project / responsibilities before striving for brownie points. The core project is the cake and these behaviors are icing on the cake. You can't just have icing without a cake.
It goes without saying that the above is non-exhaustive, but hopefully these tips and examples will be helpful!