This guide serves as a starting point for those seeking their first software internship.
- Choosing Companies to Apply To
- Playing the Status Ladder
- Navigating the Interview Process
- Preparing for Interviews
- Applying Before You Feel Ready
1. Choosing Companies to Apply To
Each company has its own set of unique attributes, such as compensation, hiring policies, and company culture. By understanding these attributes, you can focus your search on companies that align with your interests and increase your chances of receiving an offer. This knowledge will also help you better prepare for each company’s specific interview process.
To help you get started, here’s a list of company categories you should be aware of:
- “Big N” Companies
- “Unicorn” Startups
- Growth Stage Startups
- Early Stage Startups
- Fortune 500 Companies
- Established Tech Companies
- Government Contractors
- Trading Firms
“Big N” Companies
- Examples: Amazon, Microsoft, Google, Facebook, Apple, etc.
- Characteristics: Large market cap, structured mentorship, extensive internship programs, initiatives for college students and underrepresented minorities, competitive compensation packages for new graduates.
- Examples: Airbnb, Quora, Dropbox, Lyft, Uber, etc.
- Characteristics: Late-stage startups valued at $1bn+, engineering and culture similar to “Big N” tech companies, younger employee demographic, attractive compensation packages due to stock grants that become liquid upon IPO/acquisition (not applicable to interns).
Growth Stage Startups
- Examples: Startups with 50-1000 employees that have achieved product-market fit.
- Characteristics: Rapid scaling, focus on converting interns to full-time employees, challenging for freshmen/sophomores to secure internships, ideal environment for aspiring founders to learn from successful startups.
Early Stage Startups
- Examples: Seed-stage, pre-product market fit startups with 1-50 employees.
- Characteristics: More responsibility than typical internships, high business risk, potential for learning bad habits, lack of intern structure, difficult to find, may require proactive outreach through email or in-person events.
Fortune 500 Companies
- Examples: Large, non-tech-focused companies with decades of history.
- Characteristics: Engineering is not the primary focus, involvement in modernizing legacy infrastructure, potential for unique perks (e.g., unlimited free flights during a Southwest internship).
Established Tech Companies
- Examples: IBM, Adobe, SAP, etc.
- Characteristics: Decades-old tech companies, comparable to “Big N” in terms of structure and compensation, employee population tends to be older, not perceived as “hot” by new talent.
- Examples: Northrop Grumman, Raytheon, etc.
- Characteristics: Large corporations providing solutions in defense, healthcare, and other sectors for the government, software engineers often work in cybersecurity, emphasis on behavioral interviews, US citizenship or national status required for some contracts, government clearances granted (even to interns).
- Examples: Jane Street, Jump, Citadel, etc.
- Characteristics: Small firms using quantitative strategies to extract value from financial markets, offering technical roles in engineering/trading/quant-research, interviews with brainteasers and systems questions, high work-life balance variance with some firms operating on 9-5pm trading hours, high compensation at career onset (e.g $400K), based in financial hubs like Chicago and New York City. Skim http://isomorphisms.sdf.org/maxdama.pdf for a brief intro to trading firms.
Tip: If you want to dig deeper into a specific industry or company, try /r/cscareerquestions or Glassdoor.
2. Playing The Status Ladder
“If every job asks for prior work experience, how do I get work experience?”
Landing your dream internship in one attempt is unlikely. In most cases, you’ll need to build up your resume through a series of 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, prioritize getting any internship. It doesn’t matter where you work, as long as it can go on your resume. This will open up doors for you. After that, focus on securing an internship at a “name brand” company – one that recruiters will recognize (“Big N”, “Unicorn”, “Large Tech”, etc.). Once you have a “name brand” internship, you’ll likely get interviews at most tech companies you apply to.
If you know you want to pursue a career path that doesn’t require “resume credentials”, don’t play the status game. For instance, if you’re certain you want to work at a small startup after graduating, you don’t need an internship at Google. Pad your resume if you want optionality, not progress toward a specific trajectory.
Example (real-world) internship trajectories:
- 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”
If you’re applying for your first internship, apply to companies that hire students without experience. Your best chances lie with “Big N” companies, government contractors, and small startups. “Big N” and government contractors hire large numbers of interns each year, while small startups tend to be less known, resulting in less applicant competition. Focus on these three types of companies to maximize your chances of receiving an offer.
If your internship search is unsuccessful, don’t worry. There are many other ways to spend your summer and build your resume. You could email a professor to ask about research opportunities at your university, write software for a local student-driven startup, or contribute to an open source project. Aim for a position where you can write code.
3. The Interview Process
After submitting a job application, the response time can range from 1 day to 2 months. Recruiters will notify you about the next steps via email. The interview process typically involves the following stages:
- Upon submitting a job application, it is stored in a database. A recruiter reviews the database daily and selects applicants for the next round.
- If selected, you will receive an email outlining the next steps, usually a Code Screen or a Recruiter Phone Screen.
- The process can take up to several weeks. Companies may not send rejection emails for months as they don’t want to limit their interview pool. If not enough offers are accepted, they may need to advance more candidates.
Code Screen (60 min)
- Following the resume screening, the recruiter will send a short coding challenge.
- You will have a few days to open the coding challenge and must complete it within an hour after opening it.
- Familiarize yourself with Hackerrank, as the majority of coding challenges will use this platform.
Recruiter Phone Screen (15-30 min)
- The recruiter may request a phone call to identify any potential behavioral red flags. Most applicants pass this stage, so focus on being friendly, polite, and knowledgeable about the company.
- During the call, the recruiter will ask about your work experience, interest in the company, and your interview timeline, including other interviews and expiring offers.
- You are not obligated to disclose the names of other companies you are interviewing with.
Technical Phone Interview (60 min)
- If you pass the previous stages, the recruiter will schedule a call with an engineer for a technical phone interview.
- This interview typically uses a platform like Coderpad, where you write code in a browser with the engineer in real-time. Occasionally, you may be asked to share your screen and code on your own computer.
- Try the Coderpad demo for a preview.
- The interview starts with a 5-minute introduction, followed by a coding question. While solving the problem, explain your thought process out loud.
- Most interviewers allow syntax-related Google searches, but always ask first.
- Accept any hints offered by the interviewer graciously.
- The final 5 minutes are reserved for your questions about the company. If you’re still working on the problem, this portion may be skipped, which is not necessarily a positive or negative sign.
- Refer to this thread for example questions and choose two to use during your interviews.
- Engage with the interviewer by voicing your thoughts, asking for help when needed, and writing tests to ensure your functions work as intended.
Onsite Interview (3 hrs)
- Many companies will invite you for an onsite interview, with larger companies covering travel, accommodation, and food expenses.
- Note: Due to the pandemic, “remote onsite” interviews via Zoom have become more common.
- Onsite interviews consist of 3-4 technical interviews with engineers, similar to the technical phone interview but slightly more challenging.
- A more in-depth behavioral interview with a manager may also take place. For assistance with behavioral interviews, research the STAR system.
4. Preparing for Interviews
Most companies include algorithm questions in their interviews. To increase your chances of landing an internship, it is crucial to practice algorithms.
Consider using Python for your technical interviews, as it allows you to write solutions quickly and is easy to learn. However, if you are already comfortable with Java or C++, feel free to use those languages.
Two essential resources for improving your algorithm interview skills are:
Cracking the Coding Interview (CTCI): This book covers the most common algorithms and data structures used in real-world interviews. It features approximately 10 real questions at the end of each chapter. Begin by reading the non-technical sections, then dedicate a few weeks to reading and solving all questions from the first four technical chapters: Arrays/Strings, Linked Lists, Stacks/Queues, and Trees/Graphs.
After completing the first four chapters, you are ready to start interviewing. Familiarity with these chapters alone is sufficient for passing interviews at most companies, including Google, Facebook, and Microsoft. You might not pass every interview, but gaining real-world interviewing experience is essential. See “How to Practice Technical Problems” and “Apply Before You’re Ready” below for more information.
Leetcode: Leetcode is an online platform for practicing common algorithm problems. After completing the first four chapters of CTCI, create a Leetcode account and continue practicing problems while interviewing. Sort problems by frequency and focus on the most common ones. Leetcode also offers company-specific problem lists, which are helpful for interview preparation.
Note: A subscription may be required for access to certain problems.
“Easy” problems often appear in code screens and phone screens. Use these for warm-ups and practicing fundamentals, like implementing linked lists.
“Medium” problems are common in code screens, phone screens, and on-sites. Spend 90% of your time on Medium problems, and review the “Discuss” tab to see how others solved the same problem.
“Hard” problems typically only appear in phone screens and on-sites at more competitive companies. Avoid these problems during practice for your first internship unless a company on-site specifically asks for them. See Leetcode’s company-specific problem lists.
For more challenging interview prep material, explore:
- Elements of Programming Interviews (EPI): A more advanced version of CTCI, EPI offers comprehensive solutions and explanations in Python, Java, and C++. Use this book if you complete CTCI and want a more structured resource than Leetcode.
- Codeforces: This competitive programming platform challenges users to solve algorithmic questions as quickly as possible. Contest problems are generally more difficult than interview problems, so use this platform if you enjoy competitive programming for its own sake.
If you enjoy Codeforces, consider joining your school’s local ICPC team, an annual intercollegiate algorithms problem contest.
Some companies, such as Pinterest (article), have stopped asking dynamic programming (DP) questions, as they rarely appear in real-life scenarios. Practice DP problems only if you’re interviewing for a company that still asks them, like Google or Facebook.
How to Practice Technical Problems
When working through CTCI or Leetcode problems, follow these steps to maximize your learning:
- Write solutions on a blank sheet of paper first.
- If you can’t think of a solution within 15 minutes, look it up and try again.
- Talk through your thought process as you work (this takes practice)
- After you write the solution on paper, write the solution on your computer to verify that the program works. Try to get it right on the first run.
You may become frustrated with the time it takes to solve problems (I was), but persistence is key. With daily practice, you should see significant improvement within two weeks.
Practice using mock phone interviews to enhance your skills. While excelling in mock interviews can lead to real interviews, this is more common for full-time positions. As an intern, focus on using mock interviews for practice. Here are a few resources:
- Interviewing.io: This is a startup that offers 1 practice interview with a real engineer. They match you to real companies if you fit their profile
- Triplebyte: This is another startup that offers 1 practice interview.
- Alist: Again, another startup that offers 1 practice interview.
- Pramp: 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 imperfect measures of skill, and many factors can influence the outcome. You will inevitably fail some interviews, but the goal is to increase your success rate. 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.
5. Apply Before You Think You’re Ready
Finish the first 4 chapters of CTCI and apply to most tech companies. Interviewing now is better than waiting until you feel “ready.” However, for more challenging companies or positions that require specific skillsets, study further.
Increase your visibility to recruiters by:
- Obtaining a referral from an employee or former intern.
- Attending career fairs, making a good impression, and handing in resumes.
- Participating in company events and handing in resumes.
- Asking for recruiters’ contact information in person and emailing them.
Ensure your resume is polished:
- Save it as a PDF, titled “Your Name - Resume - Year”
- Keep it to one page
- Organize top-to-bottom by: Name, School, Work Experience, Projects, Languages/Skills, Awards
- Use a template (unless you’re a designer). Try: Careercup’s template
Apply to as many companies as possible and track your applications/interviews using a Google spreadsheet.
- 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.
Avoid scheduling more than two phone interviews per day. Cluster your interviews within the same few weeks, to reduce nerves and increase leverage at the offer-negotiation stage. Prioritize less-preferred companies first to warm up for your top choices.
Students have compiled lists of popular companies to apply to, such as:
Companies follow a seasonal recruiting cycle in line with the academic calendar:
- Applications open July - September (peak in August)
- Applications close October to March (peak in December)
Smaller companies may recruit year-round. Internships typically last 12 weeks take place in the summer, but some are 10 or 16 weeks in length, and some take place in the spring or winter.
- Perfect your resume, ensuring it’s concise and well-organized.
- Make yourself visible to recruiters through referrals, career fairs, company events, and direct communication.
- Apply to numerous companies, tracking your applications/interviews using a spreadsheet.
- Schedule interviews strategically, clustering them within a few weeks and prioritizing less-preferred companies first.
- Apply for positions before feeling completely ready, but study further for challenging companies or specific skill sets.
- Maintain a healthy mindset, focusing on increasing your success rate, not perfection.
- Persist in practicing problem-solving to improve over time.
- Utilize various resources for technical interview practice, including CTCI, Leetcode, and mock interviews.
- Participate in mock virtual interviews, using resources like Interviewing.io, Triplebyte, Alist, and Pramp.
- Ensure you have a webcam and test your video/mic setup before interviews.
- Consider enrolling in student-taught CS interview classes for added support and accountability.