Lessons From A Tech Job Search
A year ago I was thinking about interviewing but I was feeling apprehensive. I hadn't interviewed in 4 years. My resume wasn't up to date. I had only a vague idea about what companies were out there and what the process would be like at each one. I put off applying because of the fear of the unknown.
I wish I had access to a primer on what companies were out there and how to approach each one. How long the process would take from start to finish. How to prepare for each one. I couldn't find such a post then, so I thought I'd write it now.
What I found a bit frustrating in similar posts is the reluctance to name the companies involved. I'm going to name the companies here to paint a clear picture. For example, if you want to interview at companies that don't use algorithmic interviews, you'll know where to apply.
It's possible I might get some judgement for the companies I did or didn't apply to, or because I got rejected by some company. I'm ok with that.
- Since this is based solely on my experience, it's a sample size of 1.
- It's been almost a year since I completed this process, so some of the companies might have changed since then.
- I'm a backend software engineer.
- Preparing my Resume
- Screening process
- Initial interview
- Algorithm Interview
- Design Interview
- Behavioural Interview
- Reverse questions
- Asking for feedback
Preparing my Resume
I put this off because I had to rework it completely, adding 4 years worth of work. And then it became a classic case of yak shaving. Before writing the resume I set out to find the ideal tool to write it. After settling on jsonresume because I liked how it kept content and layout separate, I found it wouldn't work on my M1 laptop. Then I wasted time getting this working and fiddling with the layout. Finally I wrote and polished the content.
In hindsight, done would have been better than perfect. Also, I could have made it easier for myself by updating my resume after every performance cycle when my achievements were fresh in my mind.
It's now stored in plaintext + git so updating is easy.
There are a bunch of ways you can apply, and I used them all.
- Company.com/careers. Apple, Babylon, Cloudflare, Deliveroo, Monzo, Spotify, TrueLayer. (7)
- Referrals. Amazon, Palantir. (2)
- Internal recruiter. Google. (1)
- External recruiters. Instabase, JPMorgan. (2)
Where I didn't apply
- Didn't want to work there. Finance/quant roles, startups.
- Didn't think to apply at the time. Shopify and Transferwise (now Wise).
- Didn't have relevant roles in my city at the time. Microsoft, Netflix, Revolut, Stripe, Uber.
- Already worked there. Facebook (Meta).
A spreadsheet allowed me to track at a glance which processes were still ongoing, what the next action on each was and detailed notes on all conversations. My memory is poor, so this was essential.
I received positive responses from most of the companies I reached out to except
- Apple. Automated response, nothing after that.
- Spotify. Automated response ("you can listen to the playlist we’ll play in the office as we read your resume"). To be fair, the playlist is 🔥.
- Google. This one was strange because the recruiter had emailed me every 6 months going back 3 years. Unfortunately, at the time I reached out the recruiter was switching roles and the team it was passed to was being reorganised. I didn't know this though. After a few weeks of silence I asked a friend to refer me. I got a call exactly a month after my first email.
Lesson: it's possible for applications to slip through the cracks. I don't know if a human ever saw my application at Apple or Spotify. If they did, I don't know why they passed. I didn't know anyone there like I did at Google, so I couldn't find out more.
It's a given that some applications will be unsuccessful. We shouldn't let it distract us or get us down. Keep focussing on the others.
Companies left - 10.
There's usually a screening process where the internal recruiter applies some basic filters. These questions mostly revolve around past jobs, challenges you've faced in your roles, technologies you've worked with. "Why are you switching" is a common question.
A couple of companies employed a different filter.
- Cloudflare asks you to take an online test with basic tech questions. I found most of them straightforward except one very specific, obscure question about SSDs. I assume if you answer it, it looks like you looked up the answers somewhere.
- JPMorgan. Online test with an intermediate problem. It's been a while since I used Java but there was plenty of time to look up syntax and stuff.
Cleared all the screening processes except Palantir. They didn't say why and I didn't follow up.
This stage is also an opportunity to find out more about the role. I learned that the role at Instabase wasn't a good fit for me and stopped the process.
Companies left - 8.
This is where it gets harder. I expected most companies would use the dreaded algorithm interview in the initial interview. It turned out I only did one algorithm interview and even that was a positive experience. Here's how they all went.
- Amazon. I was expecting an algorithm interview. Instead it was 15 minutes of questions about my experience followed by 30 minutes of coding. This was less about solving the problem and more about how to structure the code.
- Babylon. Questions about work experience. More of a conversation than an interview.
- Cloudflare. Asked me to live code a problem involving TCP sockets in a language of my choice. I used Go because I think the
netpackage is easy to use and has good documentation. It went alright but I made a couple of basic errors. Coding an unfamiliar problem under time pressure isn't easy. Good enough to pass though.
- Deliveroo. 15 minutes of tech questions. I got to choose 2 topics out of 5 options. I chose "operating systems" and "object oriented programming" and answered all the questions. 45 minutes of algorithm interview. It started with a simple problem, then a complex follow-up and then a more complex follow-up. I didn't have time to code the third but I explained how I'd approach it.
- Google. This would have been an algorithm interview but it didn't happen. Because of the mixup I mentioned earlier, I was done with initial interviews with all the other companies. The interviewer at Google was accommodating and offered to fast track me to the final interviews. I gratefully accepted.
- JPMorgan. This was a bit of an outlier. I spoke with 2 engineers who asked very specific questions about Java. Like "when is a
staticblock run?" I thought it was a bit strange to ask easily googled programming language trivia. They evidently felt it was a good proxy for software development skill. They later got back to me saying they wanted someone with experience with Java 14 and I had only worked with Java 8. 🤷♂️
- Monzo. Take home test. Of all the interviews, I enjoyed this the most. It was a small self contained, real world problem. They recommended spending no more than 4 hours on it. But honestly, I had fun with it. Once I finished coding, I ran the linter to get an A+ on code quality. Then I set up Github Actions to automatically run the unit tests because why not. Afterwards I discussed the code with an engineer and explained my approach. Great discussion.
- TrueLayer. Take home test - “write a HTTP endpoint that hits these two public APIs, combine the result and return it". I offered to submit a basic solution and make whatever improvements they asked for. But the recruiter said they'd like it to be coded to production standards and I would only get one submission. I figured I'd be better off spending time preparing for algo and design interviews instead because that would improve my chances with multiple companies. I thought I'd come back to this later but I didn't because I had offers by then. Take home tests are fine with me but long, open ended ones are difficult if I'm interviewing elsewhere.
Passed all except JPMorgan and TrueLayer.
Companies left - 6.
I had tried to schedule most of the initial interviews at the same time, followed by all the final interviews in succession. This mostly worked because I was able to prepare for one thing at a time. I could also learn from mistakes I made at one while doing the other
But it doesn't always work. I took my time scheduling the final interview with Cloudflare. In that time they made an offer to a different candidate which was accepted. And not all companies work on your schedule. They might not have interviewer availability in the slot that's convenient for you.
Ideally you want all the processes to end at the same time to make negotiation easier, but it's difficult to pull it off.
From applying to getting offers, it took me 2.5 months. If you rush each stage or apply to fewer companies you could do it in as little as 1.5 months. If you apply to Google, I'd expect at least 2.5 months, perhaps more. Alone among the companies I mentioned, they have a further stage where you interview with prospective teams.
Companies left - 5.
How I prepared
- Approximately 30 Leetcode problems over the course of 4 weeks. (Had already done most problems on InterviewBit in 2017).
- I thought Leetcode premium was worth it because you can access problems by company. I did several problems tagged Amazon and Google before those interviews. None of the questions asked by any of the interviewers overlapped with the ones I practiced but it still gave me confidence going into the interviews.
- Couple of mock interviews.
- Prepared a list of useful snippets in my preferred interview language (Python).
How I'd recommend others prepare - Practise on either InterviewBit or Leetcode until you're able to write the code, debug and solve for all cases within the time limit and without any hints. Use the language you're most comfortable in.
My ideal algorithm round goes like this:
- Listen to the problem, ask clarifying questions.
- Explain the solution with complexity.
- Code the solution while explaining my thought process.
- Step through the code with a test case. Fix issues if any.
- Mention or write the other test cases.
I want the interviewer to walk away thinking - Krishna can write code that works and communicate technical ideas well.
At Big Tech firms, algorithm practice helps you clear the screening interview and get a foot in the door. Doing well in the final algorithm rounds are necessary as well, but whether you get an offer and the level of your offer depends on your performance on the design and behaviour rounds. And for companies that skip algorithms, those two rounds are everything. Prioritise accordingly.
The 3 coding interviews each with Amazon and Google went well.
Babylon, Monzo and Deliveroo did not ask algorithm questions in the final interview.
How I prepared
- Designing Data Intensive Applications by Martin Kleppman front to back. This book goes beyond interviews, it is essential reading for backend engineers. It took me a couple of months to read this, but it was worth it.
- System Design Interview by Alex Xu which solves some commonly asked design questions. I found it helpful to read a few days before the interview.
- System Design Primer is another resource but I didn't use it much.
- Finished with a couple of mock interviews.
How I'd recommend others prepare - Read these two books. Prepare a checklist of what you'd like to cover in the interview. Before each interview, mentally run through how you'd implement their products. For example, Facebook and news feed.
My checklist for backend design interviews could serve as a starting point. I rarely had time to get to the extra credit bits.
- Clarify requirements - Write QPS, average and peak (peak is 2x average) - Read QPS (approx 10x write QPS) - Total storage required - Latency requirement - Consistency vs Availability - High level diagram that matches requirements. Get buy-in - Deep Dive - API - Database schema - Wrap up - Error cases - Potential bottlenecks - Extra credit - Cost (development vs ongoing) - Logging, metrics, alerts - Automation - CI, CD - i18n - CDN - RPC
Amazon, Babylon, Deliveroo, Google, Monzo - all of them were fascinating discussions. This is my favourite interview to do and I enjoyed talking to all the interviewers. The rounds went well though I didn't think so at the time.
How I prepared - I had cleared the Amazon interview once before so I knew the drill. I knew that each of the 6 interviewers would ask me for a time I displayed 2 of the 14 leadership principles. So I'd end up discussing at least 12 of the 14. Ideally I'd be able to think of an instance where I had done these things on the fly, but like I said my memory is poor. It takes me time to remember things. So I sat down and wrote a true anecdote from my experience for each of the 14. When interviewers asked, I told them a relevant anecdote. It was easy because they were fresh in my mind.
Every company asks these questions, not just Amazon. They all want to know how well you work with others, if you can commit to an idea you disagree with, if you can take ownership of a problem space, deliver results, mentor others and so on.
Some of the answers to these questions did not show me in the best light. I could see (or imagined I could see) the interviewer's body language change negatively when I said those things. But I figured it's better to be honest than make stuff up.
How I'd recommend others prepare - Same. Prepare your anecdotes. Be honest.
Every interviewer asks if you have questions for them. Here's a great list of questions you can get started with. You'll find at least a few questions that are important to you.
But IMO this is only for you, not to impress the interviewer. In my experience, asking no questions didn't affect the result. For example, by the time I did the 3 coding interviews at Google I was mentally exhausted and couldn't muster the energy to ask them anything. I still got an offer. Your mileage may vary.
You can also ask these questions after you receive an offer by requesting the recruiter to put you in touch with the manager or an engineer from the team you'd be joining. They're usually happy to oblige.
Asking for feedback
I asked a few companies if they could share interview feedback with me and some did. Others ignored the request or politely declined (Amazon and Google).
If you live in a jurisdiction with a data privacy law like GDPR, you can request all data they have stored about you. They are obliged to provide it, although you risk burning bridges with them. I opted not to do this, but I know this method works.
I found that I'm a harsher critic of my interview performance than my interviewers. It's a laugh to compare their feedback with what I wrote about my performance after the interview. I only focused on the negatives, nitpicking whatever tiny errors I made. They took a broader view, with the positives getting equal air time.
You might learn something interesting from your interview feedback. There's no harm asking for it. Like the philosopher Michael Scott said - "you miss 100% of the shots you don't take".
If you listen to just one thing in this post, it should be this - you should get advice on how best to negotiate. These two links are good to get started with:
I got offers from the 5 companies I did final interviews with - Amazon, Babylon, Deliveroo, Google, Monzo.
It was a difficult decision but I opted to go with Monzo. I was influenced in part by the great interview experience. The role also aligned well with my previous experience and I've been a satisfied customer for years.
Monzo is currently hiring!
None of this would be possible without the help of my friends. They conducted mock interviews and helped me improve. They supported and encouraged me when I doubted myself. Their timely advice helped me make better decisions. Thank you to (in alphabetical order) Anurag Gupta, Arathi Sundarram, Bochra Gharbaoui, Chandra Sekar, Kushagra Sinha, Minesh Patel, Rajat Khanduja, Sri Raghavan, Varsha Krishnan and Vivek Bagade.
Recruiters are happy to spend time and effort helping you feel as comfortable as possible. A couple of the recruiters here went above and beyond and I'm very grateful to them.
Lastly, shout out to all the interviewers. I had a great experience as a candidate. Interacting with you has also shown me how I can improve as an interviewer. Thank you.