21 Jun 2022
In 2022, I ran my first serious job search as an “in career” engineer.
In all, I applied to 41 companies,1 began conversations with 17 companies, and completed final round interviews (virtual onsites) with 11 companies (Gusto, Brex, Plaid, Sigma Computing, Pinterest, Dropbox, Figma, Noom, Airtable, Robust Intelligence, and Google).
Of my 11 onsites, three were for machine learning engineer (MLE) roles, and the remaining eight for mid-level software engineer (SWE) positions.
All together, my job search lasted over 6 months, and involved 163 conversations with recruiters, engineers, and hiring managers, of which 66 were interview calls.
Among these 66 calls, I completed 35 coding (15 phone screen, 20 onsite), 7 system design, 5 machine learning, 4 miscellaneous technical, and 15 behavioral interviews.
Here are some interesting and/or surprising things I learned through this process:
1. LeetCode-style coding problems are not the norm
Contrary to prevailing wisdom on the Internet, most companies, even well-known ones, do NOT ask LeetCode-style programming questions. Let that fact sink in…
In my experience, the current industry norm is “practical” programming problems loosely inspired by what the company actually does. As a general rule, companies seem to place the highest value on writing code that runs successfully on simple test cases, and secondarily, on good communication, clean code, and quick iteration.
If you know the basic features of one programming language well (conditionals, loops, functions, classes), and can apply two data structures - lists and hash tables - in that language, you should be set for most coding interviews. Add queues, heaps, and trees/graphs to that, and you are pretty much as prepared as you need to be.
The 80-20 rule really applies to coding interview prep. Rather than aiming to become a virtuoso, put in the effort to gain basic interviewing proficiency in your language of choice. Twenty percent of the work required to become a LeetCode “expert” puts you in a position to ace more than eighty percent of your coding interviews.
That said, LeetCode is a great way to build this proficiency, especially if you’ve decided to start interviewing in a new language. Pro tip: Get a LeetCode Premium subscription. At $35 a month, it’s a real bargain, given that just a couple weeks of practice can dramatically improve your interviewing performance.
LeetCode Premium gives you access to solutions and lets you solve problems in order of “frequency” (how often they are seen in real interviews). I’ve found reading solutions to be a really underrated hack to level up as a coder: it’s a great way to expand your repertoire of problem solving techniques and learn the advanced features of a language.2
To date, I’ve solved 20 LeetCode “easy” problems and 73 LeetCode “mediums”. Of these, I solved 34 mediums while in my last job search. I found this to be more than enough practice to approach my coding interviews.
2. If you can, use Python
Using a concise, dynamically interpreted language like Python conveys a tremendous speed advantage that can dramatically increase your interview pass rate.
As it turned out, I had always underestimated this speed advantage, and overestimated the switching costs of moving from another language (e.g., Java, C++) to Python.
In my most recent job search, I used Python exclusively, and to great effect.
3. System Design is (easily) learnable
System design preparation begins and ends with one book: the aptly-named “System Design Interview” by Alex Yu.
In fact, reading merely the 30-page first chapter of this book, titled “Scale from Zero to Millions of Users”, and internalizing Figure 1-23 on page 29, will give you all of the tools you need to approach this interview.
(For best results, consider reading maybe one or two more chapters of this book. Each of chapters 4-15 walks through the solution of a canonical system design problem. I recommend reading “Chapter 8: Design a URL Shortener.”)
I found system design interviews to be surprisingly fun and doable, despite never actually having designed a “real system” in industry before (hint: most engineers rarely design web-scale systems from scratch in their day-to-day jobs).
4. Be bold but respectful
There’s never been a better time in history to be a software engineer. The leverage software engineers have in today’s market is unparalleled, given the scarcity of engineering talent relative to available capital and opportunities to start companies. This is especially true just outside of the FAANG companies, which happen to be deluged with applicants, and can afford to be arbitrarily selective.
Use this leverage well. Lot of companies will want to talk to you, especially if you have some experience and industry pedigree. Be courteous to and engaged with each individual you interact with, and treat each interaction as an opportunity to learn more about the industry, connect with amazing people, and expand your professional network.
5. Be open minded
There are lots of companies outside of FAANG that pay extremely well, and will offer the opportunity for at least as much impact and career growth. Go into the job search with an open mind, be on the lookout for cool companies that you might have overlooked, and talk to friends and industry connections to learn more about what’s up and coming!
1. Number of interviews
My first recommendation is to apply to and interview with lots of companies.
This has three benefits. Firstly, interviewing is a form of practice itself, and you’ll notice your performance improves with time.
Secondly, interviewing with lots of companies reduces the stakes associated with any given one. If you are prone to nerves or interview anxiety, this is a great way to reduce the pressure on yourself.
Finally, speaking with many companies allows you to cultivate and convey an authentic professional persona, a risk you can take because you aren’t dependent on any one company panning out. Authenticity is refreshing and compelling, and in the right settings, can be a strong point in your favor.
2. Taking time off
As one can see from the opening statistics, interviewing takes a lot of time, especially if you cast a wide net!
I’m personally of the opinion that if you can take time off to interview, you should. This is both better for your interview performance and mental health, and (in my opinion) fairer to the company you work for than trying to embed interviews into a busy work schedule.
Depending on how much time off you can take, however, your mileage might vary.
3. Interview order
One additional tip: save your top choice companies (especially those known for difficult interviews) for later. You will notice that you become better at interviews as you give them, and you want to utilize this to your advantage.
This means being strategic about scheduling your phone screens and onsites, so that your top choice companies come later, while also not drawing out the whole process for too long.
Of the 41 companies to which I applied, 7 were through referrals, 2 through existing recruiter relationships, and 32 through direct applications to their job sites.
Of the 17 companies at which I got any kind of interview, 5 were through referrals, 2 through existing recruiter relationships, and 10 through direct applications.
From this relatively small sample, we can see that referrals had a 71% success rate in yielding interviews (5/7), recruiter relationships a 100% success rate (2/2), and direct applications a 31% success rate (10/32).
Some takeaways: referrals are clearly the way to go, as expected, but blind applications work surprisingly well (~1/3 of the time) in the current job market.
Much has already been written by others about negotiating offers and how to pick between companies, so I’ll keep this section brief.
If you find yourself drawn to the role/company that also happens to be paying the most (which IMO is more common than people would like to admit), I would run the following thought experiment: if this was your second highest offer (instead of your highest), would you still choose this company?
If the answer is no, your deciding factor is likely the money. This isn’t necessarily a bad thing, but it is good to have clarity on how you are actually making your decision, and whether you are in fact weighing the things that are important to you.
Applying to 41 companies seems like a lot, but I was actually somewhat deliberate about my applications. There are several well-known tech companies and industry sectors (e.g. finance) that I explicitly decided not to apply to.↩︎
Here’s a great article on how to use LeetCode to level up your interview game: https://yolken.net/blog/master-coding-interviews↩︎
- 2021 Books (01 Jan 2022)
- Regret Minimization (08 Sep 2021)
- Machine Learning (31 Aug 2021)
- Required Reading (16 Jul 2021)
- Revolutions (14 Oct 2017)
- On Computer Science (15 Sep 2017)
- Samvit's Guide to the World Wide Web (28 Aug 2017)
- How to Pick Your Next Gig: Evaluating Startups - Part II (14 Aug 2017)
- How to Pick Your Next Gig: Evaluating Startups - Part I (14 Aug 2017)
- A Brief Primer: Stochastic Gradient Descent (20 Jul 2017)
- Why Parallelism? An Example from Deep Reinforcement Learning (06 Jul 2017)