How to prepare for System Design inteview

How to prepare for System Design interview

System Design interview is part of a hiring loop in most companies. It aims to assess candidates ability to design a system under constraints and understand trade offs while doing so. There are many different types of System Design interviews and they operate on different levels of abstraction. Regardless of the specific type you will encounter, there are few things that can enhance your chances of success. Below I would like to share 3 tips that, based on my own experiences, will help you to better perform during the interviews.

Books

There are two essential books that will make you better at solving System Design interviews. One of them will give you a broad overview of system design questions and how to deal with them while the second will help you with depth of your knowledge.

First book is System Design Interview - An Insider’s Guide (part 1 and 2). These books offer a great overview of common system design tasks, complete with opinionated and high-level solutions. Reading through them will let you understand how different types of systems are built (from key value store through chat and ending with stock market system) and allow you to develop a structured way to solve system design tasks.

The second book is Designing Data-Intensive Applications (link) . This is the book that covers all the important aspects of distributed systems. It’s a heavy read full of information so I would recommend reading it at least twice. If you do not have time to read it all then focus on Part II Distributed Data .

Design a system \ feature

Before your System Design interview with a company you should prepare by designing a feature \ system based on the product being developed by the company you’re applying to. Below you can find some examples to give you a better idea of what I mean.

If you apply to PagerDuty make sure you know how to design a scheduler \ notification system.

If you apply to Miro design a simple shared drawing board \ board changes history.

If you apply to Doctolib design appointment system.

If you apply to Reddit design posts feed.

When you already have an idea about how to design those systems you should try to change requirements regarding traffic, consistency and availability.

If you don’t have scheduled an interview yet but would like to still practice you can use ChatGPT. Just ask it to act like an interviewer and give you a system design task. It can even clarify requirements and explain how such a system should be designed. I had, however, mixed success with discussing my solution with it.

Reference a solution

When proposing an idea during an interview, it’s always beneficial to reference a well-known company that has already implemented a similar approach. It’s especially useful in case the opinion you are expressing is unpopular. Let me give you some examples.

Single master Postgresql instance in a multi datacenter setup might seem like a bad idea… until you call out Instagram which is doing exactly this)! All of the sudden you have proof that it works!

Another example would be handling millions of QPS on your database. Based on the number the interviewer might be expecting use of NoSQL. Using MySQL in such a use case would be foolish, right? Except YouTube uses it with sharding done via Vitess and handles even higher traffic.

If you have those points of reference - use them. This will show that you are interested in architecture and know a broad spectrum of solutions used in other companies.