1. The System Design Interview Framework

Use a consistent framework to avoid jumping into architecture too early.

Step 1 — Clarify requirements (5–10 minutes)

  • Functional: What must users be able to do?
  • Non-functional: What latency, availability, consistency, durability, security, and scale are required?
  • Scope: What is explicitly out of scope?
  • Actors: Who uses the system, and what permissions do they have?

Step 2 — Estimate scale (5 minutes)

  • Daily active users and peak concurrent users.
  • Requests per second, read/write ratio, and peak-to-average ratio.
  • Storage growth, retention, bandwidth, and cache requirements.

Step 3 — Define APIs and data models (5–10 minutes)

  • Identify primary entities and relationships.
  • Define core read/write operations.
  • Specify pagination, idempotency, authorization, and error behavior.

Step 4 — Draw the high-level architecture (10 minutes)

  • Clients, DNS, CDN, load balancer, application services, caches, databases, queues, object storage, and external dependencies.
  • Explain why each component exists.

Step 5 — Deep dive into critical paths (15–20 minutes)

  • Select the hardest or most important flows.
  • Trace requests through the system.
  • Discuss bottlenecks, consistency, concurrency, retries, and failure handling.

Step 6 — Cover reliability and trade-offs (5–10 minutes)

  • Identify single points of failure.
  • Explain replication, recovery, observability, security, and capacity limits.
  • State what you would improve first as traffic grows.

Interview rule: explain the simplest design that satisfies the requirements, then evolve it when a specific constraint justifies added complexity.

Key Takeaways
  • Clarify requirements before choosing technologies.
  • Quantify scale rather than saying the system must handle high traffic.
  • Explain the reasoning behind each architectural component.
  • Trace at least one write path and one read path end to end.
  • Discuss failure scenarios and trade-offs explicitly.