# System Design Interview Study Guide > Repetition is the mother of all skills > > - Tony Robbins 📌 Learning Objectives By the end of this guide, you will be able to: 1. **Strategize** your preparation by pinpointing the true goals of a system-design interview and crafting a focused, personalized learning plan. 2. **Crack** the interviewer's hidden requirements—avoiding the common pitfall of solving the wrong problem by extracting true constraints and priorities from the outset. 3. **Internalize** the four-phase framework for system design interview via the ABC mnemonic to guide a structured, confidence-driven design conversation, ensuring you stay on track. 4. **Sketch** a clear, high-level architecture in under five minutes and **defend** your choices by articulating key trade-offs. 5. **Apply** this simple, systematic process end-to-end on realistic interview scenarios, iterating and refining based on feedback and reflection. 🗺️ Contents overview ```mermaid %%{init: { "flowchart": { "htmlLabels": true } }}%% flowchart TB %% Kickoff container at top subgraph Kickoff["**Kickoff**"] direction TB style Kickoff stroke-dasharray:5,5,fill:none,stroke-width:2px A[What is a system design interview really about?] B[Cracking the system] C[Alex Xu's 4 steps ] D[ABC Cheat Code] E[Design Example] end %% Gap Assessment container subgraph GapAssessment["**Gap Assessment**"] direction LR style GapAssessment stroke-dasharray:5,5,fill:none,stroke-width:2px GA2[Try sample solved interviews and compare your results] GA1[Learn/refresh terms and building blocks] end %% Personal Plan container subgraph PersonalPlan["**Personal Learning Plan**"] direction LR style PersonalPlan stroke-dasharray:5,5,fill:none,stroke-width:2px %% use href to point both to Personal Plan header PP1[Harness your personal strengths in the learning process] PP2[Shortcuts?] end %% Learning Loop container subgraph LearningLoop["**Learning Loop**"] direction LR style LearningLoop stroke-dasharray:5,5,fill:none,stroke-width:2px %% use href to point both to Learning Loop header GapAnalysis["Goal"] LearnTry["Learn / Solve / See Solutions"] Test["Check"] Assess["Assess Gaps"] end %% Container flow Kickoff --> GapAssessment GapAssessment --> PersonalPlan PersonalPlan --> LearningLoop %% Internal flows A --> B B --> C C --> D D --> E E --> C GA1 --> GA2 GA2 --> GA1 PP1 --> PP2 PP2 --> PP1 GapAnalysis --> LearnTry --> Test --> Assess --> GapAnalysis %% Style nodes style A fill:#FFCCCC,stroke:#CC0000,stroke-width:4px,rx:6,ry:6 style B fill:#FFD580,stroke:#AA6600,stroke-width:4px,rx:6,ry:6 style C fill:#CCFFCC,stroke:#009900,stroke-width:4px,rx:6,ry:6 style D fill:#E6E6FA,stroke:#6A5ACD,stroke-width:4px,rx:6,ry:6 style E fill:#FFF0F5,stroke:#993366,stroke-width:4px,rx:6,ry:6 style GA1 fill:#FFFACD,stroke:#B8860B,stroke-width:4px,rx:6,ry:6 style GA2 fill:#FFFACD,stroke:#B8860B,stroke-width:4px,rx:6,ry:6 style PP1 fill:#E6E6FA,stroke:#6A5ACD,stroke-width:4px,rx:6,ry:6 style PP2 fill:#E6E6FA,stroke:#6A5ACD,stroke-width:4px,rx:6,ry:6 style GapAnalysis fill:#FFE4E1,stroke:#CC0000,stroke-width:4px,rx:6,ry:6 style LearnTry fill:#FFFACD,stroke:#B8860B,stroke-width:4px,rx:6,ry:6 style Test fill:#F0FFF0,stroke:#009900,stroke-width:4px,rx:6,ry:6 style Assess fill:#FFF0F5,stroke:#993366,stroke-width:4px,rx:6,ry:6 ``` 🗺️ Table of Contents - [System Design Interview Study Guide](#system-design-interview-study-guide) - [Understand What a System Design Interview Is *Really* About](#understand-what-a-system-design-interview-is-really-about) - [Cracking the system](#cracking-the-system) - [A Strategic Framework for System Design Interview Preparation](#a-strategic-framework-for-system-design-interview-preparation) - [Interviewer's perspective.](#interviewers-perspective) - [Interviewer's Goals in System Design Interview](#interviewers-goals-in-system-design-interview) - [Alex Xu's four-phase framework for the system design interview](#alex-xus-four-phase-framework-for-the-system-design-interview) - [From Insight to Interview Mastery](#from-insight-to-interview-mastery) - [Critical Behaviors in the Interview Room](#critical-behaviors-in-the-interview-room) - [✅ ABC Cheat Codes - A way to memorize during the interview](#-abc-cheat-codes---a-way-to-memorize-during-the-interview) - [🔁 Interview ABC Loop](#-interview-abc-loop) - [🎯 ABC for Preparation](#-abc-for-preparation) - [🗣️ ABC Dialogue Loop](#️-abc--dialogue-loop) - [🧠 ABC - Thinking Process](#-abc---thinking-process) - [Phase 1: Understand the Problem \& Establish Design Scope](#phase-1-understand-the-problem--establish-design-scope) - [🎯 Interviewer's Goal](#-interviewers-goal) - [✅ Candidate's Strategy](#-candidates-strategy) - [🧭 Phase one Ask ABC - Ask wide open questions on the below subjects:](#-phase-one-ask-abc---ask-wide-open-questions-on-the-below-subjects) - [🔍 Example Dialogue (Pastebin)](#-example-dialogue-pastebin) - [🧭 For more examples of the scoping dialogue](#-for-more-examples-of-the-scoping-dialogue) - [🧭 Phase one Breakdown ABC - Brief the requirements with breakdown at mind:](#-phase-one-breakdown-abc---brief-the-requirements-with-breakdown-at-mind) - [🔍 Example Breakdown (Pastebin)](#-example-breakdown-pastebin) - [Phase 2: Propose a High-Level Design \& Get Buy-In](#phase-2-propose-a-high-level-design--get-buy-in) - [🎯 Interviewer's Goal](#-interviewers-goal-1) - [🛠️ Candidate's Strategy](#️-candidates-strategy) - [How to create the high level design](#how-to-create-the-high-level-design) - [Optional: use cases --\> Sequence diagram](#optional-use-cases-----sequence-diagram) - [Important: Actually we can use mermaid to draw the sequence diagram, maybe even in the interview room.](#important-actually-we-can-use-mermaid-to-draw-the-sequence-diagram-maybe-even-in-the-interview-room) - [Background tasks](#background-tasks) - [🧭 Phase two ABC - Propose a high-level design](#-phase-two-abc---propose-a-high-level-design) - [Block diagram](#block-diagram) - [Get buy-in](#get-buy-in) - [Phase 2.5: After Gaining Buy-In and Before the Deep Dive](#phase-25-after-gaining-buy-in-and-before-the-deep-dive) - [🎯 Interviewer’s Goal: **Decide What’s Next**](#-interviewers-goal-decide-whats-next) - [✅ Candidate’s Strategy: **Steer the Conversation Strategically**](#-candidates-strategy-steer-the-conversation-strategically) - [Phase 3: Deep Dive into Key Components](#phase-3-deep-dive-into-key-components) - [🎯 Interviewer's Goal](#--interviewers-goal) - [✅ Candidate's Strategy](#-candidates-strategy-1) - [🧭 ABC Process for Phase 3](#-abc-process-for-phase-3) - [Phase 4: Wrap Up](#phase-4-wrap-up) - [🎯 Interviewer's Goal](#--interviewers-goal-1) - [✅ Candidate's Strategy](#-candidates-strategy-2) - [🧭 ABC Process for Phase 4](#-abc-process-for-phase-4) - [Gap Assessment](#gap-assessment) - [System design interview practice](#system-design-interview-practice) - [System design knowledge](#system-design-knowledge) - [Refresh Your knowledge](#refresh-your-knowledge) - [Personal Learning Plan](#personal-learning-plan) - [System design interview](#system-design-interview) - [Timeline matters](#timeline-matters) - [System design knowledge](#system-design-knowledge-1) - [Timeline matters](#timeline-matters-1) - [Learning Loop](#learning-loop) - [Repetition is the mother of all skills](#repetition-is-the-mother-of-all-skills) - [FAQ](#faq) - [Source(s) and further reading](#sources-and-further-reading) - [References](#references) ## Understand What a System Design Interview Is *Really* About No one can build a system from scratch in 45 minutes, but no one excepts it from you. The system design interview is a ceremony with per defined rules and **you can’t win the game if you don’t understand the rules of the game**. Many interviewees fail the system design interview—not for lack of technical knowledge, or preparation but for misunderstanding what it's **really** about. Many candidates focus on memorizing architectures instead of engaging in a collaborative design **discussion**. In reality, interviewers want to see how you **lead** a targeted conversation to solve a **scoped problem**, not how fast you can sketch an entire production system. --- > *A well-structured system design interview isn't about blurting out the “right” design—it's about owning the conversation. > Rather than simply answering, you must lead: ask clarifying questions, listen to sub text, expose hidden constraints, and keep the interviewer engaged. > **Alex Xu's four-phase framework**, the **ABC interview loops** *below* are designed to help you to do just that.* --- # Cracking the system ## A Strategic Framework for System Design Interview Preparation --- 1. **Truly understand the interviewer's perspective.** The interviewer has a well-defined and consistent goal, to evaluate your ability. Therefore, their behavior during the interview tends to follow a certain **pattern**. This predictability allows candidates to anticipate and respond effectively to key behavioral cues. The best preparation will be to cover each and every pattern that your interviewer may be following. Therefore, the first step is to understand what the interviewer is really after then to cover those patterns and prepare for them. You should start here no matter your timeline. 2. **Learn & practice the 4 phases and the ABC cheat code.** The 4 phases and the ABC cheat code are designed to help you work in a systematic way to approach the interviewer patterns. The 4 phases by Alex Xu, as well as his list of do and don't do actions for the entire interview are structured way to target each of the interviewer goals in a dedicated "phase" of the interview. The ABC cheat code is an attempt to help you memorize it and help you work with the 4 phases under stress. 3. **Learn common solutions patterns.** The interview does not have a fixed flow, Think of it as a tree of interactions and make sure you cover all the most **important branches and leaves**. Many of those branch are relevant many design questions so you can look at it as 2 subjects. - Breaking down the design into sub problems. - Knowing the patterns and best practices for many sub problems. Don't worry - we will go into details in the next sections, but for now let's just keep in mind that truly understanding the interviewer's perspective is the first step in your preparation. --- ### Interviewer's perspective. Before talking about the solution - system design interview guide, let's understand the problem. The interviewer decides on your success in the interview, so let's reverse engineer the process of the system design interview from the interviewer point of view. Once we know what the interviewer is looking for, we can build a framework that will help us to prepare for the interview and to be more effective during the interview. The interviewer has a well-defined and consistent goal, to evaluate your ability in a systematic way and limited time and to compare it with other candidates. The limited time is a challenge for the interviewer, therefore the interviewer will use some shortcuts and triggers to create as many as possible evaluation points to evaluate the candidate's ability. Understand the interviewer's goals and triggers will help you to prepare for the interview and to be more effective during the interview. ### Interviewer's Goals in System Design Interview 1. **Evaluate Communication and Clarification Skills** During the *problem clarification* phase, the interviewer wants to see if the candidate can ask the right questions, uncover hidden constraints, and frame the problem with precision — just like they would in real-world ambiguity. For this reason, many interviews start with vague questions, by design. This is a trigger for evaluation point! You start answering without asking for more clarifications - **Boom!** You missed this goal from the interviewer's perspective. 2. **Assess High-Level Thinking and Tradeoff Awareness** In the *high-level design* phase, the goal is to understand how the candidate breaks a big system into components, balances trade-offs (e.g., latency vs. throughput), and considers scalability, availability, and reliability. High level design is an art not science, it meant to demonstrate the most important aspects of the system, but pay attention you and the interviewer might have different visions of the most important aspects. Again, this is a trigger! In order to excel in the high level design you need not only to know to break a problem into components but also uncover what is the interviewer looking for. 3. **Test Technical Depth and Practical Decision-Making** During the *deep dive*, the interviewer looks for depth — how well the candidate understands core components (e.g., databases, queues, caching), edge cases and whether they can explain and defend technical choices with enough details. Well, technical depth is a very broad topic, but there are some patterns and common practices that can help you do the deep dive. Knowing those patterns and common practices will help you to do the main part of the deep dive for many specific topics. 4. **Gauge Thought Process, Flexibility, and Maturity** Overall, the interviewer wants to see how you reflect, summarize trade-offs, suggest improvements, process feedback and work under pressure. 5. **Wrap-up** Towards the end of the interview, the interviewer might want to cover some more aspects from his original evaluations points on the above issues as well as other aspects that might be important to her such as gauge thought process, flexibility, and maturity. Understanding this can help you utilize the time at the end of the interview for your benefit since it is your last chance to improve on things you underperformed in the interview. ### Alex Xu's four-phase framework for the system design interview **Phase 1: Understand the Problem & Establish Design Scope** - **Drive the dialogue with questions.** Who are our users? What scale do we expect? Which features matter most? Every question you ask both narrows scope and demonstrates leadership. - **Confirm alignment.** Restate constraints and assumptions back (“So we need to handle 10 M DAUs with ≤100 ms P99 latency, correct?”) to lock in buy-in before diving deeper. **Phase 2: Propose a High-Level Design & Get Buy-In** - **Sketch components at a glance.** Draw clients, gateways, services, data stores—just enough to show your initial blueprint architecture. - **Engage actively.** Rather than declaring “Here's my design,” invite feedback: “Does this match what you had in mind?” If you sense any hesitation, ask “What part feels off?” to expose hidden expectations. - **Think out loud.** Communicate your thoughts and make sure if you need to do back of the envelope calculations to validate your initial design. **Phase 3: Deep Dive into Key Components** - **Select your hotspots.** Based on the feedback you got till here, usually you managed to get a good scope and direction for the deep dive, If this is not the case you need to try to ask more questions to get a better understanding of the problem. If after asking you still don't have a good direction, you can ask the interviewer for suggestions. Such as shall I talk about the main tradeoffs or focus on the areas with the most risk or complexity (e.g., caching, partitioning, queueing)? - **Try not to get into unnecessary details** Focus on proving your ability to design scalable systems. - **Validate continuously.** After each trade-off discussion, check back: “Does that satisfy our latency goals given the consistency needs?” **Phase 4: Wrap Up** - **Close the loop.** Ask, “Are there any areas you'd like me to revisit?” If there's lingering doubt, probe its root and address it on the spot. - **Recap of the design, and the feedback you got.** “We defined scope, sketched the system, deep-dived on X and Y... however we understood that we need to revisit..., ”. This is important mainly if you had some design options to choose from. - **Ask the interviewer's opinion about the next steps.** - **Propose other refinements if you have time.** e.g. Potential improvements, error cases, Operational issues (metrics). Note where you might shard more, add rate limiting, back-pressure, or introduce caching layers as the workload grows. *By taking ownership of the conversation—asking clarifying questions, seeking continuous buy-in, and guiding the interviewer through each phase—you transform a static Q&A into a **collaborative design session**. This is the approach that empowers you to steer a system design interview successfully.* --- ## From Insight to Interview Mastery ### Critical Behaviors in the Interview Room We will start with some simple principles that are direct output of understanding the Interviewer point of view. In the next sections we will build a framework that will help you to implement those principles in real interview scenarios, even under stress. --- 1. **Drive the Dialogue by Asking and Suggesting.** Unlike coding interviews where you follow prompts, here you're expected to take the lead. Propose directions (“Shall we dive in?”), offer ideas, solicit feedback (“Does this design match your expectations?”), and iterate in real time. You are not just allowed—but ***expected***—to guide the conversation. 2. **Scoping Is Your Responsibility.** You won't build an entire production system in 45 minutes; instead, you should lead the conversation to define a manageable subset that simulates real-life constraints without overwhelming detail. Define a narrow, realistic scope—“Which core features should we prioritize?”—so you don't drown in complexity. Think of this as a **negotiation** with the interviewer. You bring your own expertise, which might have some overlaps with the interviewer a priori vision of the `right solution`. Scoping is your chance to steer the discussion (aka interview) towards areas where your knowledge is strongest, while still aligning with what the interviewer considers a valid solution. 3. **Strive to Get Buy-In.** Remember, this is a *dialogue*, not a monologue. Don't *explain the solution*—seek agreement at each key stage: after defining the scope, after presenting your high-level design, and during any deep dives. Think of it as **selling** your approach. A successful “sale” solves a problem the “buyer” (interviewer) cares about. If you're not getting buy-in, try to identify the gap and adjust your proposal accordingly. --- ## ✅ ABC Cheat Codes - A way to memorize during the interview In addition to the 4 phases, Alex Xu's have a list of do's and don'ts in his book "System Design Interview - An Insider's Guide". It is hard to remember all of them under stress, so let's create a cheat code for remembering them, with the above key principles. Let's create a cheat code for remembering them, with the above key principles. Just think on it as triple ABC: We divided the key principles into 3 parts: - Preparation - Things to do **before** the interview - Dialogue Loop - How to **communicate** with the interviewer - Thinking Process - How to **think** about the problem during the interview ## 🔁 Interview ABC Loop ### 🎯 ABC for Preparation **A**dopt a Winning Mindset * Stay positive, **never give up** before or during the interview—resilience is often more important than getting everything right. * Come in with confidence and determination to **ask questions** and **listen to the interviewer**. **B**uild Step by Step, your knowledge and solutions * Learn the 4 phases and the ABC cheat code. * Jump in and start with the first question, to assess your gaps. * Learn the tree - learn key concepts and answers to the most common questions. * Practice, practice, & practice. **Come Prepared** * Study typical interview questions and scenarios. * Know the key concepts, patterns, and tools before you enter the room. ### 🗣️ ABC Dialogue Loop Use this simple loop to build clear, structured conversations, especially useful in interviews, meetings, or collaborative design sessions. This ABC loop is a good way to memorize a simple mantra that will help you to actually work according to the above 3 key principles we started with. 1. **Ask** - Start by **A**sking. 2. **Brief** - Rephrase what you heard to ensure mutual understanding and get **B**uy-in. 3. **Clarify** - Ask for any missing information or corrections, and **C**larify the next step / sell. Loop until the end of the interview. ```mermaid flowchart LR C[Clarify] --> A[Ask] --> B[Brief] --> C[Clarify] style A fill:#FFCCCC,stroke:#CC0000,stroke-width:4px,rx:6,ry:6 style B fill:#FFD580,stroke:#AA6600,stroke-width:4px,rx:6,ry:6 style C fill:#CCFFCC,stroke:#009900,stroke-width:4px,rx:6,ry:6 ``` ### 🧠 ABC - Thinking Process Communicate Your Thoughts Effectively **A**sk for guidance * Don't hesitate to request hints if you're stuck. * A good interviewer is a collaborator, not just an evaluator. **B**ounce ideas off the interviewer * Think out loud and share your directions, doubts, reasoning and suggestions. * Use the interviewer as a sounding board to refine your direction. **C**ommunicate continuously * **Narrate your thoughts**. * **Avoid** silent problem-solving. * **Verbalize your thought** process clearly, **even if it's still evolving**. # Phase 1: Understand the Problem & Establish Design Scope ### 🎯 Interviewer's Goal **Evaluate Communication and Clarification Skills** The interviewer wants to see if you can ask the right questions, uncover hidden constraints, and precisely frame the problem — just like in real-world ambiguous scenarios. ### ✅ Candidate's Strategy Ask clear, somewhat pre-defined open-ended questions that surface assumptions, constraints, and the essence of the system. Aim for high signal questions that map the system's shape without going deep into implementation yet. Ask about requirements regarding: Reliability, Security, Privacy, Scalability, Maintenance and Operational Aspects. ### 🧭 Phase one Ask ABC - Ask wide open questions on the below subjects: * *Ask* - "What are the main **users, use cases and main features** of the system?" (**A**ctors, **B**usiness Scenarios, **C**ore Features) * *Brief* So those are our main **A**ssumptions, **B**oundaries (scope), **C**onstraints ? Did I explained **MVP** (Minimum Viable Product) correctly? * *Clarify* **Any** important topics we need to talk about the problem scope for this phase **Before** we **Continue** ### 🔍 Example Dialogue (Pastebin) **Interviewer**: Design Pastebin.com. **Candidate**: Thanks. To clarify and understand the scope, may I start with a few quick questions? **Interviewer**: Yes, please. **Candidate**: What are the **main features, users, and use cases** of the system? **Interviewer**: Pastebin is a simple site to share plain text. Users paste content and get a short link to share. Pastebin includes anonymous users as well as logged in users. **Candidate**: Great. So **can we scope the problem to 2 main flows**: 1. User creates a paste and gets a link to share. 2. User accesses a paste using the link. **Interviewer**: Yes, that's a good start. **Candidate**: What are the **other** important topics we need to consider for the basic **MVP** functionality? **Interviewer**: Pastebin supports two types of users: * Anonymous users - who can create and share content without an account * Authenticated users - who can create content and customize their sharing links (e.g., custom URLs, expiration dates, access controls). **Candidate**: Understood. For this phase, can we **focus** on Anonymous users? **Interviewer**: You mean that we should ignore the requirements for authenticated users? **Candidate**: No, I want to **clarify**. I am suggesting and **asking** your confirmation - to be effective I think we can start dealing with the main flows of the system. We will bear in mind the authenticated requirement and **deal with them later on**. **Interviewer**: Later on in the interview, or later on in the product life cycle? **Candidate**: Both. Let me explain. Let's for now assume that we will use REST API to write and read the content. We can have 2 different api endpoints for anonymous and authenticated users, and we can have shared functions that can be used by both. This way we can **focus** on the main flows of the system. On the other hand we can talk about the authenticated requirements now, such as [OAuth 2.0](https://oauth.net/2/) of [JWT](https://jwt.io/). **Interviewer**: Ok. **Candidate**: So for now, is it ok to focus on the anonymous users? **Interviewer**: Yes. **Candidate**: What are the *other* important topics we need to consider? What about traffic assumptions / load? **Interviewer**: 10M writes per month, 100M reads. **Candidate**: Got it. High read-to-write ratio. Any *other* specific requirements, assumptions or constraints, data flows? **Interviewer**: We do track monthly stats. Links can have optional expiration. Expired pastes are auto-deleted. **Candidate**: Is there **anything more** we should discuss in terms of latency, availability, or other non-functional constraints? **Interviewer**: Reads should be low-latency. High availability is expected. **Candidate**: Cost efficiency, scaling and security matter, but I **suggest** to digest those in the next phases. **Interviewer**: Ok. **Candidate**: Thanks — that's clear and helps scope my design. Let's me summarize the scope as i understood it and the assumptions to make sure we are on the **same page**. **Interviewer**: Ok. ... As you can see the candidate is **leading** the conversation and **negotiating** the scope with the interviewer. He uses the `suggest` word to indicate that he is open for a dialog and he is asking for the interviewer's confirmation, and tries to keep the conversation according to the interviewer acceptable path. When the candidate faces an objections (e.g. authenticated users) he continues the negotiation while providing 2 options (e.g. now or later) while showing knowledge related to the requirements. This hints that scoping without this requirement is not for a lack of relevant knowledge but for focusing on the problem we deal with at this moment. The candidate asks many variations of `Anything else?` or `other?` to uncover more hidden requirements and assumptions. The candidate mentions scaling and security which are important in interviews but checks if it is ok to deal with those a bit later. There are a lot of **system considerations** that are important in interviews maybe the below cards will help you to remember them. But even if you don't remember them, you can still ask the interviewer for other requirements we need to consider.