Who this is for

This guide is meant as a jumping off point for first-time internship seekers who are curious about the essential components of the interview process, interview prep, and state of the industry.

My background

I’ve interviewed at 40+ places and have interned at a number of companies, including:

  • 1 of Airbnb/Stripe/Dropbox
  • 1 of Snap/Pinterest/Uber
  • 1 of Amazon/Microsoft/Google/Facebook

Disclaimer

Internships are not important. They’re not the end-all be-all of your career. Most great engineers you know most likely did not do an internship when they were in college.

What internships do help with is three things:

  1. Help students find out what they want to do for the early part of their career
  2. Helps students earn income to pay for expenses
  3. Give students work experience to make them more visible for future jobs down the line
    1. This is especially crucial. Some people have a head start in this world, and the tech industry is no different. Advantages start early and stockpile – and democratization of knowledge is key to helping make the world more equitable.
    2. Suppose we have two students, student A and student B. They both work hard in their classes, and are talented individuals who are a blast to work with. Now suppose that student A is from a nationally ranked technology high school and that student B is from a historically underfunded school district, and has to work two part-time jobs to pay for tuition. Which student will have the advantage in knowing when/where/how to apply for their first job? I don’t think that student A doesn’t deserve their opportunities, but student B certainly deserves a fair shot at it as well.

This is a rough summary of what I wish I knew about CS internship recruiting when I first entered university.

Timeline

Larger tech companies generally open up applications August to September and usually finish hiring December to January, although a few wrap up in March. Smaller companies are much more flexible and can interview anywhere from August up until May.

Internships are typically 12 weeks in length, but some range from 10 to 16 weeks. Some companies even offer Fall/Spring internships, which they start recruiting for ~6 months before their respective seasons.

Interview Process

After you submit your application, you will wait anywhere from 1 day to 2 months before hearing back from a recruiter. This recruiter will reach out to you through email and will let you know about your next steps. Every company’s interview process is different, but this is the general flow:

Resume Screen

  • After you submit your application, it will be sent to a database where recruiters can find and review your resume. The recruiter can then decide to send you a Code Screen (below) or send you an email to discuss the next steps.
  • This can take up to several weeks. Many times, if a recruiter is uninterested, they won’t send you a rejection email until many months after (and sometimes, not at all).

Code Screen (60min)

  • After the initial resume screen, you will often be sent an initial coding challenge to gauge your ability to write code. You will have often have a week to open the coding challenge, but when you do, you will have anywhere from 1 hour to 3 hours to complete it.
  • Platforms are usually

Recruiter Phone Screen (15-30min)

  • During this phone call, a recruiter will reach out to you to talk about your work/project experience, why you’re interesting in working at the company, and your timeline (e.g who else are you interviewing with/do you have any expiring offers).
    • Don’t feel obligated to share what other companies you’re interviewing for.

Technical Phone Interview (60min)

  • This can be a Hangouts video call or a Coderpad-style interview. If it’s on Hangouts, you will likely code on your own computer and screen share. If it’s on Coderpad, you will write in a collaborative browser session where the engineers can compile and run your code.
  • 1-2 of the company’s engineers will call you to begin the interview.
  • The first 10 minutes will be dedicated to you explaining your past experience or projects. After that, the engineer(s) will give you a coding prompt (e.g “Given a graph, write a method to determine whether it has a cycle”) which you will then write the solution for.
  • During the last 5 minutes of the interview, the interviewer will often ask if you have any questions about the company.
  • These are good ways to score points with your interviewer:
    • Tell the interviewer your thoughts on how to solve the question
    • As you write your solution, talk about your code
    • Periodically write tests at the bottom of the file to make sure your functions are working as intended (these don’t need to be fancy or in their own method e.g you can just use assert statements).

Onsite Interview (3hr)

  • Some tech companies will fly you out for an interview at their HQ. Often, they’ll take care of plane ticket costs, food reimbursements, housing, etc.
  • The interview will be composed of 3-4 technical interviews (e.g solving algorithm questions on a whiteboard or writing code on a computer), and sometimes a behavioral interview with a manager.
  • Sometimes companies will give remote final round interviews (through the phone or internet). This is often the same format as a technical phone interview, just longer.

Kinds of Companies

It can sometimes be helpful to classify companies into certain categories that can help you narrow down your interests, figure out what kind of companies you want to work at, and be better prepared for their interviews. Check out communities like /r/cscareerquestions in order to get more information on a specific company (e.g compensation, interview process, etc).

Note that these categories are neither mutually exclusive nor all-encompassing.

