Lessons Learned from the SWE Internship Grind

adithyasolai
The Startup
Published in
10 min readOct 15, 2020

by Adithya Solai

Image from Unsplash

Exceptions & Luck

Of course, everything discussed below will have exceptions. For example, maybe you have a mid/low GPA, but also have tremendous hands-on experience through clubs, projects, and internships/startups.

There will always be an unavoidable element of luck in any recruiting process. The only thing you can do is minimize the impact of luck as much as possible. Make your resume as good as it can be. Prepare and practice your answers to common behavioral questions. Finally: Leetcode, Leetcode, Leetcode. Do all you can from your end, and luck will do the rest.

Software Engineering (SWE) Internship Recruiting Process

Companies will add or subtract to this process as they like, but this is a general overview of what to expect:

  1. Send Resume
  2. Invited to a take-home coding challenge
  3. Invited to a technical phone interview
  4. Invited to 1 or more technical on-site interviews
  5. Offer!

Also, behavioral questions will be sprinkled into the beginning of technical interviews, or an extra behavioral interview will be set up. Behavioral interviews can also come in the form of a conversation with a hiring manager after the technical rounds.

Why SWE?

The SWE path enables students to tackle large-scale enterprise problems and pick up irreplaceable skills directly out of college.

There are also different ways of standing out. For internships, your resume should show that you are passionate about tech. However, you can show that how you like, whether it be through web/app development (Javascript, the MEAN stack) or data analysis projects (NumPy, Pandas, AI/ML).

I felt that I had more control over the interview process for SWE than for other career paths like Data Science/Analytics. If I practiced solving the coding challenge problems on Leetcode.com, I knew I could perform well on technical interviews. There is no pre-requisite knowledge to getting started on these problems either, except CS fundamentals. Additionally, I could just use the language taught in my Intro to CS course because these problems are language-agnostic. (The Resources section below will show how to learn these fundamentals without a formal CS degree.)

In contrast, for Data Science/Analytics roles, I had to be wary of being asked specific concepts from a Statistics course I have taken in the past or a Machine Learning course I have yet to take. I also had to be wary of being asked to utilize Pandas or SQL in take-home challenges and in-person interviews. These recruitment practices indicate that you must have some prior experience with the Data Science stack and associated algorithms.

Despite having lots of hands-on experience with the Data Science stack in internships and personal projects, my breadth of knowledge in CS fundamentals was still much greater than my breadth of knowledge in statistics and data science concepts. It seemed like excelling in Data Science interviews warranted its own preparation process.

Entry Tickets

There are certain “entry tickets” needed to compete for elite SWE internships. I would say 50% of the process is having a stellar resume, and the other 50% is having excellent behavioral and technical interviewing skills. I also think how you apply to positions and network is an important factor, but that is discussed later.

You must have a stellar resume to even be able to use your interviewing skills. Therefore, having a stellar resume is an “entry ticket”. Resumes have two sub-“entry tickets” to be competitive:

  • High GPA
  • Interesting technical projects

Having a high GPA is especially important for students from non-elite CS programs. By elite CS programs, I am referring to the Ivy Leagues, Stanford, MIT, CMU, CalTech, UC Berkeley, UCLA, UIUC, etc. A high GPA is crucial for gaining credibility with your reader (recruiters) in addition to the credibility that your college/university brings.

Projects should showcase your passion for technology and your self-starting, entrepreneurial spirit. Recruiters want to see that your passion for tech compels you to take on challenging projects outside of the classroom.

One of the most common pseudo-behavioral, pseudo-technical questions in SWE interviews is: “Tell me about a project you are most proud of.” Make sure you have a good response to that question. You will be interviewing with engineers and techy people, so you can assume your audience has decent familiarity with the technologies you are using in projects. For this reason, you should also be prepared for follow-up questions that dive deeper into your process and motivation for designing and implementing your project.

I think having prior, tech-related internships is a very good nice-to-have on your resume. However, I don’t think it is a required “entry ticket” to be a competitive applicant.

Leetcode

I don’t know what I can say that hasn’t been said by others. You will have to commit a couple of weeks of your life to this website at some point.

Leetcode provides a consolidated location where you can solve common technical interview questions with an in-browser coding and testing environment.

I would recommend completing the 50–70 most popular “Medium” difficulty questions. You can sort by frequency, which is a measure of how often a question appears in real technical interviews.

Once you are comfortable with the “Medium” questions, the “Easy” questions will come easy. You will also have the tools and knowledge to tackle the rare “Hard” question that can appear in SWE Intern technical interviews.

The technical interview is really a test of how you solve a problem you have not seen before; it is not about memorizing solutions to all possible questions you can be asked. You are really grinding Leetcode to add nuanced data structures and new algorithms to your toolbox.

This is also why I think there are diminishing returns after doing 70 unique “Medium” problems, at least for the SWE Intern level. I would recommend trying to re-do all 70 problems instead of moving on to new, less-popular “Medium” problems.

If you are a Freshman or Sophomore, I recommend getting a yearly Leetcode Premium subscription, which costs $159. Knowing that you already put your hard-earned money into this website will motivate you to get more value out of it. As a Freshman or Sophomore, you also have more time to make use of it than a Junior who is already in their “prime time” Fall semester.

Python

Technical interviews can be stressful. You want to avoid any extra stress on your brain. You definitely want to minimize coding errors related to syntax, pointers, memory allocation, etc. This is why I recommend learning and using Python for technical interviews.

Python was created to make programming easy and readable. Take a look at the comparisons between Python and Java for lines of code you will definitely be using in technical interviews. Which one would you prefer to write on a whiteboard with no compiler and no line completion?

Efficient, Re-sizeable Arrays:
Java: ArrayList<Integer> x = new ArrayList<>();
Python: x = []

