« Simulated Annealing

How I applied to 40+ tech companies and (mostly) survived

Quitting your job to search for a new job full-time

Searching for a new job is stressful. It falls into the category of activities that are deeply frustrating yet unavoidable. We spend a huge number of waking hours at a full-time job, so it pays off to be thorough when choosing a new role.

Perhaps you are one of the lucky ones that somehow enjoys the job search. I have to suffer through it—that perfectly awful combination of uncertainty, awkward communication, intense scrutiny, and judgement from industry peers.

Interviewing for an engineering position is not as bad as other roles, in that there is generally more objectivity in the process. But that does not mean engineering is a perfectly meritocratic system. In fact, there is plenty of proof that subjective evaluation goes on all the time. Every phase of the interview process has been called out as broken, impacted by cognitive biases, and an unrealistic assessment of the actual reality of the job. And the process is difficult in the other direction too. I’ve seen friends and coworkers join companies only to find themselves bored or unhappy, despite genuinely expecting otherwise.

The need for a rigorous approach

Given this state of affairs, I wanted to be very methodical in my job search. I had just returned from living in Japan for a year, so I wasn’t caught up on all the new opportunities and startups. My knowledge of market rate for my experience level was stale. I luckily had a diverse set of skills that I could leverage, meaning I had no idea exactly what type of role I wanted. And I was in the privileged position to have enough savings, and a partner who got a new job with irritating ease, to be able to take my time with the job search.

All signs indicated that I should apply to a broad set of companies. This would give me a good overview of the industry landscape and clarify my own preferences at the same time. Then, assuming things went well, I could winnow down my choices and eventually select the most interesting, best-suited role. All the information I collected should also theoretically help with any future job searches.

This was also my first job search as a senior engineer; the last time I looked for jobs was in my last year as a college student. Back then, I had only applied to a handful of companies, all while managing my class workload during my last semester of school. Was it really worth it to spend my 9-5 for multiple weeks applying to 40+ companies?

Now, with the benefit of hindsight, I propose that all software engineers try this method at least once, if they can. Sinking serious time into a huge pipeline of jobs gives you incredible context about the industry, insight into what jobs are personally compelling, and increases the chance of finding your optimal role. This is doubly useful for folks who are earlier in their career. And after experiencing firsthand the amount of time it takes, I don’t think it’s possible to do it without quitting your job first.

In the rest of this post, I attempt to document the methods I used and the learnings I gained.

My job search in numbers

Maximizing the number of applications

The whole process took me seven weeks end-to-end, starting on October 15th and ending December 2nd. I applied to 43 tech companies and received five full-time offers.

search_funnel The funnel for my job search.

My initial plan was to apply to all companies that even remotely satisfied my requirements. While reaching out 40+ companies may seem unmanageable, this part of the process was actually pretty easy. I used the following channels to find companies:

  • Directly applied to known companies
  • Contacted alumni recruiter from previous companies
  • Responded to recent recruiting emails and LinkedIn messages
  • Looked at aggregated job posting sites like key:values and AngelList
  • Consulted ad hoc lists like Breakout List 2019 and Hiring Without Whiteboards
  • Filtered the companies of my first- and second-degree connections on LinkedIn
  • Referred to companies by friends and former coworkers

Maximizing the top of the job search funnel was important because:

  • The hiring process has bad signal-to-noise ratio. Candidates are often rejected for reasons besides their competence or ability. Increasing the number of applications meant more probability of progressing to the later stages in the process.
  • Interviewing is a skill improved by real-world experience. In my opinion, the pressure of real technical interviews can’t be perfectly replicated by practice or mock interviews. More companies meant more chances to get that valuable interviewing experience.
  • Some crucial job information can only be discovered within the process, like the team culture dynamic and engineer-manager relationships. I was surprised by how dramatically my estimation of a company changed throughout the process. Increasing the number of companies I interviewed with led to better decision-making and smaller likelihood of prematurely dismissing good opportunities.
  • Compensation is a numbers game. Going through the process with more companies leads to more potential downstream offers, and competing offers are one of the best ways to have negotiating leverage.

In terms of job titles, I was open to applying to roles that fit my background and experience, though the resulting set skewed heavily towards iOS roles.

company_job_titles Breakdown of job roles. The “mobile” designation refers to positions where the mobile stack was still undefined. Growth engineering was a mix of iOS and full-stack roles.

I was interested in diversifying my experience and working on more enterprise SaaS products. Unfortunately, most companies actively hiring mobile engineers are consumer-facing, so only 18.6% of the companies I applied to were B2B businesses.

I did explicitly want to evaluate companies all across the size spectrum. I initially started out with a slight preference towards small to medium-sized companies with 100 engineers or less, but size of company ended up being evenly distributed at every stage of the interview process. Having final offers from small, medium, and huge companies gave me a really good sense of market rate compensation for my experience level.