Early-stage Startups

  • Smaller startups are a great way to have an outsized impact during your first internship! If you enjoy wearing a lot of hats and learning about the entrepreneurial landscape, this may be the choice for you!
  • These companies have high variance – be sure to do your research if you get an offer
  • Due to the nature of early-stage startups, you may have to work much longer hours than most engineers (less so for interns)
  • Smaller companies sometimes do not recruit through regular means – you may have to reach out through email or in-person
  • Smaller companies mostly hire for interns that can work across the stack
  • Many in San Francisco Bay Area, but can be found all across the US

Non-Tech Companies

Examples: Walmart, Nordstrom, Home Depot, USAA

  • If you want to have great WLB, work in a specific area (such as Commerce or Transportation), or work in cities where many tech companies aren’t located, non-tech companies are a fantastic option!
  • Many of these companies are rapidly modernizing, so this can also be a great opportunity to build new infrastructure from the ground up
  • Some of these companies are known for their strong engineering departments, while others are not, so be sure to do your research
  • Usually have strong WLB
  • Fun fact: If you intern at Southwest, you get unlimited free flights during your internship!

Tech Companies

Examples: Workday, Salesforce, Cisco, Zillow, SAP, Intuit

  • Consider if you’re interested in working at established companies with a storied product history and longevity in the industry
  • These companies are the bread and butter of the industry, and make up a huge proportion of the internship engineering pool
  • Usually have strong WLB (although this can be less true for certain teams)
  • Spread across the US (e.g Chicago/Tempe/Boston/NYC/Westlake/Palo Alto/Austin/Clearwater etc)

Large Tech Companies

Examples: Amazon, Microsoft, Google, Facebook, Apple

  • If you’re interested in working at a massive company with lots of other interns (1000+), mentorship opportunities, and great tech tooling, these companies may right for you
  • Many of these companies have diversity initiatives to help recruit URM talent, check those out!
  • Well-developed programs to sponsor employees for green-cards
  • WLB varies a lot team-to-team
  • Since they have to hire more software engineers than almost any other company, they have to interview a lot of students (which means that recruiting can be slower than other companies)

“Unicorn” Startups

Examples: Airbnb, Quora, Dropbox, Lyft, Uber

  • If you want some of the impact of a smaller company while retaining some of the WLB/infrastructure benefits of large tech companies like Google, large startups strike a good in-between point
  • Out of all company classes (other than trading companies), “unicorns” usually yield the highest average financial compensation packages. This is in large part due to large stock grants that become liquid on IPO/acquisition.
  • “Unicorn” refers to $1bn valuation (usually these companies have upwards of 1000 employees)
  • Mostly in San Francisco Bay Area or NYC
  • Standard recruiting processes

Banks/Investment Banks

Examples: Capital One, J.P Morgan, Goldman Sachs

  • If you’re interested in working in the quickly modernizing financial industry, this can be a great place to learn about financial instruments
  • Some are known for asking case studies questions, but this can vary
  • Many banks, such as Capital One, are making a conscious effort to be a technology company first, and a bank second. As a result, there’s a lot of opportunity to build out completely new products at these types of companies.
  • Mostly based in NYC

Government Contractors

Examples: Northrop Grumman, Raytheon, Booz Allen Hamilton, Leidos

  • Consider if you’re interested in working in Cybersecurity or Defense technologies
  • Known for focusing more on human/behavioral aspect of interviews
  • These companies have strong work-life balance and benefits, but lower financial compensation (e.g 100K new grad vs 200-400K new grad at tech company/trading company)
    • They’ll pay for tuition, professional development, and have unmatched job security, retirement, vacation, etc
  • There can be tricky rules and regulations (e.g filling paperwork to visit certain countries, etc)
  • Being a US citizen or national is often a requirement for working on many federal contracts
  • Will grant government clearances (even to interns!)
  • Mostly based in DMV

Hedge Funds/Trading Firms

Examples: Jane Street Capital, Two Sigma, Akuna Capital

  • If you like math-heavy and risk-oriented games like Poker, definitely check these companies out
  • There’s three types of CS roles at these kinds of companies: engineering, trading, and quant research
    • It used to be that: Engineering worked on infrastructure to enable trades, trading worked on execution, and quant research worked on developing strategies
    • However, lines have gotten increasingly blurred over the years, so roles of the same name may do vastly different things at different firms. Sometimes engineers work on their own algorithms, and sometimes traders develop their own strategies, etc.
  • Known for asking difficult brainteasers and math/systems questions
  • WLB can be great at some companies (9-5, trading hours) and really long at others, do your research
  • High compensation at onset of career (up to $400K as a new grad), but can level off mid-career if you don’t move to a front-office role.
  • Mostly based in Chicago/NYC

First Internship Companies

For your first few internships, you’ll likely have the best success with getting interviews from big tech companies, government contractors, and small startups. Big tech companies and government contractors hire a ton of interns every year, while small startups often get overlooked by student applyers. While you should apply to as many places as possible, make sure not to miss out on these types of companies as well!

How to get noticed by a recruiter

