How to prepare for system design interview?

Go back to Blog SectionHow to prepare for system design interview?

How to prepare for system design interview?

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. The system design is highly weighted as you gain experience in the industry. For roles such as Staff Engineer, Principal Engineer or Architect it is important to excel in this round.

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.

1. Books

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 Guideby Alex Xu, previously senior engineer Twitter, Apple, and Zynga is the most focused book that aims to help prepare for the interview itself. There is 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. It has been one of the best technical book I have read but mind you, its 700+ pages and highly technical so it would be hard for someone to cruise through it quickly.

  • 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.

2. Courses

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.

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

Mobile-focused resources:

4. 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:

  • Meetapro

    : mock interviews from software engineers working at Big Tech companies. Founded by an ex-Uber engineer I talked with.

  • 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.

Preparing for System Design interview is always fun as it can be a great learning experience to know about distributed systems and how large scale companies run and manage complex architecture