Preparing for the Systems Design and Coding Interview
At Big Tech and high-growth startups, coding and systems design interviews are common - and fairly standard. A lot of people have asked me for preparation advice for these. Here is what I used when getting ready for an E5/E6 Facebook interview, and the one at Uber - where I was hired as a senior software engineer (L5). It's the same resources I recommend to people who are preparing for Big Tech or high-growth tech company interviews.
Note that none of the below links are affiliate links or sponsored. See my ethics statement on the lack of such links.
- Systems Design Preparation Resources
- Coding Resources
Systems Design Interviews
Systems design interviews are more relevant for senior and above positions, while coding (data structures and algorithms and problem-solving) will be an interview type you can expect at all levels. If you're a senior engineer or engineering manager, you might also find my thoughts for senior and above people to be useful.
Note that systems design is not the same across the board. Expectations are very different for an "entry-level" senior position than it is for staff or above positions. The more senior the position, the more real-world experience will start to matter. This is similar to how having "done the job" becomes more important for senior engineering manager and above positions - and staff levels often run parallel to these in scope and compensation at Big Tech.
I summarized a framework for the systems design interview with a book review and will write more about this in my email notes.
While there is no shortage of online resources for systems design topics, I find going through a book an underrated resource. Take notes, go one step at a time, jump between pages, and take your time to learn the concepts they teach.
Books are the best price-for-value preparation resource: the information is much more dense than with video courses, while the price of books is lower than any course subscriptions. Books take time to work your way through them: and so does understanding distributed systems.
- Understanding Distributed Systems by Microsoft principal engineer Roberto Vitillo fills the void between the deep theory and the "interview preparation" focused books. The book walks through practical concepts like failure detection, replication, scalability, resiliency, and operating large systems. It's the book I'd recommend to start with if you have less hands-on experience with distributed systems.
- Systems Design Interview: an Insider's Guide by Alex Xu, previously senior engineer Twitter, Apple, and Zynga is the most focused book that aims to help prepare for the interview itself. The book is the best I've found so far - though I would have liked to see a bit some depth as I detailed in my review of this book. Also comes as an online course with almost the same content.
- Designing Data-Intensive Applications is the book that goes into distributed systems in a very deep way. If you are serious on going deep, you should read chapters 1 (reliability, scalability, maintainability), 2 (data models & query languages), 3 (storage & retrieval), 5 (replication), 6 (partitioning), 8 (faults & reliability) and 9 (consistency and consensus). The book will give you the vocabulary you'll need in this domain.
- Software Engineering at Google (free). This book is not an interview preparation book: however, it is an excellent overview of the engineering practices engineers at Google use day to day. If you want to work at a place like Google and similar places, it's worth understanding how things are done here - and why. There's no better book than this one.
There are still relatively few courses specializing in systems design. Systems design is a tricky one to make a really good course on, as great systems design is based on practice, not watching videos.
Systems Design Interview: an Insider's Guide online course. The best resource I've found so far, and the one with the most diagrams. This resource is the same content as the book and was put together by a former senior engineer Alex Xu at Twitter, Apple, and Zynga.
The course covers the most ground of all courses, is the cheapest, and the only one that does not charge monthly or annually. I've partnered with the author, Alex, and customers buying the complete version of my book on software engineering resumes get a $10 discount on this course.
Grokking the Systems Design Interview from Educative.io was the first course of its kind. It's less detailed than the Systems Design: an Insider's Guide one, but more expensive, and you pay per month, or every year.
Systems Expert refers to itself as the #1 systems design course. However, this resource felt like an overpromise after I bought it. It explains 25 systems design concepts in hours-long videos that felt like a slow pace and tailored for beginners. The biggest value is 10 systems design videos that cover systems design questions and aim to simulate interviews. They are helpful to get a sense of how an interview could go - however, the actual interviews will be quite different, in my experience.
There's a systems design quiz with 50 questions you can take that might help you brush up on a few concepts, but I found it not unrelated to actual interviews. If you are into learning with videos, this course might be the most helpful - though the free Systems Design Interview YouTube channel has higher quality videos, but in smaller quantity.
3. Articles and Videos
- Systems Design Primer - the most complete collection of all topics that might come up on the interview. The biggest issue with this resource is how it has too many things. I suggest you use it as a start to make a study plan for yourself.
- Systems design interview guide and ML engineering interview guide from Patrick Halina, staff engineer at Pinterest. I especially like his high level approach suggestions.
- High Scalability - a blog covering all things large-scale and real-world. The website can feel a bit messy: but it's a treasure cove of information. My favorite parts are the Real Life Architectures and the Favorite posts that include a multi-petabyte content platform, Netflix behind the scenes, or the early YouTube architecture. All practical takes, no theory.
- YouTube: Preparing for systems design interviews, Systems Design Interview YouTube channel and Systems Design Learning Path YouTube channel - so far the best video resources I've found (including and better than the paid video resources).
- My favorite articles and resources on this topic.
- Building Mobile Apps at Scale: my book on the topic. Though it's not geared for interview preparation, it covers most areas worth knowing about large-scale mobile development.
- Cracking the mobile system design interview (iOS & Android) by Edu Caselles
- The systems design interview for mobile developers by DavidNormal
4. Discord Servers
There's a growing number of Discord servers where people hang out to talk about tech interviews, share advice, questions they got, and pair up for mock interviews.
These communities have made huge differences for some readers of the blog, who attributed a good part of their success to being in one of these communities. The most popular ones are these:
- CS Career Hub: by far the largest Discord focused on the tech career. At any given time, more than 1,000 people are online. The server has more early-career people, but there are plenty of experienced people as well.
- Interview.me mock interviews: the most active Discord server focused on mock interviews. Lots of experienced people hang out here: it's a great one to find systems design mock interview pairs.
- Recent Interview Experiences: a server focused on sharing interview experiences for specific companies. Questions asked, how the process was, learning and advice. There are over 50 channels dedicated to companies from the bigger ones - Google, Facebook, Microsoft, Amazon - all the way to ones like Carta, Confluent, Asana, Intuit, Adyen, Shopify, Snap, UIPath, Wish or Zillow.
- (Paid) Systems Design Interview Private Discord: upon purchasing the $29 course for Systems Design Interview: an Insiders Guide, you get access to the private Discord. This is the place you're most likely to find mock interview systems design partners, who have studied systems design topics. For the price of the course, this is a better investment than most paid mock interview services.
- Other Discord servers worth mentioning are SDE Skills (has a systems design channel, but it's quiet, and this is not a place to find mock interview partners) and the Leetcode server (a server more focused on coding).
5. Mock Interviews
Mock systems design interviews make an incredible difference. The cheapest way to go about them is to join a Discord server and find mock interview buddies, then take turns doing the interviews.
Paid: mock interview services can be a better option both when you have less time to find partners, or when you are ready to invest in being interviewed by a vetted, and experienced interviewer:
- Interviewing.io mock interviews are one of the most thorough and fairly priced ones on the market. Keep in mind that systems design mocks are always the most expensive ones. Several readers shared how they felt their investment paid off later. Also, interviewing.io offers a deferred payments plan, where you only pay after you got a job.
- Exponent interview coaches have also been recommended by blog readers who found success pairing up with them.
- ExpertMitra offers mock systems design interviews as well. I personally have not tried this service, but a blog reader recommended it based on their experience.
6. Your Working Environment
You can spend all the time preparing for systems design interviews, but you might still fail these at Big Tech.
If you lack hands-on experience at work building large systems, this could be a blocker to get offers at senior or above levels.
If your current position provides zero challenges related to designing or operating large systems, you might want to consider changing to a company where you would do this, day to day.
Outside of the most-well-known companies, many companies with great software engineering cultures are struggling to find enough qualified candidates. By learning enough theory on distributed systems, you'd probably already be in the top half of applicants at these places. At these companies, you'd be more likely to write and review engineering RFCs, lead complex projects, have engineering mentors otherwise inaccessible from the outside, and have more autonomy to grow.
I know of an engineer working at a traditional finance company who failed systems design interviews at Facebook, Google, and similar places - one of which was their dream company. This person then took a job at a tech company that was perhaps a tier "lower", but still an excellent place. There are many companies that have great engineering cultures and large challenges to tackle but are more open to hiring people who do not have actual experience shipping systems to millions of people.
After a few years at this company, this person then got offers from all their dream companies - as they now had that hands-on experience that was previously missing.
The nice thing about generic coding interviews is how you can prepare for them, even if you have not been exposed to these kinds of problems before. They are also more or less standard between most companies.
Some larger tech companies have started to put "nicer" coding interviews in a place that reflects more real-world problems. However, I have found that these are still a minority among Big Tech - though I'd welcome to see more of a change in this direction.
I suggest you create your own study plan for topics you want to cover: data structures, algorithms, and coding challenges you'd like to complete. I'll be sharing my study plan as part of the tech interview preparation notes.
Cracking the Coding Interview is the book I'd start with. It is the most mature and easy-to-understand read resource. I also recommend it because the author, Gayle trains large and small tech companies on how to do coding interviews well: she did this at Uber, where we made changes following her help. No other book prepares for the type of interviews that Gayle helped put together.
I own multiple editions of this book, and it has made the biggest difference in preparing for various interviews for me. It's dense, worth every penny and has become a "baseline" for most Big Tech interview preparation.
De-Coding The Technical Interview Process from Spotify software engineer Emma Bostian is a fresh take on navigating the tech the interview process, tailored for frontend engineers. She wrote the book after she found Cracking the Coding Interview to be too Java/backend-focused. The book comes with 1, 2 and 4-week learning plans as well. A great book to start with.
Elements of programming interviews is an extensive collection of programming challenges. I really like how exercises are grouped per data structure and algorithm area. It's a good place to reach to for more practice on specific problem areas.
Grokking Algorithms is the book I'd recommend to understand the most common algorithms. I'm convinced you don't need to know of more algorithms at tech companies and (most) engineering interviews. I have bought - and read most of the Algorithm Design Manual and Algorithms: Fourth Edition. Both books go far deeper than I have found any coding interview to dive into. Unless you're really into algorithms, I would not recommend them.
2. Coding Sandboxes
Practicing coding exercises is something you'll want to do, and there is no shortage of sandbox platforms:
- Leetcode is the mostpopular destination, with lots of free resources, and a Pro tier.
- Codewars coding katas: complete small coding challenges.
- Edabit coding challenges is a free resource with numerous coding challenges.
- SWECareers is built by a Facebook engineer, and is the most affordable service that comes with a detailed algorithms video course, and 200 common coding questions, categorized by companies that tend to ask them. Get a 10% discount by using this link (affiliate)
- AlgoExpert is a paid service that offers video walkthroughs for more than 100 coding challenges, curated by a former Google engineer.
3. Other Resources
There are almost too many articles, videos, and people giving advice on how to prepare for coding interviews at tech companies. Here are my favorites:
- Discord servers can be useful in finding mock interview partners, and getting the scoop about the process at various companies. See the most popular Discord servers here.
- Problem-Solving for the CS Technical Interview - a course from Stanford. The slides and course material are one of the best preparations for Big Tech coding interviews. I used an early, 2009 version of this course to prepare for interviews when I moved to the UK.
- Get That Job at Google - an article from Google engineer Steve Yegge, from 2008. Shockingly, the contents did not get out of date.
- Always be coding: how to land an engineering job from Google and Square software engineer David Byttow. The article was written in 2013, but I find the advice still relevant. See this video from 2019 with actionable advice. I especially like the advice on reinventing the wheel - I did the same when preparing for interviews.
- The Google frontend interview process by Emma Bostian, who interviewed onsite here.
- Interview bootcamps are becoming more popular. They are the most expensive option but can help you level up faster and give you far more feedback. I suggest you choose ones where the identity of the instructors is known, and they are experienced interviewers at the types of companies you are hoping to break into.
Take Ownership of Your Education
Big Tech interviews are both fairly standard and widely documented. There is a wealth of resources to prepare for the coding interview and a growing pile of systems design resources.
It's easy to get lost in so much information: which is why you should make a plan on how you will get "interview-ready".
Create a study plan with topics you want to cover for the interview types you're expecting to have. Learn the theory, then practice this with practice and exercises where you create something from scratch: implementing a data structure, drawing up a diagram.
There is no shortage of people complaining about the difficult interview process Big Tech has. However, I know of no other industry where you can get a high-paying job with no college degree, no connections: purely through interviews that are fairly standard among the highest paying employers like Netflix, Airbnb, Uber, Facebook, Pinterest, and others.
Tech interviews being "standard" across the Big Tech makes preparing for these a high-leverage activity: study once, interview many times. Once you prepare, just make sure your software engineering resume grabs the attention of the recruiters.
Good luck - and if you are looking for more advice for senior and above interviews, I have some.
Featured Pragmatic Engineer Jobs
- Full-Stack Engineer at Farmlend. £85-95K + equity. London.
- Senior Backend Engineer at Farmlend. £85-95K + equity. London.
- Senior Full Stack Engineer at Perfect Venue. $150-180K + equity. San Francsico or Remote (US).
- Senior Software Engineer at AI Build. London or Remote (Europe).
- Senior DevOps Engineerr at AI Build. Remote (US).
- Full-Stack Engineer at Vital. $70-120K + equity. Remote (Global, within 5 hours of GMT).
- Backend Engineer at Vital. $70-120K + equity. Remote (Global, within 5 hours of GMT).
- Technical Lead - Platform at Vannevar Labs. Remote (US).
- Senior Software Engineer, Fullstack at Vannevar Labs. Remote (US).
- Computational Geometry Engineer at AI Build. London or Remote (Europe).
- Senior QA Engineer at AI Build. London or Remote (Europe).
- Lead Backend Developer at Cineville. €53-79K + equity. Amsterdam.
- Senior Software Engineer, Distributed Systems at Mixpanel. $200-270K + equity. New York, San Franciso, Seattle or Remote (US).
- Senior Software Engineer, Fullstack at Mixpanel. $200-270K + equity. New York, San Franciso, Seattle or Remote (US).
- Principal Engineer at Shoplift. $185-205K. New York.
- Senior Engineer at Sixfold AI. New York.
The above jobs score at least 10/12 on The Pragmatic Engineer Test. Browse more senior engineer and engineering leadership roles with great engineering cultures, or add your own on The Pragmatic Engineer Job board and apply to join The Pragmatic Engineer Talent Collective.
Want to get interesting opportunities from vetted tech companies? Sign up to The Pragmatic Engineer Talent Collective and get sent great opportunities - similar to the ones below without any obligation. You can be public or anonymous, and I’ll be curating the list of companies and people.
Are you hiring senior+ engineers or engineering managers? Apply to join The Pragmatic Engineer Talent Collective to contact world-class senior and above engineers and engineering managers/directors. Get vetted drops twice a month, from software engineers - full-stack, backend, mobile, frontend, data, ML - and managers currently working at Big Tech, high-growth startups, and places with strong engineering cultures. Apply here.