Making the Most Out of Your Software Engineering Internship
Tips for having a great software engineering internship experience :)
Congratulations on securing a software engineering internship! Give yourself a pat on the back for the many rounds you have endured along with a tough job market.
What’s next? After focusing your efforts on interviewing with companies, you may feel a bit lost on how to succeed in the role.
You have come to the right place. Feel free to make yourself at home, grab a drink and let’s sit around the fireplace. Take a few deep breaths. You got this!!
Preparing for the Internship
This is a common question that I get asked a lot. Below are a few things you can try to help ensure a smooth start:
Living Situation + Commute
If your internship will be in an area that’s new to you, it would be useful to search for housing and figure out what your commute would be like. Many companies will provide some links/resources on how you can find housing in the area along with commuting to the office. If not, resources like AirBnb, Apartments.com, Facebook Forums come in handy. Sorting these details out would reduce a lot of stress and let you focus on the day-to-day responsibilities.
Learn about the work
Learning about the work will help you understand what the game plan will look like for the duration of the internship. This step varies based on factors such as the company or organization within the company you’ll be part of. While I can’t cover all bases, I can offer a few strategies:
Research the company to understand the mission and what products it works on at a high level
Set up a 1:1 meeting before the start of the internship with your manager if possible. This shows initiative and proactiveness from your end! Some questions you can ask include but not limited to:
What is the team’s mission, objectives, and goals at a high level?
[If you have a specific area of interest] Is there potentially any opportunity for me to get involved in a project that aligns with <insert area of interest here>? I'm open to learning about new areas as well and am excited to contribute however I can.
What are the key expectations and desired outcomes for this internship? I want to make sure I understand what success looks like.
Are there any specific tools, technologies, frameworks, or articles that you would recommend I familiarize myself with prior to starting, to help me hit the ground running?
Could you tell me a bit more about your role and background? I'd love to get to know you better as a manager and person.
What is the best way to ask for your feedback/input during the internship?
Day to Day
During your internship, you may be assigned a project that you’ll focus on. You generally will be evaluated on how much progress is made during the project along with your demonstrated growth. Think of the internship like a “~3 month interview” for the company to gauge your potential to come in as a full-time software engineer (ie: continue investing in you!!). Here are some strategies you can leverage to demonstrate growth over these few months
Asking for Help Effectively
There will be times during your project when you may be stuck/blocked. A common trap that I’ve seen (and experienced myself when I was an intern) is trying to figure it all out by yourself and neglecting asking for help (or asking for help too late). This is not the best mindset to have and could result in lots of time wasted as well as unnecessary frustration/anxiety.
Software Engineering is a team sport. Your teammates want you to succeed!!! However, they won’t be able to help you until you ask. There is no such thing as a dumb question! You aren’t expected to know all the tools in the tech stack beforehand. You will learn as you go and get better with time.
Suppose that you are an intern working for RecipeShare, which is a social media app where users can create and share recipes (ie: Facebook specifically for sharing and discussing recipes). Your project is to implement a feature where users can add images to recipes they create or edit in the app and store the image in a cloud-based storage system. The overall tech stack of RecipeShare is React for the frontend, MongoDB as the database, and an Express server for the backend. You’ve identified that you want to go with S3 as the cloud-based storage system, but you’re having trouble with integrating S3 into the company’s codebase and need help.
Less Effective:
DM: Linda (she/her/hers) (Intern Mentor)
You: Hey Linda. I'm working on a feature where I'm trying to
upload files to S3. However, I'm having trouble
integrating S3 into the codebase. Could you please advise?
---4 hours later---
Linda: Hey. Sorry I didn't see your question.
What have you tried so far? Where are you stuck
You: I tried searching Stack Overflow for some help,
but I'm not sure how to start
Linda: Did you try reading the documentation?
You: Ummmm. I don't think I tried that. Could you link it?
Linda: <Link to Documentation>
- - 1 day later - - - -
You: I tried reading the documentation and I'm stuck on how to
integrate S3 into our frontend? Could you clarify
Linda: Sure, let me provide some guidance. For the frontend integration
with S3, you might want to look into pre-signed URLs to allow your React app
to upload files directly to S3 without exposing your AWS credentials on
the client side. The flow would be:
* React talks to Express to generate presigned URL
* React uploads image with pre-signed URL to S3
Does this make sense so far? Let me know if you have further clarifications
Why is this not the most effective?
Limited Visibility: This question was asked in a private DM with Linda. This adds a dependency of waiting on Linda to help unblock you. Linda might be having a busy day and she might take a while to respond to you
Too vague: This question lacks context.
- Why are files being uploaded to S3?
- What is the specific problem trying to be solved?
- What has been tried so far? Where specifically are you stuck?Extra Back and Forth: Linda ends up needing to ask further clarifying questions to understand where you’re stuck
More Effective:
Channel: #recipe-image-upload-feature
Members: Bob (he/him) (Your Manager), Emma (she/her/hers) (Software Engineer),
Linda (she/her/hers) (Mentor), Taylor (she/her/hers) (Product Manager),
Michael (he/him/his) (Software Engineer)
You: Hey team, I'm integrating AWS S3 to allow image uploads in
the RecipeShare app. I've read the documentation (linked here) and
set up an AWS account and an S3 bucket for testing, but I have some
questions regarding the implementation:
a. Authentication: What's the best practice for authorizing
the React frontend and Express backend to interact with
S3 (access keys, temporary credentials, etc.)?
b. File Upload Process: Are there security concerns with
uploading images to S3? Also, are there existing RecipeShare
policies that we need to consider during this process?
c. Accessing Images: For image retrieval, I propose adding a column
in MongoDB's "recipes" table. Is this a good approach, or
is there a better alternative?
Would appreciate any guidance/code snippets/recommendations. Thanks!
Emma: For authentication, use IAM roles with temporary credentials.
I'll share an example. For uploads, use pre-signed URLs and validate
file types/sizes. Consider bucket policies to restrict public access.
Taylor: Storing the S3 object key or full URL in a "recipes" collection
column sounds reasonable. Alternatively, store just the recipe ID and
fetch the URL when needed.
Bob: Look into libraries like "react-aws-s3" or "aws-amplify" to simplify
the frontend integration.
Michael: Consider client-side encryption for sensitive images using
something like "aws-encryption-sdk".
Linda: I'll provide some code examples and documentation links to
help with the implementation. Let me know if you need any clarification.
You: Thank you all for the insights and recommendations! I'll
review everything and follow up if needed.
Why is this more effective?
Increased Visibility: Compared to the previous example, this question is asked in a public channel where multiple individuals from the team have visibility into the issue you’re running into
Context + Legwork: This question provides clear context on the problem to be solved and why S3 is being used. In the later part of the message, the questions asked were specific and show what has been tried on your end to find an answer. This helps others on your team tailor their response and minimizes unnecessary back-and-forth
Caveat: As a helpful rule of thumb, if you have done some initial legwork on resolving your own question but still stuck after 30 minutes, it is okay to reach out. The key is balancing being stuck for too long on a question vs. asking for help immediately without any initial investigation from your end
Reduced Back and Forth: Emma, Taylor, Michael, and Linda were able to provide responses to the specific problem at hand. They didn’t have to ask further clarifying questions nor respond with lengthy paragraphs
Leave the Campground Cleaner than you found it
Leave the codebase/team/process better than you found it. Even though your project would be the main area of focus in these few months, it’s very important to identify ways you can leave things better than you found it. While these actions might not necessarily boost the revenue of the company, it shows proactiveness + ownership which are traits that organizations tend to incentivize. Below are a few ideas you can try to incorporate (including but not limited to):
Document, Document, Document
Document anything you learned from interactions with your teammates. You don’t need a fancy tool for this. Simple Google Docs suffices. These insights/learnings when written could be a valuable resource for your team and any new hires that join in the future!
💡This could be the seed of an idea to update or create an onboarding doc for your team💡
Document information about your project. If you haven’t yet, I strongly recommend writing a brief technical design document (shoutout to
for this fantastic template!) to describe the purpose of your project as well as the implementation decisions made. Documenting your project helps your team and others in the company learn about your work because written communication is easier to distribute than verbal communication!
Knowledge Sharing
In order to make your project more visible to your team and organization, take the lead on setting up a knowledge share session (most internships have interns prepare a presentation about their project). This session allows you to teach others about what you learned
If there are any topics you’ve learned from academic or personal projects, you can also teach those topics to your team
Technical Debt Cleanup / Process Improvements
If there is any difficult to understand/confusing logic in the codebase, chances are that maybe others might have similar pain points. Taking initiative to remove unused code, restructure convoluted logic, or removing unused/deprecated dependencies could help improve developer velocity
If there are any processes you find yourself doing repeatedly, there might be a way to automate it and share it with others. For example, if there are a sequence of commands to run repeatedly to push code to the shared repository, we could build a terminal alias that lets you conveniently run that sequence of commands with a single command
Working with your Manager
Your manager will be an important part of your internship as they’re trying to decide if you’d be a good fit to work for the company as a full-time software engineer. Thus, maintaining an open and friendly relationship with your manager is paramount. Both you and your manager should be comfortable communicating with each other!
Your manager is also a great resource for gathering feedback and sharing your goals. Below are some tips:
Set up a recurring 1:1 with your manager: 1:1 meetings (biweekly or weekly) are a way for you to have dedicated time to talk with your manager about how you’re finding the internship experience. Create a 1:1 doc to jot down the key topics discussed along with any action items
Communicate your goals as early as possible: If there are any areas that interest you, don’t hesitate to let your manager know. This insight can help your manager tailor your internship experience to your interests. For example, if you’re interested in backend development and working with databases, your manager can try to identify a project area where you would be diving deep into those concepts
Ask for Feedback: During your meetings with your manager, you can also ask for feedback regarding what areas you are doing well in as well as areas for improvement.
Don’t feel discouraged if your manager is suggesting areas of improvement. You are not expected to be a perfect engineer at the get-go! Rather, the expectation is generally to show improvement over the course of the internship. Everyone has areas of improvement 🙂
Please Remember…
Enjoy the experience: While the internship will be filled with lots of hard work and learning, take a moment occasionally to enjoy the experience. Especially if you are working out of a new place, feel free to explore the area with the people you’ve met!
Try not to compare yourself to others: During my first internship, I’ve experienced my share of impostor syndrome. I’d have thoughts such as “How are my colleagues able to complete their tasks with such ease?” Keep in mind that everyone has their own beginning and learning new things takes time. The purpose of the internship is for you to learn! Take it one day at a time
Meet other interns and full-time employees: Meeting other interns allows you to learn more about what they’re working on at the company as well as their past background. This can be a great opportunity to make new friends and grow your network. Meeting full-time employees can offer insight into their experience of working at the company since they generally have been around at the company longer.
If you found this article helpful, consider upvoting and sending this article to anyone who may be interested!
Special thanks to Surya Subramanian and Noah Iversen for their feedback on the initial draft.
Thanks for answering my questions! A few more:
1) What is the best approach to participating in daily standups? Should I provide an in-depth overview of my work, or focus on concise updates, blockers and areas where the team can help?
2) How can I effectively listen to and incorporate feedback from my manager and team? What strategies can I use to implement feedback constructively and improve my performance?
3) What are the best practices for communicating with remote team members?
4) How should I handle feedback from code reviews? What should I do if I don’t agree with the feedback?
5) How can I ensure my code meets the team's standards?
Thanks for sharing! I suggest in your "Learn about the work" section to formulate your recommendations into questions - would be more actionable!
What are your thoughts on scheduling a meeting with your manager's manager? I'm not sure if that's applicable to all companies though, you'd definitely have to read the room on that.