System Design Interview: The Complete Practice Guide
A repeatable framework for system design interviews: requirement gathering, capacity estimation, API design, data model, high-level architecture and bottlenecks.
The framework that never fails
System design interviews are not a pop quiz on specific products — they are an evaluation of how you break down an open-ended problem. Interviewers reward a clear, repeatable structure over brilliant one-off ideas. Use this sequence every time:
- Clarify requirements and scope (features in vs. out)
- Estimate scale: QPS, storage, bandwidth
- Design the API surface
- Design the data model and storage choices
- Sketch the high-level architecture
- Identify bottlenecks and how to address them
Capacity estimation without fear
Interviewers do not expect exact numbers — they expect defensible math. A useful rule set: a single server handles a few thousand requests per second; a database in the tens of thousands of reads per second with caching; a CDN absorbs most read traffic. Estimate QPS by assuming 10% of daily active users are online at peak, and each performs a handful of requests.
// Quick estimate for a news feed
DAU = 10,000,000
peak_users = DAU * 0.10 // 1,000,000 concurrent
requests_per_user_per_day = 50
avg_qps = DAU * requests / 86,400 // ~5,800 req/s
peak_qps = avg_qps * 5 // ~29,000 req/sStorage decisions
Choose storage from the access pattern, not the trend. Relational databases win when data is strongly relational and queries are known ahead of time. A document store is comfortable for schemaless, nested content. A key-value store or cache shines for lookups at massive scale. Say your choice and justify it in one sentence.
- Relational (Postgres): transactions, joins, structured relational data
- Document (MongoDB): flexible schemas, nested objects, fast iteration
- Key-value / cache (Redis): hot reads, leaderboards, sessions
- Blob / object storage (S3): media, uploads, cold archives
The bottlenecks that get you the offer
The final phase of every answer is where candidates are separated: naming the two or three places the system breaks under load. Practice pointing at each one explicitly — "the database is the bottleneck, so I add a read cache and a write queue" — rather than listing generic scalability features.
- Database read pressure → add a cache layer, read replicas
- Write spikes → introduce an async queue and worker pool
- Single point of failure → replicate services across zones
- Hot partition on one key → shard by a high-cardinality field
Practice makes the framework automatic
Run the framework against ten classic questions — a URL shortener, a news feed, a chat system, a rate limiter, a notification service — until the structure comes automatically. Hiring teams want engineers who can reason from first principles. Rehearsed structure is exactly how you demonstrate that under time pressure.