It can be difficult to get a recruiter’s attention, so along with applying online, you can do these things to help you land the interview (ranked by effectiveness – most effective at the top):

  1. Get a referral from an employee or former intern
  2. Talk to recruiters at career fairs and hand in your resumes
    1. Make a good impression! Smile and be friendly.
    2. Big companies like Google/Facebook often have massive lines of students. Spend your time wisely by talking to employees from lesser-known companies. You’ll be able to talk to more companies, and you’re also more likely to be noticed.
  3. Go to company events and check-in/hand in your resumes
    1. After a career fair, companies set up events where interested students can come
  4. Email recruiters directly by asking them for their card in-person

Mindset

Interviews have a high amount of variance. Whether you proceed to the next round is not an indicator of your true potential, but rather just a combination of what interviewer you got, what kind of a day they’re having, how you feel that day, and how familiar you are with their specific interview process.

As a result, no matter how much you prepare, you will fail a proportion of your interviews, for reasons outside of your control. The goal of preparation is to simply increase the number of companies you do succeed at interviewing for (and remember, you only need one).

Example:

  • (Before studying) Apply to 100 companies, interview with 10, get accepted to 0.
  • (After studying) Apply to 100 companies, interview with 10, get accepted to 3.

Preparing for Interviews

The vast majority of companies now ask algorithm questions during their interviews. The best way to get an internship is to get better at answering these algorithm questions.

I heavily recommend picking up Python for your technical interviews. Python will usually let you write out solutions to algorithms much faster than in other languages. It’s also easy to learn. But if you’re already accustomed to Java or C++ and really don’t want to learn Python, feel free to use that instead.

There’s two resources you’ll want to use to begin the process of getting better at technical interviewing:

Cracking the Coding Interview (CTCI): This is a book on the most common algorithms/data structures from interviews, with a set of ~10 real questions at the back of each chapter. I recommend reading the nontechnical sections at the beginning of the book, and most importantly, reading and doing the questions from the first 4 technical chapters (Arrays/Strings, Linked Lists, Stacks/Queues, and Trees/Graphs).

  • After doing all of the problems from the first 4 chapters, you’ll be ready to start interviewing for most companies. You likely won’t be able to pass all of them, but there’s some experience you can only gain by going through the interview itself.
  • You should also continuously do Leetcode (below) throughout the rest of your interviewing process, and use Leetcode to refresh your problem-solving abilities after long breaks of not interviewing (e.g when you’re looking for a new job)

Leetcode: This is an online coding platform where you can find and practice common algorithms/data structures problems. After doing the first 4 chapters of CTCI, you should make an account on Leetcode and practice doing some of the most popular problems (sort by Frequency). There are also company-specific lists on the right of the site, which are tailored to the types of questions that those companies ask. To get access to certain problems, you’ll have to pay for a subscription.

  • The “Easy” questions are the ones you’ll likely see in an initial code screen or phone interview.
    • You should do these to warm up and practice fundamentals (e.g common imports, patterns for implementing data structures like Linked Lists, and practicing algorithms such as DFS, etc)
  • The “Medium” questions are ones you’ll see in phone interviews or onsites for more technically challenging companies.
    • The majority of your time and focus should be on practicing on this level of questions. Click on the “Discuss” tab to see how others solved the same problem.
  • The “Hard” questions are ones you’ll see in phone interviews or onsites from pretty technically challenging questions.
    • For your first internship/job, I wouldn’t recommend spending time on these problems, unless others say that they’re similar to commonly asked questions that you’re in the interview process for (e.g on a Leetcode Company list, as mentioned above).

Preparing for Interviews++

If you’re interested in more difficult interview prep material, you may want to check out some of the following resources:

Elements of Programming Interviews (EPI): Similar to CTCI, except significantly harder. This book is available in several languages (Python, Java, C++), and is known for having extremely well-written solutions and explanations. Would definitely recommend this book if you want something more organized than Leetcode, with a more curated set of solutions and explanations.

Codeforces: This is a competitive programming platform where you can compete with others to solve algorithmic questions in the fastest time possible. Many of the contest questions are significantly harder than what you would encounter in most interviews, so I would only practice on these kinds of sites if you’re interested in competitive programming for the fun of it. That said, it can be a great way to spice up your practice!

  • If you find yourself really enjoying competitions like Codeforces, check out your school’s local ICPC team! (ICPC is an annual international competition between colleges around the world where teams of 3 students compete to solve the algorithmic problems as fast as possible).

Common Misconceptions

  • While some companies like Google and Facebook still ask Dynamic Programming questions, many companies have stopped asking these questions. In fact, many companies, like Pinterest (article), have outright banned it, since DP comes up so rarely in real-life scenarios.
    • As a result, you should focus on DP problems only if you’re interviewing for one of the companies known for asking it, or if you’ve already mastered the other essential data structures and algorithmic techniques

