(estimated reading time: 10-15 min)

A recap of my six month job hunt as a new grad software engineer, including resources I used to prepare and advice for fellow early-career candidates.

I interviewed with the following companies and received offers from those in bold:

  • Netflix, Palantir, Bloomberg, Duolingo, DoorDash
  • Hudson River Trading, Radix Trading, Aquatic Capital, Optiver, IMC Trading, Akuna Capital, Old Mission Capital
  • Whatnot, Crusoe, Forward, Applied Intuition, ThoughtSpot, SeatGeek,
  • Verse Medical, IXL Learning

My advice integrates my own and others’ experiences, and I won’t be providing any company-specific information. Most statements will be subjective and disagreement is inevitable. Please use your best judgement to decide whether my experience is applicable to you.

Special thanks to TheNumbat for editing.


Table of Contents

  1. Overview
  2. Preparation
    1. Comprehensive Resources
    2. Resume and Applications
    3. Technical Interviews
    4. Behavioral Interviews
  3. Choosing Between Offers
  4. Reflections


Overview

The 2022 application season has been unusually rough as a result of 1) many companies reducing/pausing external new grad hiring (e.g. Google, Microsoft), and 2) a more competitive applicant pool due to fewer interns receiving return offers (e.g. at Meta, Twitter, Snap). I was originally aiming to end up in big tech, but that didn’t go very well.

  • My background: I’m a senior (class of 2023) at Carnegie Mellon University and an international student. I did two internships as a backend SWE at a tech startup (now public) that isn’t well known outside of its niche. I have no research experience and some personal projects in game programming and data science. I’m also a teaching assistant for a core algorithms class at CMU.

  • My job hunt history: Before 2022, I had done fewer than five rounds of technical interviews and had completed around 50 leetcode problems.

  • My timeline: I started preparing for the job hunt during summer 2022, as my current company couldn’t support working from my desired location.
    • June: started grinding leetcode (average 2hrs/day)
    • July: started applying to most jobs I would consider taking
    • early August: stopped grinding leetcode, started preparing for behavioral and system design interviews
    • mid August: started interviewing
    • late September: received desirable offers, stopped applying to less preferable options
  • By the numbers:
    • June-July: completed ~250 leetcode problems (70% medium, 20% easy, 10% hard)
    • July-September: applied to ~100 companies
    • August-October: did ~60 technical and ~15 behavioral interviews with 20 companies
    • November: signed an offer

Most of processes I went through consist of an online assessment, 1-2 rounds of phone screen, followed by 3-5 rounds of virtual onsite, and spanned 40-70 days from start to end. Most companies I received an offer from gave me a two or three week window to make a decision. Among all technical interviews I had, there were around 50% LC-style coding rounds, 20% practical coding rounds, and 30% system design or technical conversations.

Overall, out of 94 applications, I received interviews from 20 (21%), got resume rejected by 22 (24%), and got no reply or withdrew from the remaining 52 (55%). Among the 20 companies I interviewed with, I got 13 (65%) offers.


Preparation

Comprehensive Resources


Resume and Applications

The above links (and the rest of the internet) have plenty to say here, but I think the most important points are:

  • Resume Format
    • Keep it concise
    • Order for new grads: education, work experience, projects/research, skills
    • Make sure the document is parsable by automatic screeners
    • Get more experienced friends to proofread it
  • Resume Content
    • Use action verbs
    • Describe your impact in a way that outsiders can understand
  • Applications
    • Prioritize finding referrals
    • Use an email you have permanent access to (not your school email)
    • !!!APPLY EARLY!!!


Technical Interviews

Basic Strategies

  • Technical Conversations
    • Deep dive on a project you worked on: discuss architecture, design decisions, challenges, and impact
    • For language-specific roles, be able to answer language trivia
    • For systems-oriented roles, brush up on OS and networking basics
  • Coding Interviews
    • Do mock interviews, but only with experienced (mock) interviewers
    • Clarify expectations beforehand
      • “Will I need to compile and run the code, or is pseudocode sufficient?”
    • Be verbose, explain your thought process, and ask for feedback
      • “Should I go ahead with this approach?”
    • Work incrementally
      • If there are steps or optimizations that aren’t essential parts of your algorithm, ask your interviewer if they are fine with you writing a stub and coming back to it later (time permitting). Similarly, don’t focus on edge cases until you’ve sketched the core algorithm.
    • Use descriptive variable names
    • Google Interview Questions Deconstructed: this article describes what many interviewers are looking for
  • System Design

