I recently came across System Design Interview: An Insider’s Guide by Alex Xu. The book depicts 12 case studies ranging from designing a rate limiter to a unique ID generator in distributed systems.

There is no unified approach to system design. The goal of the interviewer is to assess the interviewees problem solving capabilities and communication skills. The tasks are vague and wide scoped. You are evaluated based on how you solve the problem step by step. The goal is to come up with a system architecture that achieves the system design goals.

The author establishes a 4-step process for an effective system design interview:

  1. Understand the problem and establish design scope. In this initial step you ask questions to understand the requirements and clarify ambiguities. Sometimes it necessary to make proper assumptions and to communicate them.
  2. Propose high-level design and get buy-in. You come up with an initial blueprint for the system design by drawing box diagrams with key components and relationships on the whiteboard. Ask for feedback from the interviewer and do back-of-the-envelope calculations to evaluate the initial design w.r.t. scale constraints.
  3. Design deep dive. In this step you work with the interviewer to identify and prioritize components, resource estimations or system performance characteristics you should focus on. Don’t get into unnecessary details.
  4. Wrap up. The interviewer might ask you follow-up questions, e.g. discuss potential improvements, identification of bottlenecks or operation issues. If you suggested multiple solutions, giving a system design recap could be useful.

I highly recommend this book as it gave me a solid refresher lesson on system design with a wide range of use cases.