How to Practice Technical Problems

While you’re working through the problems on CTCI or Leetcode, try to do the following to get the most out of your time:

  • Write out your solutions on a blank sheet of paper first
  • If you can’t come up with an idea of the solution in 15 minutes, then look up the solution (look in the back of the chapter for Leetcode, in the Discuss tab for Leetcode, or Google it) and retry
  • While you’re thinking, talk through your thought process (it doesn’t come natural, so practice!)
  • When you have a solution, code it up on your computer and test to see if it works (try to get it working on the first try, if possible)

While you’re doing these problems you may get frustrated/feel like you’re taking too long to solve the problems, but you’ll be amazed at how fast you improve.

Mock Virtual Interviews

Speaking of practical experience, there are also a number of free services that offer Mock Phone Interviews to help you practice for other companies. In addition, if you do well enough in the mock interview, the services will often even match you to real companies to begin you in their interviewing processes. However, if you’re looking for an internship, wouldn’t worry too much about the latter scenario since these are mainly targeted towards full-time engineers – just focus on using them to improve your interviewing skills!

Here are a few:

  • https://www.pramp.com/#/
    • Unlimited free peer to peer interviews
    • This is great since you can practice multiple times, but since it’s community-based, it’s less professional than commercial services
  • https://interviewing.io/
    • This is a startup that offers 1 practice interview with a real engineer (and matches you to real companies if you fit their profile)
  • https://triplebyte.com/
    • This is another startup that offers 1 practice interview and matches you to real to companies
  • https://alist.co/
    • Another startup, same as above

Apply Before You Think You’re Ready

As mentioned above, if you’ve done the first 4 chapters of CTCI, you’re almost ready to go for the vast majority of tech companies. In many cases, you’ll increase your probability of getting a job/interview by interviewing now, rather than waiting for when you’re “ready”.

You’ll likely fail the first few interviews you have, but you’ll improve far faster with real interviewing experience under your belt!

Quick note: if you’re interested in applying for a company that’s looking for a specific skillset (e.g quantitative trading companies, self-driving car startups, etc) or a company that’s known for having particular tricky interviews (e.g Quora), it can be helpful to spend some additional time studying (check out the Preparing for Interviews++ section).

Applying to Companies

You want to apply to as many companies as you can. One tip: set aside a 1-hour block on days that you’re free for just batch applying to companies.

Make a Google spreadsheet called “Jobs” that keeps track of all of your applications/interviews. This way, you can monitor your own progress and ensure that you don’t miss any interviews.

  • Use the following columns: Company Name, Status, Time
  • Start off with status “Applied” for every company you apply to
  • Add the current date to the Time” e.g “9/12”
  • When you get an interview, update the Status cell of the company e.g “Recruiter Screen”, “Phone Interview”, or “Onsite”, and update the Time cell to the time of the interview e.g “9/14 3PM”
  • Keep the companies where you have an interview at the top of the spreadsheet. Within those companies, order them so that the closest interviews are at the top.

If you know someone at a certain company, ask them for a referral! This is the best way to ensure a recruiter will reach out to you and start the interview process.

Scheduling Your Interviews

  • Try not to schedule more than two phone interviews in a single day
    • Interviews are tiring, and your performance will certainly degrade over time
  • Schedule as many of your interviews in the same few weeks as possible
    • This way, after you do your first interview, you’ll be warmed up for your subsequent ones
    • Having your interviews back to back helps you get over failures faster and remember that interviewing is a numbers game

Fixing Your Resume

Recruiters read through thousands of resumes a week, so make sure yours is in tip-top shape

  • Save it as a PDF, name it “Your Name - Resume - Year”
  • One page only
  • Top-to-bottom organization: Name, School, Work Experience, Projects, Languages/Skills, Awards
  • Use a template (unless you’re a Designer). This is good: https://www.careercup.com/resume

Lists of Companies

To make it easier to find companies to apply to, many students have compiled lists of popular companies to apply to, with a direct link to their applications:

Summary

  • Fix your resume
  • You’ll need a webcam for some interviews, so you should get one if you don’t have one built-in
    • Test your video/mic setup by calling one of your friends
  • Practice technical interviewing
    • Work on problems on a piece of paper, vocalize your process, and code up your solutions
    • Find a copy of CTCI and do the problems from Chapters 1-4
    • After that, practice on Leetcode and schedule some mock interviews
  • Create a jobs spreadsheet and start applying to internships
  • Take breaks and remember that internship/job recruiting is just a temporary, small fraction of your life. When things get stressful, try to remember how unimportant this is in the grand scheme of things (will you really care what first internship/first job you had ten years from now?). Play a sport, spend time with your friends, and do what you can to destress and remain grounded!

A Quick Note

Good luck!