company_size Companies by size: small (<50 engineers), medium (50-150), large (150-1000), and huge (1000+).

Company valuation wasn’t specifically a criteria I optimized for when applying for positions. It turns out to be pretty evenly allocated since valuation is heavily correlated with the company size in the tech industry. More successful companies have more money raised, which means they can scale up by hiring more people.

company_valuation Companies by valuation. Unicorns are companies valued at $1-10B and decacorns are valued at $10-50B.

Company size and valuation, of course, is ultimately tied to the types of compensation offers you will receive. You can read about my approach to compensation here. It’s challenging to compare offers from companies of drastically different sizes, since each can argue about upside and risk in a way that makes their offer seem better.

Rejections and drop-off rate

search_funnel 50% drop-off at each stage of the job search.

Pretty much immediately my application was getting rejected. Overall, 33% of companies decided not to move forward or simply did not respond to me in this first stage. I think this is actually a relatively low failure rate, since I was applying to more senior roles tailored to my background. In contrast, other folks experienced conversion rates of 17% or less than 5% for going from applications to interviews.

Rejections are inevitable, and it’s important to remember that it’s not necessarily a reflection of your competence or ability. There were many reasons why I failed to move past the application stage, including:

  • The recruiters were unresponsive
  • The role was just filled
  • The company wanted a specific skill set, despite the job posting saying otherwise
  • My application wasn’t a “good fit” and no other reason was given

In later stages I was still receiving rejections, although at a much lower rate at each progressive step. I straight-up bombed some of the technical screens. Luckily for me, I had been through the job search process before, so I knew how to learn from these failures while not getting demotivated. This is especially important if you have committed to a gigantic search pipeline and have other incoming interviews immediately following.

I wasn’t perfect. I did severely mope after my first few rejections, but eventually I built up the mental calluses to quickly rally and return to interviewing. It is critical to remember that this type of job search is an endurance marathon, rather than a sprint to the finish line. I recommend checking out this entire website dedicated to collecting rejection stories from software engineers, some failing interviews with very prestigious companies. They all still went on to lead very successful careers.

The devil in the (scheduling) details

Learn how to play calendar tetris

In my opinion, the hardest part of the job search is time management. Sending out a large amount of applications to companies is easy; it’s coordinating the subsequent recruiter calls, phone interviews, and scheduling time for take-home assessments that is really hard. And you have to do it all while still leaving time for eating and generally living your life, too.

I went to a dinner party during the middle of my job search. Someone asked me what I did for work and I jokingly responded, “I’m a full-time interview candidate.”

Now looking back on the data, it wasn’t a joke at all: I really did spend the equivalent time of a full-time job to do my interviewing. It seems like it should have been relatively easy to handle each stage of the job search. I appeared to be halving the number of companies at every step in the funnel. But keep in mind, I was managing multiple stages of the process all at once, while trying to prevent my brain from melting out of my head due to nonstop interviewing.

interview_burndown My progression of the interview stages at various companies over time.

The burndown chart shows that I spent most of the seven weeks juggling four different phases of interviewing. I clearly stayed way too long in the emailing and initial recruiter stages. Even as I started approaching the end of my overall job search, I was still agreeing to have opening conversations with companies for some reason. I did finally cut all these early-stage companies as soon as I scheduled my first onsite, but I could have been doing so much earlier.

Even as my personal sales pitch to recruiters improved and I refreshed all my skills for the technical interviews, I could only handle doing so many interviews in one day. The time needed for these calls is very misleading: usually they last around 30-60 minutes, but this doesn’t include the time needed beforehand for preparation and research. The worst day was either when I scheduled two coffee chats in the morning and three recruiter calls in the afternoon, or when I did two different back-to-back technical phone screens plus a recruiter call later that same day.

A lot of the difficulty comes from interview scheduling being very one-sided. Recruiters and interview coordinators will ask you to provide huge blocks of time to make it easier for them to schedule their hiring managers and engineers internally.

This is normally not a problem when you’re interviewing at just a handful of companies. But if you’re playing on hard mode like me, it can feel like an endless game of calendar tetris. I was handling dozens of simultaneous interview processes, trying to slot in companies at all times of the day. I needed to account for my energy levels and allow myself some time in between calls for a mental break.

I was too overly concerned with scheduling politeness at the beginning. I should have been giving narrower time windows in order to limit the interviews from slicing up my day into awkward intervals. I also initially felt too nervous to ask recruiters to move calls once they had been scheduled, even if moving the call would have made my days easier. It took me a long time to realize that a small amount of inconvenience on the company was worth it, if it made my schedule more comfortable. I realized that a less mentally-taxing schedule meant that I would be in a better mental state for the interviews.

