Hiring an intern is obviously beneficial to the intern: they get paid to learn to write better code, they get exposed to working with a team, and they get another line on their resume working toward being a supes profesh software engineer.
Less immediately obvious, though, is how great an intern can be for your team and your company. A good internship program provides an opportunity to look critically at your culture and your codebase to see where the weaknesses of both are.
(It's unfortunately easy to run an internship program without learning from it, but if you set things up properly and ask the right questions, having an intern on your team will pay dividends beyond their comparatively cheap salary.)
I've talked to a lot of people about more and less successful internships they've had or witnessed. For the less succesful ones, the saddest part is when the company didn't look at their process or their code to see what could have contributed to an unproductive internship. It's easy to say "Oh, we just hired a bad intern", but rarely is just the intern the problem.
An internship might feel like a test of a junior engineer's abilities, but it's moreso an audit of your team: how well do you communicate? How complex is your codebase? You will certainly teaching your intern things about programming, but they will show you the things that your team is totally rocking, and the things that you need to work on, both in code and in process.
Benefit #1: Code
We all have parts of our codebase that we know are a mess, that have weird old names due to quirks of history, that are fragile and no one wants to change a thing for fear of subtle bugs. But we get used to them. We have Stockholm syndrome with our codebases, and we've forgotten how silly (or terrible) things are.
We need to feel the pain of explaining to an intern why that model is named the way it is. Or asking them to hold the context of seven classes in their head to understand how this process works. (Having interns come through regularly is helpful here, because any intern will also become numb to the more painful parts of the codebase.)
Having an intern around who will look around the codebase and find patterns to follow will highlight for you which patterns you don't love any more, and remind you to fix them up at the next opportunity.
Benefit #2: Culture
Like explaining a complex bit of code, explaining how your team works and why you do the things you do will help you find gaps in your process. A team that can effectively onboard an intern is set up well to onboard any engineer, so that they can contribute meaningfully as quickly as possible. You'll also learn how good your team is at teaching (or knowledge transfer, for those who like corporate lingo better). Good teaching leads to fewer silos, which leads to higher bus numbers. Yay!
Having an intern-ready culture means your team will have an easier time retaining people who are collaborative and empathetic. At Omada, we use an internship-like program to rotate engineers through other teams. Especially when someone is learning a totally new technology, having a structured format to get started is incredibly helpful. This has the excellent benefit of allowing our teams more opportunities to learn from each other—rotating team members cross-pollinate ideas and practices from their "home" team.
Still not sure that your team is ready, or that you can spare the time?
The most common refrains I've heard from engineers that don't think they should hire an intern yet include:
- We don’t have the time or resources to train them
- Interns will write bad code that we’ll then have to maintain forever
- Everyone on the team is so key to the codebase that we can’t have someone less than senior or else things would fall apart
These are reasonable concerns, but point to larger issues in your engineering organization (beyond the very-real problem that hiring an all-senior engineering team is very expensive and very hard).
If you have fewer than three mid- to senior-level engineers, maybe you should wait on hiring an intern. A team of all interns probably isn't an effective way to build a robust codebase, but a team of all seniors can tend to write more complex, clever code. Create a balanced team.
Running an internship program is absolutely an investment. You do need to take time to train people, but the ROI on your codebase and culture is worth it if you do it right. An internship program that doesn't teach you about the existing team and its code is not worth running.
Your company should already have structures in place that prevent crappy code from getting onto production — probably something like code review or pair programming. If you don't do either of those things, you should probably start! With your full-time engineers, not your interns.
So, when you hire an intern, put those structures to work. Give the intern actual production work, and see how good your team is at giving helpful, thoughtful feedback about the intern's code.
Not enough experience
If your team believes only senior engineers can be beneficial to your codebase, then you are going to have a hard time hiring, and probably have a myriad of other issues. People leave companies, and they take their knowledge of the code with them. Good luck!
Start with one
Being good at teaching means being good at helping all of your engineers level up, which will help them want to stick around. Teaching reinforces what you know, and highlights things you thought you knew but don’t. Being good at information sharing means that you will have fewer silos and higher bus numbers.
I hear often that startups don’t think they have the resources to support interns, but the question is: where do senior engineers start? Not as senior engineers. Providing internships helps us have more balanced teams, and hiring mid- to senior-level engineers is pretty damn difficult in the current market.
It’s likely that your first intern ever will have a worse experience than later interns. You’re going to learn how good your mid-level and senior engineers are at teaching a junior, and which parts of the codebase are really hard to explain to someone just starting their career. But please don’t let that stop you from trying.
All of the reasons above should be enough to start hiring interns. But there’s another benefit that I should mention: you can more easily increase the gender diversity of your team!
- 16% of software engineers are women (source)
- 18% of computer science grads are women (source)
- 38% of bootcamp grads are women (source)
The statistics for ethnic diversity of bootcamp grads is less exciting, but you can still work on the diversity of your teams by posting internship opening in places like the jobs board ofs historically black colleges and univserities, or working with organizations like CODE2040 to hire black and latin@ fellows.
Ready to start an effective internship program? Read on for how to do it.