I have never had an internship. In fact, while I was an undergraduate in university, I never even had a summer job related to engineering or software development. I worked at a living-history museum for three summers, giving guided tours, performing artillery demonstrations, and playing bagpipes all day. It was mentally and physically demanding work at times—dressed in wool uniforms in the sweltering heat of summer—but it was tremendous fun.
Almost all of us working at the museum were full-time university students. We spent the summer learning how to reenact the life of a British solider from the year 1867—the year the Dominion of Canada was formed—to make the history of the Fort come alive for visitors. It was wonderful to work with such talented people—people who were studying everything from music, to philosophy, history, engineering, languages, economics, education, law, and medicine—all coming together for this unique experience. Plus, I got to play my bagpipes all day long and continued to improve as a musician.
I was aware that this unconventional choice of summer job was a bit of a risk. I was somewhat nervous, at the time, that it might put me at a disadvantage relative to the majority of my classmates who had engineering-related summer-jobs at companies like Dupont, Imperial Oil, Petro-Canada, and Nortel. However, I figured that everything would work out in the end, and that the unique experiences that I gained from this job would be complementary, and perhaps even distinguish me from other engineering candidates. In hindsight, things have worked out just fine.
Despite being a part of some fantastic software development teams, the teamwork, communication, preparation, and improvisation required in this summer job has been unmatched in any professional role that I have had. At the beginning of the summer, at least one-third of the people would be entirely new to this experience, learning the history of the Fort and the military drill for the first time. Within a couple of weeks, this team of close to 100 students, who had never worked together before, was performing for the public, daily.
In July and August, we performed weekly, evening shows in front of thousands of people. Rehearsals for these shows were rigorous. The audience would rarely notice the difference, but as is the case with any live performance, not everything always went according to plan. The show must go on, as the saying goes, and we had to develop great adaptability and trust under the pressure and uncertainty of live performance—skills that certainly translate to many other aspects of a professional career.
My experience with engineering internships is strictly from having interns on the teams that I have been a part of. I have been involved in the interview process, I have been a mentor, and I have seen interns return to work professionally, after graduation. More recently, I have been responsible for hiring and supervising interns on the teams that I manage.
With the caveat that I have not been an intern myself, there are three aspects, in my opinion, that make for an exceptional internship experience. The first is being included as part of the team, the second is working as a professional and gaining professional experience, and the third is having ownership of a specific project.
Being a Part of the Team
I think the single most important aspect of an internship is being included as part of the team. Personally, I wouldn't have it any other way, but pretty much every intern that I have talked to cited this as the most important and rewarding part of their internship.
It is easy to carve out an auxiliary or orthogonal project for an intern, with the philosophy that we do not want the intern to be on the critical path, or a bottleneck, on an important or high-priority project. Or perhaps we feel that the work is too sensitive or challenging for an intern. When we do this, the intern will inevitably be working independently, and they will not be included in regular team meetings, discussions, code reviews, and so on, in any meaningful fashion.
I have heard stories from people who interned at top technology companies where they worked entirely alone. While the work was sometimes interesting, the fact that they did not feel a part of the team left a very negative impression. They viewed these companies as cold, secretive, and boring. These people generally had no desire to return to these companies for full-time employment.
If an intern cannot be effectively integrated as part your team in a short period of time, it speaks to your ability to on-board new people. How is the experience going to be that much different for a new hire, straight out of school? Or someone new to the team from elsewhere in the company? It demonstrates the effectiveness of your technical practices—testing, code review, mentoring, pair programming, deployment, monitoring, instrumentation—that allow people to experiment, learn, iterate, and be successful, but perhaps even more importantly, it highlights the strength of your non-technical support systems. For example, it may be that your team is not psychologically safe enough for new people to be successful. Or maybe people on your team lack agency.
If an intern cannot be included as part of the team within a few weeks, in a meaningful way, it says more about your team and the broader culture of the organization, than it does about the intern. People want to feel connection and purpose in their work and this is impossible to achieve if they are not a part of the team.
Working as a Professional
Probably the most valuable experience that one can take from an internship is learning how to work as a professional. University, especially, is largely about learning the fundamentals of a discipline. An internship can provide exposure to, and experience in, the rest of the vocation. Things like planning, estimation, code review, security audits, production deployments, on-call procedures, and maintaining legacy systems, are valuable experiences that can be gained from an internship that are not generally the concern of a university education.
As I already mentioned, I feel that participating in the development team is the best way to learn how to work as a professional, and it is also much more rewarding than working alone, or on some marginalized project. One of the most important things that I like an intern to accomplish within the first week or two of starting, is tackling an issue—however small—from end to end. This might be a bug fix or a small enhancement—it doesn't really matter—the important part is to experience the process that makes up professional software development: defining the work, making trade-offs, prioritization, coordination, implementation, code review, testing, deployment, validation, monitoring, and what have you.
Going through this process once or twice within the first week or two will give the intern a good idea of what it is like to work professionally. It will also give insight into the procedures and processes of the team, and it should lay the foundation for tackling more ambitious work during the rest of the internship. Seeing the fruits of their labours running in production and benefiting people should also make the intern identify with their work and engaged from the very start.
Developing a Narrative
I believe it is important to have at least one significant project as part of an internship. People want to find purpose in their work and contribute to something meaningful. Interns will not find satisfaction in some laundry-list of small tasks disconnected from a larger purpose.
As I just mentioned, early in an internship, it is important to tackle a few small tasks and see them to completion. But after that, an intern needs a well-defined project—a goal that they can identify with and have some ownership of. The intern will not work on this project exclusively or independently—they will consult, code review, pair program with others on the team, and so on—but they need to take the lead on this particular project.
Considering an intern might only be with the team for 8 to 12 weeks, this can be a challenge. You need to carve out a project that is meaningful, but also something that can be completed in the short time-frame, while, at the same time, balancing this time with them coming up to speed, learning new technologies and processes, and attending intern events.
As the employer, a significant project allows you to see how this person performs beyond the execution of simple tasks. It allows you to see the thinking behind their work—what motivates and drives this person, how they solve problems, how they communicate, how good they are at learning new things, and how they deal with uncertainty, risk, and conflict. In other words, you get to evaluate the full breadth of this person's skill-set in deciding if you want to one day offer them a full-time position.
As the intern, you have an important interest in completing a significant project that you can reference on your resume—whether or not you want to return to work at this employer, or somewhere else. The project needs to be significant enough that you can describe what you did, the context, and the value that it provided.
In Joel Spolsky's article on interviewing, he describes how we want to hire people who are smart and get things done. He warns that smart does not mean "knows a lot of facts", and, I think, by extension, does not mean "has performed a bunch of tasks". In future interviews, you want to demonstrate that you can get things done and provide value.
Aline Lerner's research has demonstrated that candidates who can effectively describe what they actually did, in context, and why it matters, offer a better indicator for success after hiring. This means that after your internship, you want to be able to make statements about your experiences like the following:
I implemented two-factor authentication for the web application to make it more secure and to increase sales by meeting the requirements to enter a new market.
As opposed to statements like this that enumerate technologies, tasks, or buzzwords:
Designed Software Application including: golang, CSS, testing, Database Migration, TDD, SDL, Agile
You want to come out of your internship with a meaningful narrative and the best way to do this is to feel an attachment to a significant and impactful project.
Having interns as part of a team is very valuable. It reinvigorates the spirit of the team, allowing the team to recurrently see things from fresh perspectives. It also regularly exercises the team's ability to include new people.
If you intern on a team that I manage, you will be included as part of the team, you will work as a professional—treated as a peer—and you will own a specific project that is interesting, meaningful, and valuable. If you have interns on your team, I encourage you to do the same. If you are a student looking for an internship, I encourage you to consider these aspects when evaluating the value that you will derive from potential internship opportunities.
Many students and employers put a lot of emphasis on internships, especially at top companies. But rest assured that it is not the only path to an enjoyable and rewarding career, as my experience, and the experience of many others, demonstrates. Some of the most talented people that I have worked with building software and software systems do not have engineering or computer science backgrounds, but, rather, backgrounds in physics, music, philosophy, and mathematics. In the long run, taking a unique path that satisfies your interests, provides valuable experiences, and expands your thinking, can be just as valuable.
Yes, what you are working on might be extremely advanced, but that also means that you should have the ability to attract the top interns in the field from all over the world. ↩︎