There are a lot of articles written about how to get a software engineering internship, but not many about how to make the most of one you already have. In an effort to fill that gap, here are some tips drawn from my experiences interning at Facebook and AppNexus. These tips are generally organized into advice about effectiveness and execution first, followed by some points about learning and self-improvement.
This point is clear to some, but it might not be obvious to first-time interns. See them as more of a “teacher” than a “boss”. The point of an internship is to learn, so ask them questions about your work, the company, their career, or really anything. Some companies call their intern managers “mentors”– there really is no difference.
Don’t direct all questions to your manager. Learn from other people too. Most companies love interns, so take advantage of the opportunity to chat up other software engineers to understand how they work, how they planned their careers, and what it’s like to work full-time at the company. If you’re stumped about a piece of code, look at the blame revision (if it’s available) to find who wrote it. They can help you understand the code if you just ask. Interns have a tendency to to hang around other interns. Do that, for sure, but also spend time with full-time folks.
You’re accountable to your manager, but also to other team members. At many companies, there’s also a product manager working with the engineers. Get a sense early on of what everyone’s expectations and responsibilities are. Update your product manager and other software engineers in addition to your manager if it makes sense to do so.
Get a sense for how your team communicates progress. Is there an internal collaboration platform? Does your team do daily standups? Even if your intern project is relatively “carved out” from the rest of the software, it’s important to update other engineers so they can notice opportunities to help you. Many times, you’ll also find opportunities to help them!
You should communicate frequently with your manager. Get a sense of what their schedule is like and what type of communciation would make both parties comfortable. If you’re sitting next to each other, great! If you’re not, that’s totally fine.
Many managers prefer to have a weekly 1:1 update with their interns. This can be a casual half hour where you just talk about the week’s progress and generally anything about the internship.
In my experiene, I’ve found daily email updates to work really well. In this email, I quickly bullet the day’s progress in three categories:
That last category is key and something unfamiliar to most new interns. A barrier is essentially something for which you need help from your manager. It’s the technical problems that you’ve thought hard about but still haven’t made progress on, it’s the approval you need from another team in the company, it’s the mockup you’re waiting on from the team designer. All of these things are barriers holding you back from getting the job done.
I’m fortunate to have had great managers through all of my internships. This daily digest helped them to keep up with how best to help me. Whenever you have a blocker, your manager can then follow up with a message about getting your diff submitted, technical problem discussed, or designer checked on. As an extra bonus, overcommunicating makes the good work you’re doing really visible to your manager.
It’s natural to feel shy and nervous when getting started in a software engineering internship. You might be afraid your work is not up to par, that your code is non-idiomatic, or that people find your questions annoying. Don’t worry about it! Yes, people are busy, but effective team members will help you because they care about the overall success of the team. Consider using the following order of asking for help: search the internal docs, search online, ask an intern, ask a teammate/manager. In the end, you’ll save yourself valuable time and might also realize that documentation you referenced as a source of truth is actually outdated.
Ask for more work if you want it! Most teams have tasks small and large lying around that they’d be happy to send your way. Having multiple projects to work on keeps things fresh and gives you something to work on when one of the projects hits a barrier. Good software engineers are usually juggling several tasks at a time. You’ll become very good at version control. Not to mention, you’ll be getting more stuff done, which is awesome for the team! Work won’t come your way unless you ask for it.
Of course you should use your time wisely. But if you’re waiting for a barrier to be removed, consider looking ahead to the next steps in the project. Many times, you can work ahead on other components and plug things back into place later.
It’s nice to see what you did over a day, week, and month. Consider writing down progress on the tasks you’re working on. It could be as simple as a spreadsheet. It’s also useful for when your manager asks about progress over the past week. You’ll have a convenient reference.
Take breaks. It’s really easy to burn out. You’ll get a dreadful feeling. Your eyes are going to hurt. Your back is going to ache. Don’t get to that point. I have a tendency to also do recreational programming when I get home, but you should be careful not to burn out if you do that. Too much programming is bad.
This is obvious to many, but some interns just don’t get it, so it’s worth mentioning: don’t measure your progress in lines of code. The number of lines you write is completely non-representative of your progress. UI code tends to take up a lot of space, while some languages have more brackets. It’s nonsense.
It’s tempting to fall into the comfort zone of knowing a few languages and doing things the way you’re comfortable doing them. Don’t fall into this trap! Strive to learn new languages, patterns, and technologies in your internship. Software engineering is both a fascinating boon and a tiring curse because there’s always more that can be learned. It’s particularly important to quickly pick up new languages. Good tech companies will generally value your ability to learn things quickly over your experience in one particular language.
If your company has a training bootcamp, consider checking out classes even after your onboarding period is finished. Oftentimes intern bootcamps are insufficient by themselves, so ask your manager for worthwhile sessions. You’ll continue to learn a lot from what they teach full-time hires. The skills picked up will probably help you beyond your current internship as well!
The return offer, yes– it’s so nice to have and yet sometimes seems so elusive. The temptation from both the intern and company side is to treat the internship as a “12 week interview”. Don’t take that phrase too seriously. Sure, the company wants to gain a sense of what you might be like as a full-time hire, but it’s more important that you focus on doing good work, learning new things, and meeting great people. The rest will fall into place. So much of a return offer is beyond your control like the whim of the hiring committee or any quotas on how many interns are eligible for a return offer.
As an aside: some interns psych themselves out by looking around at other engineers to find that few of them joined the company straight after college. Most of the time, that says nothing about your chances or receiving a return offer. Many companies–especially mid-sized startups– are just getting started in the college recruiting game. If you’re part of a new intern program, you could be among the first incoming class of new grad hires!
I hope that something in the above list gave you an idea about how to make the most of your internship. This list is by no means exhaustive, so if you think I’ve missed something, drop me a note!
Thanks to David Dohan, Charlie Marsh, and Dan Kang for reviewing this post.