The following chapter is mainly about what a system design interview looks like when you actually land the role and schedule the interview.

The Four-Step Process for System Design

Understand the Problem and Design the Scope

One of the most important skills as an engineer is to ask the right questions, make the proper assumptions, and to gather all of the information that is needed to build the system. When you ask questions, the interviewer will either answer your question or tell you to make your own assumption. If you make an assumption, be sure to write it down as you will need it later at some point.

Questions to ask the Interviewer

  • What specific features are we going to build?
  • How many users does a product have?
  • How fast does the company anticipate scaling up? What are the anticipated scales in 3, 6, and 12 months?
  • You should also be asking specific questions about the functional requirements that you put together.

Propose a High-Level Design

  • Come up with an initial blueprint for the design. Ask for feedback. Treat your interviewer as a teammate and work together. Many good interviewers love to talk and get involved.
  • Draw box diagrams with key components on the whiteboard or paper. This might include clients (mobile/web), APIs, web servers, data stores, caches, CDNs, message queues, etc.
  • Do back-of-the-envelope calculations to evaluate if your blueprint fits the scale constraints. Think out loud. Communicate with your interviewer if the back-of-the-envelope is necessary before diving into it

Design Deep Dive

From here, now that you have thought about and designed the high-level design, you will get feedback from the interviewer and do a design deep dive. At this point, you should come prepared with specific areas that you want to focus on and inform your interviewer about them to get feedback.

You actually want to dive into the implementation of the services that you just talked about earlier, with specific things like what DBs you are going to use, what system design principles you can use to solve the problems that you discussed.

Wrapping up the Interview

At the end of the interview its likely that the interviewer will ask you about some of the following:

  • Bottlenecks of the system
  • Potential improvements to the system
  • Error cases and potential system recovery
  • Operation issues like metrics and logging

Summary

  • Step 1 Understand the problem and establish design scope: 3 - 10 minutes
  • Step 2 Propose high-level design and get buy-in: 10 - 15 minutes
  • Step 3 Design deep dive: 10 - 25 minutes
  • Step 4 Wrap: 3 - 5 minutes

Linked Map of Contexts