A few friends have asked me how I approached study, interviews and negotiation. This blog outlines the method that worked for me, and I hope it can help others.
It is the process I followed to get a Senior role at Tesla and a Staff role at Atlassian, with competing offers from other companies to help negotiate.
Some of this study will feel pointless because it's so different from what you do day-to-day. This frustrated me initially and put me off wanting to study. Then I realized that it's a game, and if you learn to play it, then you can game the system.
Watch this video.
Make a list of all the big projects you worked on, and write down as many details as you can remember: challenges, what didn't go well, what you learned, technical achievements, everything. You'll need this later for behavioral interviews.
Know that my approach was to spend money to make more money. As you'll see below, I spent about 2k from my Tesla severance payout on private coaching for certain interviews. It was a risk, but I more than doubled my salary between Tesla and Atlassian. This is a luxury not everyone has, so I have a comment about the sad state of tech interviewing at the bottom.
Also know that I was unemployed both times I did this process and it still took 5 months (3 months of study and 2 months of interviewing). If you have a job, the study might take twice as long. It is a really hard process because it requires free time, good health, stable relationships, and good finances to pay the bills while you study. It shows how ridiculous the tech interview process has become.
I was unemployed so I broke this down into morning and afternoon blocks. These were 2.5 hours each. So 5 hours a day, 5 days a week. It took me about 3 months to feel ready, but I had done it before so don't feel bad if it takes longer.
The behavioral prep (making the list of projects above) you can do in a few days plus a few more days for fitting them to a story framework (discussed later).
Do this course here.
You can probably skip backtracking and DP, unless you're interviewing at Google.
When you feel ready, do as many free peer-to-peer mocks on Pramp as you can until you're comfortably finishing most of them in 30 minutes.
I was really bad at these interviews initially and it took weeks and weeks of Pramp before I could even finish one. I was so bad at them I eventually paid for a mock with Jared Gutierrez and he helped me change my approach to fully complete the solution in pseudo code before writing any real code. It helped me actually nail down the logic before turning it into code. It felt scary but sometimes I'd spend 80% of the interview writing pseudo code and then crank out the actual code in the last little bit which was then quite easy. It was a game changer for me.
This was the interview that has the worst resources online for prep. You can read Designing Data Intensive Applications but I think it's overkill, and it doesn't actually help you play the game of System Design interviews. There's a big difference between real system design on the job and the game of a 45 min interview.
So many YouTube videos are very high level and not sufficient for Senior/Staff level details. The only channel I found that had the right amount of detail was SDFC and also Jordan Has No Life, but his humor is very brogrammer and might be off-putting for some people.
Sign up for this mailing list which summarizes big tech engineering blogs Quastor.
Watch this section again here. During the interview, try to sneak in references to "how I've solved this problem in the past" or "when I previously had to choose between..." Or even explicitly say "I've built a system to address a similar problem and this is how we solved it."
You’ll find that there are a few different types of questions, with little variations. For example, "Design Instagram" and "Design TikTok" are both flavors of a newsfeed with video, and the solutions are pretty similar. Same with design YouTube/Netflix or design WhatsApp/FB Messenger and others. You can find example questions online and start to group them into families that you study for. So in the interview you can just think "oh this is a real-time message problem" and re-use your WhatsApp prep.
You’ll need to do lots of random study on concepts you'll need. E.g. SQL vs NoSQL, different caching strategies, horizontal vs vertical partitioning, etc. It will feel very random at the start but eventually you'll have a surface level understanding of common system design interview knowledge.
I also found these helpful for Staff level: Microsoft Patterns. For me, the sidecar, saga, and circuit breaker patterns all came up in interviews.
The best thing I did was mock interviews with Geoff Mendal once I felt ready. His sessions fill up months in advance, so book them early.
Watch this video. Go back to that list of projects you made before you began and apply some storytelling framework to them. I used an adaptation of the "person in the hole" framework and my acronym was SCOUTL. Here are some examples:
Go through common behavioral questions online and map them to each big project. E.g. disagreed with PM/EM? That's story #2. Managed conflict with a coworker? That's story #3, etc.
Make sure your stories match your level. E.g. senior should have stories where you impacted an entire team. Staff should have stories where you impacted an entire org of many teams.
I did practice behaviorals with these people and it was so helpful:
This took me 2 months because I wanted to space it out to have as much time to focus on each stage as possible.
The goal here is to have multiple competing offers, so that you companies negotiate against each other to hire you.
Interviewing is a skill and you get better with practice. Anticipate that you'll blow a few.
I addressed this by having two buckets of 3 companies:
In my case, the B bucket was Google, Amazon, and TikTok because they had in-office requirements, but I knew those interviews would be hard and would help for the A bucket. You can still get offers from the B bucket and use them as leverage. Make sure, though, that you're not misleading them and there's actually an offer from them you might accept. For example, if Google offered me X then yeah I'd go to the office 3 days a week.
In my experience, I needed to arrange 6 screening calls with recruiters to line up 3 first round interviews. You want to try and get all your bucket interviews to come in the same week for each phase. Something like this:
Also know that interviewing is partly luck and you can do everything right in terms of preparation and still fail. It happened to me many times. For every interview I passed, I probably failed one or two.
Don't bother sending your resume to job portals. It's mostly a waste of time. If you want to work for a company, add internal recruiters on LinkedIn and ask them to set up a call. I got rejected by company portals and then later was advanced by a human recruiter for the exact same role.
If you think your resume needs work, you can book a session with Carlos Hattix. Carlos was amazing, and he also suggested to ignore portals and do what I described in the point above.
You'll want to contact all the recruiters EARLY because it takes weeks sometimes to set up the interviews above. It's fine to do a call and then say "I want a few weeks to prep, can I do my first coding round on Monday the nth."
Read this article again. This is your bible for negotiating the best offer possible. It worked for me for Tesla vs a startup and also for Atlassian vs Canva. It can feel scary but trust the process.
I also hired Natalie Gray as my private negotiation coach. She did quick calls with me during the whole process to help me. This paid for itself many times over.
It's not fair that some people can spend money on private coaching for tech interviews, but others can't. The sad thing is that an entire industry has been created for tech interviews. It's big business helping people "crack the interview."
I might have received the same offers/salary without coaching, but I doubt it. It sucks because it means it is not a level playing field. It's worth knowing it exists though, because whether you pay for coaching or not, you'll be competing against people who did.
It probably shows that tech interviewing is broken - too formulaic and game-able.
The links to the Exponenet coaches are affiliate links. If you DO want to try coaching (and want to say thanks for this article), please book via these links!