Breaking the Intern Mold: How to Stand Out During Your Software Engineering Internship
Actionable tips to surpass expectations as an intern.
Hello readers! 👋
Welcome to another post in Karthik’s Newsletter. As you know, I’m constantly thinking of ways to make the software engineering journey more accessible and provide a place for everyone to share their learnings.
That’s why I’m very excited to feature Hyunbin Lee in today’s article. Hyunbin will share his learnings from his recent internship and provide actionable advice to surpass expectations in your software engineering role.
Without further ado, I’ll pass the mic 🎤 to Hyunbin 👏
Hi! I’m Hyunbin, a Software Engineering Intern at Etsy for Summer 2024. I love breaking down big questions into small, testable hypotheses. I value experimenting 🧪and using clean, insightful data 📊 to improve our product. This summer, I’ve picked up on a few actionable tips for being an intern.
“Carl the Intern” is a jingle about an intern doing trivial tasks for college credit.
While we might remember “Carl, the Intern” as a catchy song from our childhoods, it’s the common intern stereotype. Interns are given the work the team doesn’t want to do and are disconnected from company needs.
By the time we feel ready to contribute meaningfully, the summer is already over. But what if there was a way to break this cycle and succeed in your software engineering internship?
⭐ Main takeaways
How to gain trust as an intern
How to exceed others’ expectations of you
🚀 Take initiative of your onboarding
In the first few weeks of your internship, you will be onboarding. This entails meeting your manager and teammates, learning what your team is working on, and getting comfortable with the tech stack.
I know it can be overwhelming but you can still own your onboarding.
While it's natural to feel eager to contribute from the start, onboarding is for learning how things operate. This period is less about immediate contributions and more about observing, learning, and identifying where your skills and interests best align with the team's needs. Where can you fit into the puzzle?
During onboarding, we aim to align and understand the team’s growth trajectory and goals. Later, as we become more familiar with our work, we can start poking holes and push our team’s growth even higher!
When I had my initial meeting with my manager, I made sure we were aligned on our expectations for the internship.
Here’s an example dialogue:
You: I'm excited to start my internship and want to make the most of it. I've been thinking about what I can learn and contribute during my time here. Could we discuss what your expectations are for me and how I can align with the team's goals?
Manager: Absolutely, I'm glad you're proactive about this. First, we're looking for you to collaborate on our ongoing projects focusing on improving our project’s user interface. It would be great if you could bring fresh ideas and also learn our approach.
You: That sounds fantastic. I have experience with user interface design and I’m eager to apply what I know and learn more. What are some of the key milestones you’d like me to achieve by the end of my internship?
Manager: By the end of your internship, we’d like to see you handle a section of our project that we're working on. You'll start by shadowing a senior developer and take on more responsibility as you become more comfortable.
You: I appreciate you setting clear milestones. I’ll be sure to regularly check in with updates and gather feedback to improve!
Manager: That’s perfect - regular feedback is crucial. I’m here to support you, so don’t hesitate to reach out if you need anything.
Over the course of the week, I had 1:1 meetings with the “important” people - my teammates, my skip manager, organization stakeholders, and my interviewers.
In these 1:1’s, I made sure to listen and gain as much context as I can. I asked about their interests, their roles within the team, their specific strengths, areas for improvement, and our company culture.
After every conversation, I made sure to ask, “How can I best support you?”
During my onboarding, I was assigned two amazing mentors. The important thing is to find a cadence that works for both of you. In my meetings with my mentors, we would have an open floor for communication where I would share what I was struggling with and what I learned.
Here’s an example:
You: I’ve been learning from fixing small bugs and while it’s been helpful, I’m hoping to take on work that engages more deeply with product development such as building features that retrieve data from the backend. What projects/work do you envision me taking on?
This example worked for me because they followed a key framework:
Reflect on what I’ve learned and express gratitude
Share specific interests
Ask for actionable steps
Following this, my mentor and I worked on setting SMART (Specific, Measurable, Achievable, Relevant, Time-bound) goals.
Here’s an example of how we can align:
Specific: Design and implement two key product components with a feature flag for our upcoming launch. Collaborate cross-functionally to gather context, especially for backend data.
Measurable: Success will be measured by user feedback, performance metrics, peer reviews, and mentor feedback after integrating the new components and feature flag.
Achievable: Regular check-ins with my mentor and team, plus dedicated weekly hours, will help me accomplish these tasks.
Relevant: This work aligns with my internship goal to gain experience across the software development lifecycle. It also supports the team's objective to launch an improved user experience.
Time-bound: Complete development and testing in the next three weeks: week 1 - design and initial coding, week 2 - testing and iteration, week 3 - final adjustments and documentation.
🔍 Learn how to unblock yourself
I’ve felt blocked at some point everyday during my internship.
Being blocked means feeling “stuck” on a problem. Some examples of when I felt blocked during my internship were:
Struggling with a bug and not knowing where to look next
Unsure on how to begin implementing a task
Waiting for a code review so I can merge
Waiting for our product designer to VQA my work
Working off of my teammate’s branch and waiting for them to push their code before I merge my branch
Waiting for permissions or access to specific tools
These situations can be frustrating but we can effectively unblock ourselves.
While developing, we will inevitably feel blocked.
We want to follow the top approach. Proactively seeking help when blocked leads us to solve problems faster and launch on time because we incorporate the diverse advice of others.
As seen in the bottom approach, struggling on our own can slow us down because it narrows the scope of our work and can delay our launch.
When I’m blocked, I search the issue in Slack, Jira, and documentation. Usually, copying and pasting an identifiable line of my code / question into these tools found me actionable results.
Then, depending on the scope of the problem, I identify a channel that would be best suited to help unblock me. For example, when debugging my tests, I would consult a Slack channel for testing or refer to the testing docs.
When asking my question, I provide as much context as possible. Instead of just providing my error message, I follow this framework:
What am I stuck on? What have I tried? What do I think is the solution?
Then, I open the floor for specific, actionable advice.
Example:
You: 🤔 Hey everyone, I’m trying to figure out the best way to query the database for user sessions with certain security settings. I’m using a standard SELECT with a JOIN across our users and sessions tables, but I’m getting results that include inactive or expired users, which I didn’t expect.
Here’s what I’ve tried so far:
SELECT *
FROM users
INNER JOIN sessions ON users.id = sessions.user_id
WHERE sessions.active = TRUE;
Note: This isn’t real code and is just an example.
I expected to see only sessions for users who are still active and verified, but it seems like I’m also pulling in some users who are marked as deactivated or unverified.
I’m thinking maybe I need another filter like users.status = 'active' or maybe this should’ve been a different type of join?
Would love any pointers or examples on how you all usually structure this kind of query! 🙏
🕵️ Focus on solving problems.
At first, I focused on how many lines of code I could write or how many pull requests I opened per day. However, with some advice from my mentor, I realized that I need to focus on the impact.
Focusing on solving problems means digging deeper into why you’re doing something, understanding the audience’s background, and how their life will improve when you’ve completed your work.
For example, when I was tasked with my intern project, I didn't jump straight into coding. Instead, I started by interviewing members of my user audience to understand their challenges and needs.
Through these discussions, I learned how my project could support my audience.
I realized that improving the user experience for my audience leads to increased trust from customers which would drive sales at Etsy, a key metric of product success.
By stepping back to consider these broader business goals and possible solutions, I realized the importance of not diving headfirst into coding. Remember, as software engineers, we have the unique dual responsibility of understanding the business logic while mastering the technical skills. It's important to recognize early on that our technological solutions should always aim to fulfill specific business goals and user needs.
📖 TL;DR
Your summer internship flies by. By the end of the summer, you might feel like you didn’t contribute enough.
Building trust and surpassing expectations as an intern starts from the first day.
During your onboarding, network with both those you’ll be working with and external stakeholders. Learn the lay of the land.
Ask the important question: “How can I best support you?”
Unblock yourself effectively by gaining context on your issue and making it easier for others to help you.
Before asking your question, search through Slack, Jira, and documentation.
When you ask your question, ask the appropriate channel and frame your question to receive tailored help.
Understand that there are always many possible solutions to a problem and consider their tradeoffs. Plan effectively with the background and needs of your users in mind.
Thank you for reading!
I’d love to stay connected and hear more from you. Let’s share insights, updates, and continue the conversation!
📑 P.S
If you found this article interesting, check out the following two articles:
Things I wish I knew as a software engineer: Contains helpful insights that I wish I knew before starting out as a software engineer
Fast track your career: From Junior —> Senior in 2 years: Contains actionable career growth tips from
. Highly recommend subscribing to High Growth Engineer using this link
Feel free to hit the ❤️ button to help support me or share it with your friends. If you found Karthik’s Newsletter helpful, feel free to submit a testimonial here