An internship can be a defining moment in someone’s career. It’s the time to learn and get first-hand experience into a potential avenue of your future. That’s why when I was asked to be a mentor for a summer software engineering intern at Twilio Segment, I decided to get as much insight as possible into what makes or breaks an internship.
Below you’ll find the lessons learned from my perspective as a mentor and also from our intern’s perspective.
Things to consider when mentoring an intern
Think back to early in your career, what did it feel like coming into your first day of work? Perhaps you were motivated, nervous, or even fearful. These feelings combined with already-in-place work dynamics can fuel your motivation, but some can also create a less-than-ideal environment for learning and growth. The following tips are aimed at maintaining an environment that fosters knowledge, curiosity, and growth in a safe and sustainable way.
1. Build trust first, then product. Take a pulse on how your intern works and how much guidance they’ll require. Set the base for an iterative work/feedback loop. This can be in the form of daily check-ins, frequent chat messages, weekly 1:1s. Set a structure that’s sustainable for both of you with the goal of creating a space where it’s easy to give feedback and ask/answer questions. This sets an expectation between the mentor and mentee that no question is too “silly” or“uncomfortable” to ask.
2. Pair Programming early, and often. Getting a hold of a new codebase takes time, and given that internships are short you should act as a catalyzer for this process. Set Pair Programming sessions early in the internship and be the driver for them; the further the project moves, the less you drive. That way you are teaching and allowing the lessons to be shown to you as well. Other examples that serve the same purpose can be to set some time aside for joint code review sessions and talk your review process out loud. You can also organize ride-along sessions were you become a “streamer” where you go into your day-to-day work but allow an audience to see your screen and hear you talk about what you are doing.
3. Choose your project carefully. Make sure to pick a project where you won’t be a bottleneck for your intern - you can pitch in, but so can other teammates. Having other people develop a relationship with your intern is beneficial for all involved parties. Additionally, if possible, aim to select a project that doesn’t have a looming deadline; give yourself some wiggle room. Look for that tech debt project that has to be completed but isn’t the most urgent.
4. Make them part of the team, not a novelty. This is perhaps the thing I heard the most while doing research amongst people who had internships before. “I never felt like I was part of the team”, “I was very isolated”, “I only worked with other interns”. It became my goal to make our intern feel like a teammate as much as possible. This influenced our project choice, workflow structure, and demo sessions. A few extra tips:
Loop your intern into team meetings and processes.
Do not silo them. This goes for both project and team-dynamics wise.
Throw some backlog tickets into the workload mix so they can accomplish other types of work.
5. Encourage visibility of their work. Showing your work can be scary and not something that comes naturally. As a mentor, you need to facilitate opportunities for your intern to showcase their work across the team/company. A couple of things we tried here were:
Have public discussions: DM’s are nice but having a dedicated public project chat channel where you can talk as a group sheds light into the work and everyone’s thought/troubleshoot process. Additionally, it facilitates collaboration within the team.
Demo: There’s always a demo day on the calendar. Take advantage of it! You can also participate in the demo so it’s not a solo experience and take a bit of the pressure off
6. Let them exercise their soft skills. Allow your intern to manage expectations, deal with their project deadlines, look for consensus, etc. Software engineers should participate and be encouraged to have a say in these interactions. Encourage your intern to jump in during these discussions! And of course, provide a guiding hand when required.
7. Say it with me, “Making mistakes is normal.”Mistakes are inevitable and not the end of the world. There should be a structure around identifying and correcting mistakes without high cost repercussions. After all, you and your intern are a team and you’re both learning the process that works best.
Things to consider as an intern
Your internship is a valuable time to gain hands-on experience, to connect coursework to a professional role, and to get exposure to the industry. It can feel daunting in the beginning, because it requires a skillset beyond what you see in job interviews and classes. However, the knowledge and experience you gain from your internship will have a powerful and positive impact on your career path. For me, the three most important takeaways from my internship are:
It provided valuable exposure to workplace culture, teamwork, and communication. I learned how to interact with colleagues, unblock myself for more open communication, and work towards a mutual goal with the team. Working with the team also encouraged me to explore the “uncomfortable zone”, learn new skills, and understand diverse perspectives.
I experienced a full professional software development lifecycle, from the initial stage of writing design documents to a final release which taught me about budgeting my time and communicating deadlines.
There is so much more to consider when you release to customers compared to a school project, and the skills and knowledge I learned in that process are what I find most valuable. Take error message handling for example, a good error message should not only tell the customers what the issue is, but also how to fix it. This is something I wouldn’t have anticipated in an isolated school project.
Here are some tips I collected during my internship and I hope they help you get the most out of yours:
1. Don’t hide issues. It’s easy to run into a lot of issues at the beginning and get blocked. If searching documentation or chat histories doesn’t help resolve your issue, ask for help. Share your question with a clear context. Here is some guidance on how to formulate a good question:
Explain the high-level goal and detailed steps to reproduce the issue. Try to include images/GIFs to help your colleagues understand your question better.
Compare what actually happened against your expectations. This can help reframe the question and shed light on new ways to troubleshoot. Sometimes, you’ll even find that your expectations are actually wrong and the outcome is expected.
Showcase what you think might be wrong and what you have tried to find a solution. This is both beneficial for you and for the team.
You’ll get high-quality responses if it’s easy for people to follow and help you. In the future, people with the same issue can also refer to your solution.
2. Take ownership and initiative. Your priority is to finish the internship project and meet expectations. If you have time, think what you can do for the team beyond your internship project to empower others. Even small tasks can have a big impact — optimizing a process that feels like a pain-point or drawing a diagram to help the team understand how things work.
3. Don’t wait until a midpoint check to ask for feedback. Instead, ask for feedback regularly from your managers, mentors, and peers. Take notes and have action items to improve on what you hear. Feedback is a gift because it provides you an opportunity to reflect and do better. Along the way, their feedbacks are stepping stones to your accomplishments. In addition, give honest and transparent feedback to the team.
4. Don’t rush to contribute to a codebase and/or make changes to production. Schedule time with your manager or mentors to walk you through the codebase. You can use that time to get familiar with the code pieces you care about by using breakpoints and print statements. In addition, make sure you understand what you are doing and ask for advice when merging code to production for the first time.
5. Communicate regularly with the team. Have regular updates about your internship project to give visibility to your work. Consider demoing your project in a demo day or sprint meeting. This is important to build the trust and engagement with the team.
6. Attend events and meetings to meet your peer interns and full-time employees. It’s important to talk to and have some fun with your peers to build the relationships, especially in a remote setting. This is also a chance for you to assess the company — do people enjoy working here? What are their feelings towards the company’s culture?
Mentors and the team are there to help you, not judge you. It’s in everyone’s best interest to see the work you do. They understand that you are still learning, and you may not know every acronym or process. Your mentors are doing everything they can to get you onboarded quickly, to unblock you when you run into issues, and to help you fit into the team. The relationship you build with mentors and the team is of great importance to a successful internship. Oftentimes, you’ll find that their guidance and advice is more valuable than the technologies you learned.
From the mentor’s perspective, a successful internship isn’t just one that completes a project but one that succeeds in integrating the intern into the team and company’s culture. It should also be one that allows them to exercise their technical and soft skills in a professional capacity, and provides enough insight into the day-to-day of a full-time employee. Ultimately, the goal is to provide enough context for the intern to answer the questions: “Do I like this company and the culture?” and “Do I like this role and responsibilities?”
The tips provided above should paint a meaningful picture for mentor and mentee of what a meaningful internship experience means for both parts. Use them as guidance and as they fit within your company to positively shape the next generation of Software Engineers.