Companies understand that scheduling is difficult, especially since many candidates are interviewing while still working their existing full-time job. Many recruiters have even asked me to move meetings, sometimes only a few minutes before our scheduled time.

Recruiter and hiring manager calls are easily moved. It takes slightly longer to reschedule phone screens, given that they need to match the availabilities of the technical interviewers, but it was still perfectly fine when I asked to do so. I stopped feeling bad for reasonable rescheduling requests once a friend told me that sometimes candidates don’t even cancel the meetings and just ghost companies.

In terms of concrete takeaways, I recommend:

  • Begin eliminating companies as early as 1.5 weeks into your process.
  • Start by scheduling only 2 recruiting calls or 1 technical screen in a day. Ramp up to 4 interviews (maximum 2 technical screens) by the second or third week, as you get more practiced.
  • Give companies specifically a few 1-2 hour windows for scheduling, leaving 15-30 min in between to decompress.
  • Be comfortable giving overlapping blocks of time, or asking them to move the already scheduled interviews.

The only time I think you shouldn’t ask to reschedule, except for illness and emergencies, is for the onsite interview. This is because these interviews usually last 4+ hours and require a ton of work to schedule. There are many people involved: onsites will arrange candidates to meet not only with engineers, but also cross-functional team members and occasionally senior company executives. There is an especially strict schedule if the company is also paying for flights and accommodation for the candidate. On the other side, the multiple rounds of onsite interviews are grueling for candidates. The right timing for onsites is an important factor in performing well and ultimately receiving an offer.

Remember hiring processes are not consistent

Even though I knew I needed to plan onsites carefully, I still ended up with a terrible onsite schedule. My last three onsites were within four days, and the very last two scheduled back-to-back. While the final outcome was good, the actual experience of going through the onsites was miserable because of my bad planning.

I didn’t factor in how differently each company operated their hiring process. The durations can vary wildly. One recruiter told me that the average time from initial phone call to onsite took 3-4 weeks. Another said that the company could wrap up their entire process, including getting me the offer, in under two weeks.

process_by_company A snapshot of the range of hiring processes at the companies I interviewed with.

It was therefore challenging to properly schedule the various companies to make sure I was progressing at the same rate. I wanted to finish final onsites for companies within two weeks. By clustering the onsites close together, I could hopefully receive my offers and be able to evaluate them together to make my decision. While none of the companies had exploding offers or hard deadlines, it felt unfair to ask certain companies to wait longer because their process resolved faster. And smaller startups will be uncomfortable keeping an offer extended for long periods of time, because there is more opportunity cost for them due to the small size of the team.

Because of the high variance in hiring process, I would strongly recommend asking recruiters for specific details on the interview process. Time to extend the offer and offer deadlines are also critical to understand. Some companies require references after the onsites, which can add additional time before candidates receive the offer. Holidays and other types of internal company slowdowns will also make things harder – the week after I finished my onsites was Thanksgiving, and it took more than a week for a company to put together my offer package due to decision-makers being out of the office. The earlier you can learn all this information, the better you can plan your overall process.

Another thing that stands out in the graph above is the dramatic benefit of using referrals. My former coworker worked at Company I, and from his strong referral, the recruiter let me know I could skip the phone interview and directly proceed to the onsite. Referrals ended up being a great way to add more companies into my pipeline without requiring hours of additional scheduling to go through the early stages. Since I didn’t realize the difficulty of coordination and scheduling in general, I didn’t properly prioritize referrals and leverage them during this job search.

To summarize:

  • Front-load companies with longer processes, so that you can time all the onsites within the same time period.
  • Ask about the end-to-end hiring process early. Make sure you understand the turnaround time between onsites and receiving the offer.
  • Schedule onsites at smaller companies last, since they are unwilling to keep an offer extended for as long as larger companies.
  • Reach out to referrals once you have made it through the initial stages with some companies. Referrals will have an significantly abbreviated hiring process.

Future job searches

After a tiring seven weeks, I can report that I was pretty satisfied with my approach. I was able to think through many of my assumptions and requirements for a new job role. I learned about a wide range of products and interesting technology. I also met many really smart peers and managers, with whom I hopefully can continue to stay in touch with.

I will probably not be attempting such a massive job pipeline next time around. My best advice is to try this time-consuming rigorous approach once or twice in your career if you can. Quit your job and treat searching for a new job as your new full-time role, in order to gain confidence about your decision-making process, expand the set of companies you consider, and get really good at interviewing through sheer volume of experience.

And make sure you learn from my scheduling mistakes.

This article was last updated on 12/09/2019. v1 is 2,964 words and took 11.75 hours to write and edit. If you any feedback on this post or want to share your experience with interviewing, you can send me a note here.