Skip to main content

System Design Interview Framework

Interviewers care more about how you think than the final architecture. Structure is everything.


The RADIO Framework

StepTimeGoal
Requirements5 minDefine scope & constraints
API Design5 minDefine the interface
Data Model5 minDefine storage schema
Initial Design5–10 minHigh-level diagram
Optimizations10–15 minDeep dives on bottlenecks

Step 1 — Requirements Clarification (5 min)

Never start designing without asking these questions.

Functional Requirements

  • What are the core features? (List top 3)
  • What's out of scope?
  • Who are the users?

Non-Functional Requirements

  • Scale: DAU, QPS, data volume
  • Latency target (p99 < 200ms?)
  • Availability (99.9%, 99.99%?)
  • Consistency level (strong, eventual?)
  • Geo-distribution needed?
  • Read/write ratio

Good Questions to Ask

- "How many daily active users should I design for?"
- "Is this read-heavy or write-heavy?"
- "Do we need to support mobile clients?"
- "What's the acceptable latency for the core operation?"
- "Do we need global distribution?"
- "How long should data be retained?"

Step 2 — API Design (5 min)

Define the public interface before the internals.

REST Example

POST   /v1/posts              - Create a post
GET /v1/posts/{id} - Get a post
GET /v1/users/{id}/feed - Get user feed
PUT /v1/posts/{id} - Update a post
DELETE /v1/posts/{id} - Delete a post

Key Decisions

  • Request/response shape
  • Authentication mechanism (JWT, OAuth)
  • Pagination strategy (cursor vs offset)
  • Rate limiting boundaries

Step 3 — Data Model (5 min)

Define entities and relationships before choosing storage.

User     { id, name, email, created_at }
Post { id, user_id, content, created_at }
Follow { follower_id, followee_id, created_at }

Storage Selection Guide

Use CaseStorage Choice
Structured relational dataPostgreSQL / MySQL
Unstructured / flexible schemaMongoDB
Key-value / cacheRedis
Time-series dataInfluxDB / TimescaleDB
Full-text searchElasticsearch
Large files / blobsS3 / GCS
Graph relationshipsNeo4j
Column-family (wide table)Cassandra / HBase

Step 4 — High-Level Design (5–10 min)

Draw boxes and arrows. Keep it simple at first.

Client → Load Balancer → API Gateway → Service → DB

Cache (Redis)

Message Queue (Kafka)

Worker Service

Always Include

  • Load balancer (never one server)
  • Database (specify type)
  • Cache layer
  • CDN (if media/static assets involved)
  • Async processing (if writes are heavy)

Step 5 — Deep Dive / Optimizations (10–15 min)

The interviewer will guide this. Common deep dives:

ProblemSolution to Discuss
High read QPSCaching, read replicas, CDN
High write QPSSharding, write-ahead log, async queue
Hotspot (celebrity user)Special handling, fan-out-on-read
Large payloadsChunking, object storage, presigned URLs
Real-time requirementsWebSocket, SSE, long polling
Exactly-once semanticsIdempotency keys, deduplication
Long-running jobsJob queue, progress API, async callbacks

Communication Tips

Do

  • Think out loud at all times
  • State assumptions explicitly
  • Estimate before architecting
  • Mention trade-offs for every decision
  • Ask "does this align with what you're looking for?"

Don't

  • Jump to solutions before requirements
  • Over-engineer the first design
  • Stay silent while thinking
  • Ignore non-functional requirements
  • Forget to mention failure scenarios

Common Pitfalls

PitfallFix
Designing a single-server systemAlways start with load balancer + multiple instances
Ignoring failure modesAsk "what happens if this component fails?"
No capacity estimationDo rough math before picking technology
Picking tech without justification"I choose Kafka here because we need durable, ordered message delivery at scale"
Skipping the data modelSchema design surfaces hidden complexity early
Not discussing consistency trade-offsState your consistency model explicitly

Sample Opening Structure

"Let me start by clarifying requirements. Based on what you said, the core features are: [X, Y, Z]. I'll treat [A, B] as out of scope for now. For scale, I'll assume 10M DAU, with a 10:1 read/write ratio. Let me do a quick estimation before we dive into the design..."


Interview Questions

  1. How would you approach designing a system you've never built before?
  2. If an interviewer asks you to "design Twitter," what are the first 5 questions you ask?
  3. How do you decide whether to use SQL or NoSQL for a new system?
  4. How do you handle the trade-off between consistency and availability in your design?
  5. Walk me through how you'd estimate QPS for a feature that 1% of 100M users will use daily.