I wrote this entry shortly after concluding my job search in spring 2022. The economic landscape looked different then, and some of the advice may feel out of place in the current climate. I hope the process and strategies prove helpful for your next search.
I recently concluded a job search and am excited to say I’m joining Snapchat. In this post, I’ll walk through the process I used to decide where to go, navigate interviews, and select a new role.
My main advice is to start preparing early. Preparing for a job search requires time, (potentially) an understanding partner, and a long timeline. While it is possible to do less work and receive an offer, I had these tenets:
- Preparation is part of career development. I believe it is a net-good to understand time and space complexities, system design, and better describe one’s work to others.
- Maximize odds of converting opportunity to offer. I’m willing to invest more time in the hypothesis that it raises my odds of success (though never guarantee it)
- Hiring is a system. Understanding systems is part of my role.
Determine What You Want
I recommend working through the guidance on jobsearch.dev to determine what you’d like from your next role.
Plan to spend time each day working through sample problems, writing clean and maintainable code, and solving the problems in an optimal or near optimal runtime. The best sites I’ve found for this are LeetCode and neetcode.io.
I recommend starting with the original “Blind 75” list tab, working through each category, and then, if you still have time, go to the 150 recommended.
Try your best to understand each problem. I worked on each problem for ~30 minutes. If I couldn’t find a solution, I read through the discussion to find what worked for others. Sometimes reading what others tried and implementing it helped me understand it.
If I needed to look at the discussion solution to solve the problem, I added it to a list to retry within a few days to make sure I understood it. I liked watching a video walkthrough for problems where I felt particularly stuck or confused.
By the end of my search, I completed ~300 LeetCode (LC) problems, with the distribution as roughly 1/3 Easy, 1/2 Medium, rest Hard. Hard LCs utilize a combination of Medium-level techniques to solve in effectively. Your interviewer will probably ask a flavor of Medium LC in interviews, and understanding the techniques and patterns provides the most leverage.
Here are some useful resources for system design:
- Designing Data-Intensive Applications by Martin Kleppmann. A master-class in building resilient and scalable systems. Takes a ground-up approach from looking at database fundamentals and how data is managed on a single system through to distributed systems, consensus, and combining systems to mitigate trade-offs. Fantastic book and well-reviewed on GoodReads too. It’s also available as an audio book (which is what I used). Worth more than one read / listen.
- System Design Interview – An insider’s guide by Alex Xu. A helpful guide for getting a feel for a framework and kinds of problems you might see in a System Design interview. Read through all the resources linked at the end of each chapter to cement your learnings.
- System Design Interview – An Insider’s Guide: Volume 2 by Alex Xu and Sahn Lam. Came out in early March 2022. Fantastic resource which goes into greater depth than the first System Design book. Same recommendations apply.
- Amazon’s Dynamo paper.
- Kafka paper: I haven’t had the opportunity to work professionally with Kafka yet so I wanted to understand more of its use cases and advantages.
- System Design Primer: For Senior-level interviews, I think the breakdown of each problem is a bit shallower than some other resources.
- System Design Interview channel: An amazing resource from a Senior SDE at Amazon. I recommend watching each of these videos at least twice.
- Mastering Chaos - a Netflix Guide to Microservices: Interesting breakdown of how Netflix systems fit together and some challenges at scale. I like the presenter’s presentation style and use of analogies.
- System Design Interview with a FAANG engineer: Build LeetCode: A sample System Design interview walkthrough with a paid interview prep service. Good to get a feel for the kinds of back-and-forth that you may see or experience during an interview.
- Designing for Understandability: The Raft Consensus Algorithm: Presentation on the design of Raft, a consensus algorithm that aims to be understandable. Consensus is a really interesting aspect of distributed systems and their approach to decomposing a complex domain is interesting!
- Scaling Memcache at Facebook
- Scaling Facebook Live Videos to a Billion Users
- Scaling Instagram Infrastructure
- Scaling Push Messaging for Millions of Devices @Netflix
- TAO: Facebook’s Distributed Data Store for the Social Graph
Describe your experiences using the STAR method.
- All You Need to Know About Behavioral Interviews: High-level talk that covers some aspects and considerations during behavioral interviews.
- Don’t Get Down-Leveled or How to Tell a Good Story: Good framework for thinking about how to favorably describe your work and role from past experience while providing signal to interview panels.
Find companies of interest
My list of potential companies was about 30 at this point. Of these companies, I talked to 10 of them.
Do not waste anyone’s time. If you cannot see yourself working for a company, or you’re only interviewing to get a competing offer, don’t reach out or cancel the interviews as soon as you feel that way. Interviews are expensive for both the company and you.
Participate in the Hiring Process
Participating in interview panels at your current employer is a great way to get more comfortable talking with others in a 1:1 basis. You also have to explore LeetCode style problems (if this is what your company asks), which is a good motivation to do a bit of extra research. In addition, by participating as an interviewer, you can look at what effective candidates do that sets them apart and model that in your own interviews.
Contact recruiters / referrals
You may have had recruiters reach out in the past and identify you as a good candidate. I hope you’ve been kind to those people because now is a good time to follow up with them. I searched through my email and LinkedIn past to see if I had received messages from companies of interest and followed up with them if so. This led to discussions with most of the 10 companies I identified.
- Schedule on-sites in the same period, if possible.
- Split the interview loop over two days, if the company allows it. Interviews are taxing.
- Schedule well in advance. More time gives lets you better prepare.
On the day of the onsite interview, be well-rested, have a clear head, and get ready to tackle the day’s challenges. Maintain a positive attitute throughout the day, even if you encounter setbacks. You could be doing well even if it doesn’t feel like it in the moment.
- Be friendly.
- Demonstrate a genuine interest in the company and role.
- Be prepared to answer questions about your past work, thought process, and approach.
- Don’t forget to ask questions and try to learn more about the company!
Preparing for a job search requires time, effort, and dedication. I spent about 300 hours in total preparation outside of work over about a 6 month period. I feel fortunate I landed at Snap and I’m happy with the outcome.
In summary, preparation, determining what you want, and coding and system design prep can play a pivotal role in successfully navigating a job search. Start early if you can! I hope this advice proves useful for you if you’re looking for your next role.