Leetcode Questions

  • Popular Resources:
    • Grokking the Coding Interview: paid text-based course, ~50 hrs, good for those who prefer systematically and incrementally learning new patterns
    • Leetcode Study Plans: has difficulty levels (basic and intermediate are free), good for those who want to jump straight to practice and study consistently
    • Blind 75 (video solutions): some popular questions within each topic. Being able to comfortably solve most of these questions is a good indicator of whether you are ready to start interviewing
  • !!!Practice BY TOPIC!!!
    • As you practice, take notes whenever you encounter an unfamiliar concept
  • My recommended list of ~150 questions by topic. One third are highlighted, meaning I strongly suggest reviewing them
    • my list isn’t very beginner friendly (70% medium and 10% hard), but useful if you have strong DS&A fundamentals and need more practice.
    • After attempting a question, read the discussion section and try to understand the optimal solution(s).
    • If you didn’t come up with an optimal solution, write down a summary of a better approach and mark the question as worth reviewing or redoing.
    • I spent an average of 2 hours per day covering 3-5 problems. Following the above procedure for two months made me feel pretty prepared.

Data Structures and Algorithms

  • Popular Resources:
    • Cracking the Coding Interview: a comprehensive textbook. Has some overlap with the Grokking course above, but focuses more on data structures and is less leetcode-driven, so it’s better for those who want to study DS&A in general
  • Make sure you are comfortable with complexity analysis
  • Data structures:
preliminary
(must know)
basic
(must know)
intermediate
(should know)
advanced
(rarely necessary)
array linked list priority queue binary indexed tree
string queue disjoint set (union find) segment tree
set stack min/max heap Merkle tree
hash table binary search tree trie  
  graph monotonic queue/stack  
  • Algorithms:
preliminary
(must know)
basic
(must know)
intermediate
(should know)
advanced
(rarely necessary)
basic programming constructs recursion dynamic programming Knuth–Morris–Pratt (KMP) pattern matching
common operations on data structures sorting (merge, quick, bubble, selection) shortest paths (Dijkstra’s, Bellman-Ford) minimum spanning tree (Prim’s, Kruskal’s)
  array search (binary, linear) topological sorting (DFS, Kahn’s) maximum network flow (Ford–Fulkerson)
  tree traversal    
  BFS and DFS    

System Design

  • Popular Resources:
  • Most new-grad “system design” interviews ask about product design and/or objected oriented design, where the objective is fairly straightforward and limited in scope. The interviewers rarely dig deep into scalability or database concepts, etc. However, you should still have a basic understanding of:
    • Load balancing
    • Caching
    • Multi-threading and concurrency issues
    • Networking
    • Vertical and horizontal scaling
    • Database replication and partitioning
    • Asynchrony and queues


Behavioral Interviews

Basic Strategies

  • Write a strong self introduction that’s ~1 minute long and doesn’t just repeat your resume
    • Give a brief summary and ask the interviewer if they’d like to know more
    • Keep it especially short in coding interviews—don’t waste coding time
  • Use the STAR method to prepare a few technical stories. Think about how you can phrase each one to reflect a certain aspect of your skills/personality
    • e.g. team player? leadership? non-technical communication? customer-facing?
  • Everything you say should contribute to building a persona. Use the introduction to lay a foundation of your passions/strengths and enhance it with your answers to further questions
    • Ideally, this persona is the intersection of what the company values and who you really are
  • !!!Confidence ≠ Arrogance!!!
  • Have a basic understanding of the company’s business and a specific answer to “why us
  • Prepare a list of questions you want to ask during the interview

Questions to Prepare For

  • Academic/Career Journey:
    • Past: why you chose this field
    • Present: what you are passionate about, what you are currently working on
    • Future: what you are looking to learn, how you see yourself in a few years
  • Personality:
    • Strengths and weaknesses
    • How you perceive yourself and how others perceive you
  • Past Technical Experience:
    • Positive: biggest achievement or success, what you are proud of, what you like about your past jobs
    • Negative: biggest failure, what you would have done differently, what you dislike about your past jobs
    • Neutral: biggest challenge, feedback you have received, project deep dive
  • Company Specific:
    • Why you want to work for them, why they would want to hire you
    • Salary expectation (don’t give your number first)
    • How you’d decide between offers
  • Scenarios:
    • Used to evaluate whether you exhibit the qualities they value
    • If available, read the company’s engineering culture/value guide
    • If not, try to demonstrate common positive qualities, such as:
      • Passion, curiosity, and inquisivity
      • Communication and collaboration skill
      • Motivation and growth mindset
      • Critical thinking
      • Productivity
      • Humility
      • Quick to learn and coachable

Go-To Questions for Interviewers

  • What they like about the company and what they wish could be improved
  • Where the company is heading in the next few years
  • Performance evaluation and career trajectory
  • Internal mobility
  • Example projects for new grads
  • Most interesting/important technical challenges their team has faced
  • Planning process and development cycle
  • Important skills and qualities needed to succeed at their company
    • The answer to this question may seem obvious, but it’s not. Most skills reside on a spectrum, and some companies prioritize one side over the other.
    • If you know the answer, you can prioritize discussing those specific traits in your interview.


