This guide is a jumping off point for first-time internship seekers.
Last updated: December 29, 2021
Why trust me?
During school, I spent my summers interning at Airbnb, Pinterest, and Microsoft. I interviewed for 50+ companies and spent countless hours deciphering the interview process. After I left school, I kept getting the same few questions: “how do I get an internship at X?”, “how do I prepare for my interviews?”, “what companies should I apply to?”.
So I decided to write down everything I wish I had known about the tech internship system when I was in school.
- Which Companies Should You Apply To?
- The Interview Process
- Preparing for Interviews
- Apply Before You Think You’re Ready
1. Which Companies Should You Apply To?
Every company has a set of characteristics – some pay more, some hire freshmen, and so on. You should learn these characteristics. That way, you can narrow your search to the companies that are (1) most interesting and (2) most likely to give you an offer. You’ll also be able to better prepare for each company’s individual interview process.
Here are the categories of companies you should know:
- “Big N” Companies
- “Unicorn” Startups
- Growth Stage Startups
- Early Stage Startups
- Fortune 500 Companies
- Mature Tech Companies
- Government Contractors
- Trading Firms
“Big N” Companies
- Some of the largest companies by market cap in the world, like Amazon, Microsoft, Google, Facebook, Apple, etc
- Massive internship class. Google has 1000+ interns every summer. Lots of fun events
- Structured mentorship system
- Initiatives to help recruit college freshmen/sophomores and URMs
- FB/G can offer 250K+ packages for some new grad engineers
- Late-stage startup with $1bn valuation, usually 1000+ employees
- Airbnb, Quora, Dropbox, Lyft, Uber, etc
- Engineering and culture-wise, very similar to “Big N” tech companies. Except employees often slant younger
- High compensation packages because of stock grants that become liquid on IPO/acquisition. Not applicable to interns
Growth Stage Startups
- Startup that’s found product-market fit, usually 50-1000 employees
- Rapid scaling of headcount means that their #1 goal is to convert you to a full-time employee. Harder for freshmen/sophomores to get an internship
- Ideal for would-be founders to see what “winning” looks like
- See https://startupsearch.com/list/engineering-internships-2022
Early Stage Startups
- Seed-stage, pre-product market fit startups, usually 1-50 employees
- More responsibility than most internships
- Very risky business-wise. High possibility that the startup won’t exist a year from now. If you’re looking to be a founder, risk of learning bad habits
- Lonely if no other interns, little to no internship structure
- Hard to find, may have to reach out through email or in-person events
Fortune 500 Companies
- Huge, non-tech oriented company that’s been around for decades
- Engineering is not the focus of the company. Many are modernizing legacy infrastructure. You’ll likely work on these rewrites
- Fun fact: You get unlimited free flights during your internship at Southwest
Mature Tech Companies
- Tech company that’s been around for decades, like IBM, Adobe, SAP. Almost as large as “Big N” but not as “hot” in the eyes of new talent
- Similar to “Big N” tech companies in terms of structure. Compensation is also similar, except at the high end. Employee population usually slants older
- Large 10,000+ person corporations that work with the government to deliver solutions in defense, health care, etc. Like Northrop Grumman or Raytheon.
- SWEs often work in cyber-security
- Focus on behavioral interviews vs coding screens
- Required to be a US citizen or national to work on some federal contracts
- Will grant government clearances (even to interns)
- Small financial firms that uses quantitative strategies to extract value from financial markets, like Jane Street, Jump, Citadel, etc
- Skim through http://isomorphisms.sdf.org/maxdama.pdf for a brief intro
- Three types of CS roles: engineering, trading, and quant research
- Asks brainteasers and math/systems questions
- WLB can be 9-5pm at some companies (trading hours) and longer at others
- High compensation at career onset (up to $400K as a new grad). Levels off compared to startup equity if you don’t move to a front-office role
- Usually based in Chicago/NYC
Tip: If you want to dig deeper into a specific industry or company, try /r/cscareerquestions or Glassdoor.
Playing the Status Game
“If every job asks for prior work experience, how do I get work experience?”
It’s unlikely that you’ll be able to land your dream job in one try. In most cases, you’ll have to build up your resume over the course of a couple jobs. Interning at company A will make company B interested in you. Interning at company B will make company C interested in you.
If you’re starting from scratch, your top priority should be getting any internship at all. It doesn’t matter where you work, as long as you can put it on your resume. This will open up the door for you. After that, your next priority should be finding an internship at a “name brand” company. A company that recruiters will recognize (“Big N”, “Unicorn”, “Large Tech”, etc). Once you have a “name brand” internship, you’ll be able to get an interview at 9/10 of the tech companies you apply to.
Don’t play the status game if you know that you want to pursue a career path that doesn’t need “resume credentials”. If you know you want to work at a small startup after you graduate, then you don’t need an internship at Google. Pad your resume if you want optionality. Don’t pad your resume if you want progress toward a specific trajectory.
- Freshman year, worked at a early-stage startup
- Sophomore year, worked at a early-stage startup
- Junior year, worked at a well-known “unicorn” and a growth stage startup
- Freshman year, worked at a government contractor
- Sophomore year, didn’t work
- Junior year, worked at a self-driving “unicorn”
- Freshman year, did research at the university
- Sophomore year, worked at a government contractor
- Junior year, worked at a marketplace “unicorn” and a “Big N”
For your first internship, apply to companies that hire students with no experience. You’ll have the best chance with “Big N”, government contractors, and small startups. “Big N” and government contractors both hire massive amounts of interns every year. Small startups aren’t well known, so there’s less applicant competition. Focus on these three types of companies to maximize your chances of getting an offer.
If your internship search is unsuccessful, don’t fret. There’s a lot of other ways to spend the summer and build up your resume. You could email a professor and ask to do research at your university. You could write software for a local student-driven startup. You could contribute to an open source project. Try your best to find a place where you can write code.
2. The Interview Process
Once you submit a job application, you’ll wait anywhere from 1 day to 2 months before hearing back. Recruiters will send you an email letting you know about next steps. Here’s how the interview process generally works:
- When you submit a job application, the application lands in a database. A recruiter looks at the database each morning and picks a set of applicants to advance to the next round.
- If the recruiter decides to send you to the next round, they’ll send you an email with the next steps. This is usually a Code Screen or a Recruiter Phone Screen (below).
- This can take up to a few weeks. But if a company isn’t interested, they might not send you a rejection email for months. Companies don’t want to risk closing off their interview funnel. If enough offers aren’t getting accepted, they have to advance more candidates.
Code Screen (60 min)
- After the initial resume screen, the recruiter will send a short, coding challenge.
- You’ll have a few days to open the coding challenge. But when you open the challenge, you’ll need to complete it within the hour.
- Familiarize yourself with Hackerrank. 99% of the time, your coding challenges will be on the Hackerrank platform.
Recruiter Phone Screen (15-30 min)
- The recruiter might also ask you to schedule a call with them. This helps companies reject any applicants with obvious behavioral red flags. 99% of applicants pass this stage, so don’t stress about it. Be friendly and polite, read the company website, and you’ll pass.
- During this call the recruiter will ask you about three things. First, your work experience. Second, why you’re interesting in working at the company. Third, your timeline – “who else are you interviewing with?” and “do you have any expiring offers?”.
- Don’t feel obligated to share what other companies you’re interviewing for.
Technical Phone Interview (60 min)
- The next step after the code screen or phone screen is the technical phone interview. If the previous stages went well, the recruiter will schedule a call with you and an engineer.
- This will usually be a Coderpad-style interview. If it’s on Coderpad, you’ll work in a browser to write code with the engineer in real-time. There’s a small chance that they’ll ask code on your own computer and screen share the code instead.
- Try the Coderpad demo to see what it’s like
- The first 5 minutes will be allotted for intros. They’ll ask you to introduce yourself and explain why you’re interested in the company. Be enthusiastic, but brief. You want to save as much time for the actual coding part of the interview as possible.
- After the intro, the engineer will give you a coding question. For example, “Given a graph, write a method to determine whether it has a cycle”.
- Your goal is to solve the coding question, while explaining your thought process out loud
- Most interviewers will let you search for things like syntax on Google. But you should check with the interviewer first
- If the interviewer is trying to give you a hint, be gracious and accept their help
- During the last 5 minutes, the interviewer will ask if you have any questions about the company. Interviewers might omit this part of the interview if you’re still working on the problem. This is neither a good nor bad sign.
- Check out this thread for example questions.
- Pick two questions that you like asking, and use those for your interviews.
- Some good ways to score points with your interviewer:
- Whenever you get stuck, (1) voice what you’re stuck on and (2) voice that you’re thinking. That way, your interviewer can help you if you aren’t able to figure it out.
- A good rule of thumb: if you’re not writing code, you should be talking. If you’re stuck and need to think, give yourself a minute to think. But let the interviewer know that you’ll be silent.
- If you can’t figure it out, ask the interviewer if you can work on a different part of the problem and come back. Or ask for a hint.
- Write tests at the bottom of the file to make sure your functions are working as intended. These don’t need to be fancy. You can use basic assert statements.
Onsite Interview (3 hrs)
- Many tech companies will fly you out for an interview at their HQ. Larger companies will take care of plane ticket costs, food reimbursements, housing, etc.
- NOTE: Since the pandemic, more and more companies have started conducting “remote onsite” interviews through Zoom.
- During an onsite, you’ll do 3-4 technical interviews with an engineer. Each technical interview will involve solving algorithm questions on a whiteboard or computer. This is the same as the technical phone interview, except a bit harder.
- There will sometimes also be a behavioral interview with a manager. This is the same as the recruiter phone screen, except a bit more in-depth. Look up the STAR system if you want help with behavioral interviews.
Companies follow a seasonal recruiting cycle that follows the academic calendar:
- Applications open July - September (peak in August)
- Applications close October to March (peak in December)
Smaller companies can be flexible. Some recruit year-round.
Internships are 12 weeks in length and take place in the summer. There are a few exceptions – some are 10 or 16 weeks in length, and some take place in the spring or winter.
3. Preparing for Interviews
The vast majority of companies ask algorithm questions during their interviews. The best way to increase your chances at landing an internship is to practice algorithms.
Try using Python for your technical interviews. Python will let you write out solutions faster than in other languages. It’s easy to learn. But if you’re already accustomed to Java or C++ and really don’t want to learn Python, then feel free to use that instead.
There are two resources that are essential for getting better at algorithm interviews:
Cracking the Coding Interview (CTCI): This is a book on the most common algorithms and data structures used in real-world interviews. There’s a set of ~10 real questions at the back of each chapter. Spend a day reading the non-technical sections at the beginning of the book. Then, spend a few weeks reading and solving all of the questions from the first four technical chapters: Arrays/Strings, Linked Lists, Stacks/Queues, and Trees/Graphs.
- After you finish the first four chapters, you’re ready to start interviewing. Knowing the first four chapters alone is enough to pass interviews at most companies. This includes companies like Google, Facebook, and Microsoft. This doesn’t mean that you’ll pass every interview. More than likely, you’ll fail your first few. But you need to get real-world interviewing experience. See “How to Practice Technical Problems” and “Apply Before You’re Ready” below for more details.
Leetcode: Leetcode is an online coding platform where you can practice common algorithms problems. After you finish the first 4 chapters of CTCI, you should make a Leetcode account. While you interview, you can continue to practice problems on Leetcode. I recommend sorting their problems by frequency and practicing the most-seen first. There’s also company-specific problem lists on the right of the site. When you get an interview, check if there’s a list for that company on Leetcode. If so, practice as many of that company’s problems as you can, ahead of the interview.
Note: To get access to certain problems, you may need to pay for a subscription.
- “Easy” problems sometimes show up in code screens and phone screens.
- Do these to warm up and practice fundamentals, like implementing linked lists.
- “Medium” problems show up all the time in code screens, phone screens, and on-sites.
- Spend 90% of your time working on Medium problems. Click on the “Discuss” tab to see how others solved the same problem.
- “Hard” problems only show up in phone screens and on-sites at “hard-to-get-into” companies.
- I wouldn’t spend any time on these problems while you practice for your first internship. The time investment isn’t worth it. Unless you have a company onsite and that “hard” problem is a top-asked problem at that company. See Leetcode company-specific problem lists.
Preparing for Interviews++
If you’re interested in more difficult interview prep material, check out:
Elements of Programming Interviews (EPI): This is a harder version of CTCI. It has very well-written solutions and explanations. It’s available in Python, Java, and C++. Use this book book if you finish CTCI and want something more structured than Leetcode.
Codeforces: This is a competitive programming platform. You compete with others to solve algorithmic questions in the fastest time possible. But contest problems are usually way harder than interview problems. So only practice on these kinds of sites if you’re interested in competitive programming for the fun of it.
- If you like Codeforces, check out your school’s local ICPC team. ICPC is an annual, inter-collegiate algorithms problem contest.
- Many companies have stopped asking DP questions. Companies like Pinterest (article), have banned it, since DP rarely comes up in real-life scenarios.
- Only practice DP problems if you’re interviewing for a company that still asks it. Like Google or Facebook
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.
You may get frustrated at how long you’re taking to solve these problems. I definitely was. But keep at it and you’ll amaze yourself at how fast you improve. You should see notable improvement after two weeks of daily practice.
Mock Virtual Interviews
You should also try using mock phone interviews to help you practice. If you do well enough in a mock interview, companies may even put you in their real interviewing pipeline. But the latter usually only happens with full-time engineers. If you’re looking for an internship, don’t worry about it. Focus on using mock interviews to practice.
Here are a few:
- This is a startup that offers 1 practice interview with a real engineer. They match you to real companies if you fit their profile
- This is another startup that offers 1 practice interview.
- Again, another startup that offers 1 practice interview.
- Unlimited free peer to peer interviews
- Great since you can do more than 1 mock interview. But the quality isn’t as good, since the interviews aren’t conducted by professionals
Interviews are not perfect assessments of skill. You advancing to the next stage depends on a confluence of random, noisy factors. Did your interviewer get enough sleep? Did they eat a big lunch? Did they get the raise they wanted?
You’ll always fail some interviews for reasons outside of your control. The goal of preparation is to increase your success rate, not bring it to 100%. You only need one company to say yes.
- (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.
4. Apply Before You Think You’re Ready
Once you’ve finished the first 4 chapters of CTCI, you’re ready to apply to most tech companies. You’ll have a better chance of getting a job by interviewing now, rather than waiting for when you’re “ready”.
Note: If you’re applying to a “hard-to-get-into” company or a company looking for a specific skill, study a bit more. For example, if you’re applying to DeepMind or OpenAI, spend some time to refresh your maths and ML skills. If you’re applying to Jane Street or DE Shaw, spend some on “Preparing for Interviews++”.
How to Get Noticed by a Recruiter
It can be difficult to get a recruiter’s attention. So along with applying online, try these four things to help you grab their attention:
- Get a referral from an employee or former intern
- Talk to recruiters at career fairs and hand in your resumes
- Make a good impression! Smile and be friendly.
- Big companies like Google/Facebook often have massive lines of students. Talk to employees from lesser-known companies. You’ll have more time to talk to more companies, and those companies will be more likely to advance you.
- Go to company events and check-in/hand in your resumes
- After a career fair, companies set up events where interested students can come
- Email recruiters by asking them for their card in-person
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 one by CareerCup is good.
Applying to Companies
You want to apply to as many companies as you can. One tip: set aside a 1-hour block on free days to batch apply to companies.
Make a Google spreadsheet that keeps track of all of your applications/interviews. This way, you can monitor your progress and ensure that you don’t miss any deadlines.
- 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 to “Recruiter Screen”, “Phone Interview”, or “Onsite”. Then 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 company, ask them for a referral. This is the best way to ensure a recruiter will reach out to you.
Scheduling Your Interviews
- Try not to schedule more than two phone interviews in a single day
- Interviews are tiring, and your performance will degrade over time
- Schedule as many of your interviews in the same few weeks as possible
- Your first few interviews will warm you up for the next ones
- Back to back interviews helps you get over failures faster. Remember that interviewing is a numbers game
- Don’t do interviews from your favorite companies first. Schedule those interviews after you’ve finished your first set of technical phone interviews. That way, you’ll have already warmed up and you won’t be as nervous
Lists of Companies
Some students have made lists of popular companies to apply to:
- Fix your resume
- You’ll need a webcam for your interviews. If you don’t have one built-in to your computer, try to get an external one. Feel free to send me an email if you can’t obtain one
- Test your video/mic setup ahead of time
- 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
- Use an internship sheet like Contrary’s Startup Search
- Schedule your interviews back to back, but leave your favorite companies for last
- Take breaks. Do what you can to destress and remain grounded. All of this will pass
- Some universities have student-taught CS interview classes like CMSC389O. This can be a good way to stay accountable while practicing with your friends.
- Good luck!