Why System Design Interviews Are Hard
Unlike coding rounds where a problem has a correct answer, system design is deliberately open-ended. Interviewers are not checking whether you give the right answer — they are evaluating your thought process, your ability to handle ambiguity, and whether you can articulate trade-offs like a senior engineer.
Most candidates fail not because they lack knowledge, but because they dump everything they know without structure. The interviewer sits through a monologue about databases, then microservices, then caching — with no thread connecting them. Structure is the unlock.
The 6-Step Framework
Every successful system design interview follows roughly the same shape. Internalise this and you will never stare blankly at a whiteboard again:
- Clarify requirements (functional & non-functional)
- Capacity estimation (scale, storage, bandwidth)
- API design
- Data model & database selection
- High-level architecture
- Deep dive into 1–2 components + trade-off discussion
Spend the first 5 minutes on steps 1–3 before drawing anything. Rushing to the diagram is the #1 mistake.
Step 1 — Clarify Requirements (5 minutes)
Ask questions. Write the answers on the board. This is not wasted time — it signals maturity and prevents you from designing the wrong system.
Functional requirements
- What are the core user actions? (e.g., for a URL shortener: shorten a URL, redirect to original URL)
- Are there secondary features? (analytics, expiry, custom slugs)
- Who are the users — consumers, businesses, internal?
Non-functional requirements
- Scale: How many DAUs (daily active users)? Read/write ratio?
- Availability: 99.9% or 99.99%? What is the tolerable downtime per year?
- Latency: Is the p99 latency <100ms? <500ms?
- Consistency: Is strong consistency needed or is eventual consistency acceptable?
- Durability: What happens if we lose data?
Step 2 — Capacity Estimation (3 minutes)
Back-of-envelope numbers anchor your design decisions. You do not need to be precise — you need to be in the right order of magnitude.
Key numbers every engineer should memorise
- 1M requests/day ≈ 12 requests/second
- 100M requests/day ≈ 1,150 requests/second
- Average tweet/post ≈ 300 bytes; average photo ≈ 300 KB
- SSD read ≈ 1 GB/s; HDD ≈ 100 MB/s; network ≈ 10 Gbps on modern servers
Example: "10M DAUs each viewing 20 feed items/day = 200M read requests/day ≈ 2,300 reads/second. If each item is 1 KB, that's ~2.3 GB/s throughput — we definitely need caching."
Step 3 — API Design
Define 3–5 core APIs before jumping to the architecture. REST or gRPC — pick one and justify it.
Example for a Twitter-like feed:
POST /tweets— create a tweetGET /feed?userId=X&cursor=Y— paginated home feedPOST /follows— follow a user
Mentioning pagination, cursor-based vs. offset-based, and rate limiting here signals experience.
Step 4 — Data Model & Database Selection
SQL vs NoSQL decision tree
- Need ACID transactions? → SQL (Postgres, MySQL)
- Need horizontal scale with flexible schema? → NoSQL (Cassandra, DynamoDB, MongoDB)
- Need fast lookups by a single key at massive scale? → Key-Value store (Redis, DynamoDB)
- Need full-text search? → Elasticsearch
- Storing social graphs? → Graph DB (Neo4j) or adjacency list in SQL
- Time-series data (metrics, logs)? → InfluxDB, TimescaleDB
State your access patterns first, then choose the database. Never the other way around.
Step 5 — High-Level Design
Draw a diagram with: clients → load balancer → application servers → cache → database. Then specialise it for your problem.
Components to mention when relevant
- CDN — for static assets or geographically distributed reads
- Message queue (Kafka, RabbitMQ) — for async processing, decoupling services
- Cache (Redis) — for hot data, session storage, rate limiting counters
- Object storage (S3) — for media, large blobs
- Search service (Elasticsearch) — for full-text or faceted search
Step 6 — Deep Dive & Trade-offs
This is where you show senior-level thinking. Pick the hardest component and go deep. Interviewers will probe — your job is to explain trade-offs, not to be right.
Common deep-dive topics
- Database sharding: horizontal vs vertical, shard key selection, hotspot problem, rebalancing
- Caching strategies: write-through vs write-back vs write-around, eviction (LRU/LFU), cache stampede
- CAP theorem: why you cannot have all three, which two your system prioritises and why
- Consistency patterns: leader-follower replication, eventual consistency, read-your-writes
- Rate limiting: token bucket vs sliding window, where to apply (API gateway vs app layer)
Must-Know System Design Topics
- Design a URL shortener (TinyURL)
- Design a social media feed (Twitter/Instagram)
- Design a rate limiter
- Design a distributed cache
- Design a notification system
- Design a ride-sharing app (Uber/Lyft)
- Design a video streaming platform (YouTube/Netflix)
- Design a chat application (WhatsApp/Slack)
Common Mistakes to Avoid
- Jumping to the diagram without clarifying requirements first
- Treating it like a monologue — the interviewer wants to collaborate, not spectate
- Saying "it depends" without completing the sentence — always state what it depends on and pick a direction
- Ignoring scale — design for the numbers you estimated, not for a startup with 100 users
- Over-engineering — don't add Kubernetes, 12 microservices and a message queue for a simple problem
- Never mentioning trade-offs — every choice has a downside; name it before the interviewer asks