Choosing Between Offers

Always negotiate. This year’s competitive market is enabling many companies to refuse negotiation with new grads—but negotiate anyway.

Different people have widely varying values and risk tolerances, so in the end it’s entirely up to you to make a final decision. The relevant sections in Prepping 101 and the Tech Interview Handbook have some good questions to ask yourself before making a decision. The one point I want to highlight is that TC is not everything—especially not first-year TC. Even just from a financial perspective, compensation growth and exit opportunities will make a larger difference in the long run.


Reflections

Take Care of Your Mental Health

Job hunting took a heavy toll on my mental health. Luckily, I scheduled a relatively light semester and dropped any unnecessary work. Don’t assume you can do recruiting on top of ten other things at the same time—it is draining and stressful. My advice is to start preparing early, because cramming only increases pressure, and deprioritize other commitments (when possible).

Resilience to Failure Goes a Long Way

I failed one of my first final-rounds in a stupid way: I was given a problem that I have taught to students as a TA, but I forgot how to solve it. I broke down crying after the interview and couldn’t stop thinking about it for a few days. My longstanding fear of failure obviously didn’t help.

I did eventually get over it, and dealt with my next stupid failure (which came not long after) much better. It’s good that I gained some resilience to failure from this (painful) process.

Application Screening is Random

Here are a few anecdotes demonstrating how random resume and application screening is for new grads, in case you are still not convinced:

  • I applied to a company that supposedly gives out assessments automatically, but got rejected the day after. I reapplied a month later, with the same email and resume, and received the assessment. Someone else went through the same thing with this company.

  • My friend applied to a company and got almost instantly rejected. He asked a recruiter about it during an on-campus event, and was told that it happened because someone else with the same name had already been rejected.

There are many other examples of resume-rejected people reapplying with the same resume and getting an assessment/phone screen. I won’t list them all there, but it’s not as rare as you might expect.

Best Part of Interviewing: Free Trips (when optional)

I thought I would prefer actual on-site interviews, because whiteboarding algorithms in person is closer to my experience as a teaching assistant. However, I started appreciating virtual “on-sites” more when I got overwhelmed with scheduling. There were a couple weeks in which I had to do 10 rounds of interviews, and I could not have done all of them in person.

A few companies offer free trips to their office to people who got offers, and some do optional in-person on-site interviews. So I did get to travel around (voluntarily) a little bit, which was awesome.

Tight Deadlines Suck

As a new grad—especially in 2022—I had little power to negotiate offer deadlines. From what I’ve heard, many companies gave very tight deadlines (<1 week), and I even ran into one that refused to discuss offer details until I was ready to make a decision within the next 24 hours, because, according to them, “money is just a formality”.

This year’s volume of applicants caused many companies’ hiring processes to drag on for multiple months, which made tight deadlines even harder to deal with. I, as well as many others, had to decide whether to take a potentially lesser offer now, or risk ending up with nothing.


Interview Process Ratings

I will conclude by rating all of the interview processes I went through where I completed the final round. Each company is rated out of five in the following dimensions:

  • Timeliness: Did the process have a reasonable time frame? How responsive were my contacts? Were there any no shows or last minute changes?
  • Fairness: Am I being evaluated fairly and comprehensively? Do I think the questions are testing the skills the company claims to value? Are the requirements and expectations reasonable?
  • Communication: Did my recruiter and interviewers communicate expectations clearly and provide valuable feedback?
  • Flexibility: How flexible was the process in terms of scheduling? Was I pressured to make a quick decision?
Company Timeliness Fairness Communication Flexibility Average
Verse Medical 5 5 5 5 5
Aquatic Capital 4 5 5 3.5 4.4
Hudson River Trading 4 4.5 4.5 4.5 4.4
Duolingo 4 4.5 4.5 4 4.3
Radix Trading 4 4 4 4.5 4.1
Whatnot 5 3.5 4 4 4.1
IMC Trading 3 4.5 5 4 4.1
Netflix 4 4 4.5 3.5 4
Applied Intuition 4 3.5 4 4.5 4
Optiver 3 4.5 4.5 3.5 3.9
SeatGeek 4.5 4 2.5 4.5 3.9
Crusoe 3.5 4 4 4 3.9
Palantir 3 4.5 4 3.5 3.8
Bloomberg 3.5 3 4 4.5 3.8
ThoughtSpot 4 3.5 3.5 4 3.8
Akuna 4 3.5 2.5 4.5 3.6
IXL Learning 4 2.5 3.5 4.5 3.6
DoorDash 3 4 4 3 3.5
Forward 4.5 4 3.5 0 3