Dictionaries/Maps:
Java: HashMap<String, Integer> x = new HashMap<>();
Python: x = {} or x = dict()

Sets — O(1) Insert, Delete, & Search:
Java: HashSet<Integer> x = new HashSet<>();
Python: x = set()

One of the frustrating things about Java is that data structures are homogeneous — they will only store the data types you specify when you initialize them. All Python data structures are heterogenous — you can store all data types and never commit to a rigid set of data types.

Python data structures seamlessly change to different data types, and you can keep working with the same variable. As a result, Python data structures are conducive to operations like list comprehensions that facilitate map() and reduce() functions.

One benefit of Java is that you have well-documented, nuanced data structures already built-in to the standard libraries:

  • Stacks/Queues → Stack<E>, Queue<E>, or LinkedList<E>
  • Min-heaps → PriorityQueue<E>
  • Ordered Dictionaries → LinkedHashMap<K,V>

Python also supports these data structures. They aren’t as well-known, but they work just fine!

  • Stacks → [] with append() for add and pop() for remove.
  • Queues → [] with append() for add and pop(0) for remove.
  • Min-heaps → heapq
  • Ordered Dictionaries →OrderedDict

Behavioral

Although most of your interview prep should be spent on technical coding questions, behavioral prep should not be overlooked.

Create a “story toolbox” — a document that answers generic/common behavioral questions with stories from your personal and professional experiences. Make sure to utilize the STAR method when giving your answers.

Here are some common behavioral questions I answered to create my “story toolbox”:

  • Tell me about yourself. (Don’t need STAR method for this.)
  • Why are you interested in this company & role? (Don’t need STAR.)
  • A story about when you had to respond to pressure & tough challenges.
  • A story about working on a team.
  • A story where you made a mistake, and how you learned from it.
  • What is your greatest strength?
  • What is your greatest weakness?

(For Amazon, you will have to do this all over again for their 14 Leadership Principles and associated questions!)

False Positives & False Negatives

This has to do with the hiring philosophy of companies and its recruiters. I still think it’s important and motivating for applicants to know.

True Positive: The applicant hired by the company is actually a high-performing employee that fits in well with the company’s culture.

True Negative: The applicant rejected by the company would not have been a high-performing employee if hired.

False Positive: The applicant hired by the company actually turns out to be low-performer that does not mesh well with the company.

False Negative: The applicant rejected by the company would have actually been a great fit if hired.

For a company, the cost of hiring a false positive is IMMENSE. They have to pay that person, spend the hours of high-performing engineers to train that person, and also figure out how to fire that person.

The cost of a false negative is just the time and resources spent in interviewing that person.

For this reason, companies are OK with false negatives as long as it protects them from false positives. They do this by being very selective with which applicants they give offers to. As a result, many qualified, false-negative candidates will be rejected.

If you make it very deep into the interview process for an elite internship and get rejected at the final stage, understand that you might just be another false negative! Another company would be blessed to have you!

Apply Early, Apply Often

The Fall semester of Junior year is “prime time” recruiting season because the final summer in college is coming up, and companies are looking to extend full-time offers to these Juniors after their internship. Make sure to fail as many times as possible in prior years to prep for this season!

As a Freshman, it is understandable to think you are not ready, especially if you have never coded before. However, I wish I had applied more and failed more in Sophomore year. I only got 1 or 2 technical interviews and a couple of take-home coding challenges. If I had applied more, I would have gotten more practice with the anxiety and nervousness of technical interviewing. I would have also been more motivated to grind Leetcode because I would have had more interviews to prep for.

Apply Directly

I prefer to apply directly on the website of the company I want to apply to. Even if I find the job listing on Indeed or through Google Search results, I still put in the extra time to find the original application.

Mass Apply or Networking?

Why not both?

I don’t think networking is as important for SWE internship recruiting as it is for career paths like Investment Banking, Consulting, etc. However, I do think networking enough to get a referral can be huge.

Getting a referral from a current engineer allows your resume to skip the line and get looked at by a recruiter before applicants who only applied online. I don’t think messaging dozens of engineers on LinkedIn and asking for a referral from the start of the conversation is a wise tactic. These types of relationships take time to build. The engineer is risking their reputation by endorsing you. Therefore, you will need to demonstrate your passion, experience, and work ethic over time before asking for a referral.

Apply Efficiently

The application form will usually be hosted by Lever, Greenhouse, WorkDay, iCims, etc. You will get very familiar with the tediousness of these application formats.

On top of resumes, most application formats ask for similar information:

  • E-mail Address
  • Phone #, Address, etc.
  • LinkedIn, Personal Portfolio Websites, etc.

I kept a Notepad document that had all of this information ready so that I could just Copy-Paste, and not be worried about typos. The application forms will also algorithmically pull information from your resume. You will notice that the same application form services (Lever, WorkDay, etc.) will make the same exact minor mistakes when parsing your resume. I kept the correct text in my Notepad document to quickly delete the mistake and Copy-Paste the right information.

All of these minor optimizations add up when you are sending out 100+ applications.

Helpful Resources

  • Cracking the Coding Interview — This book is a must, especially if you are someone without a formal CS education/degree. I wish I used it earlier in the process. The opening chapters explain what I discussed in this article in much more detail. It also reviews essential CS topics (arrays, linked lists, stacks/queues, trees, recursion, dynamic programming, sorting, etc.).
  • Leetcode.com
  • JobHunt.fyi — The best internship application repository website I have found so far. It takes you directly to the company’s website to apply, and not some third-party service. There are many others.
  • Levels.fyi — Some motivation!

E-mail me at adithyasolai7@gmail.com with any questions/comments!

--

--