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.