About Us Contact Us Write for Us Advertise
Home > System Design > How to Approach Any System Design Interview (The 6-Step Framework)
System Design

How to Approach Any System Design Interview (The 6-Step Framework)

A repeatable 6-step framework for system design interviews: clarify requirements, estimate scale, define the API, model the data, draw the high-level design, then deep-dive into bottlenecks and failures. Works for any question, from URL shortener to designing Uber.

Shiv Pandey
Shiv Pandey
Sep 22, 2026 | 8 views
How to Approach Any System Design Interview (The 6-Step Framework)

🟠 Senior · interview-focused

A system design interview feels terrifying because it's open-ended — "Design YouTube" could go a thousand directions, and the blank whiteboard just stares back. Here's the secret the people who pass know: you're not being tested on whether you've memorised YouTube's architecture. You're being tested on whether you can drive a vague problem to a working design, out loud, making sensible trade-offs. This article gives you the exact 6-step framework to do that — the same one for every question — so you never freeze at the whiteboard again. If you're brand new, read scaling from zero to millions first; it gives you the building blocks this framework arranges.

The mindset: a system design interview is a conversation, not an exam. The interviewer is your teammate designing with you. Think out loud, ask questions, state assumptions, and drive. Silence is the only real failure.

The 6-step framework (memorise this order)

Step What you do Time (45-min interview)
1. Requirements Clarify what to build (and what not to) ~5 min
2. Estimation Scale: users, QPS, storage ~5 min
3. API Define the endpoints (the contract) ~5 min
4. Data model What you store + which database ~5 min
5. High-level design Draw the boxes and arrows ~10 min
6. Deep dive + bottlenecks Scale it, handle failure, discuss trade-offs ~10 min

Step 1 — Clarify requirements (never skip this)

Jumping straight to drawing boxes is the #1 way to fail. First, pin down the scope. There are two kinds:

Functional requirements — what the system does. For "design Twitter": can users post tweets? follow others? see a timeline? like/retweet? Pick the 2–3 core features to focus on and explicitly park the rest ("I'll leave DMs out of scope for now — okay?").

Non-functional requirements — the qualities that shape the architecture: how many users? read-heavy or write-heavy? how important is consistency vs availability? latency expectations? These drive every later decision, so ask them now:

  • Scale — "Roughly how many daily active users are we designing for?"
  • Read/write ratio — "Is this read-heavy like a news feed, or write-heavy?"
  • Consistency — "If two people see slightly different data for a second, is that okay?" (This is the CAP theorem question in disguise.)

Why it matters: designing for 1,000 users and 1 billion users are completely different systems. Getting the scale on the table now stops you from over- or under-engineering.

Step 2 — Back-of-the-envelope estimation

You don't need exact numbers — you need the right order of magnitude, because it tells you whether one database is fine or you need 100. Do the quick math out loud:

// Example: 100M daily active users, each posts 2 tweets/day
writes/day  = 100M x 2      = 200M tweets/day
writes/sec  = 200M / 86400  ≈ 2,300 writes/sec (avg)
peak        ≈ 2x avg        ≈ 4,600 writes/sec
reads       = 100x writes (read-heavy) ≈ 230k reads/sec
storage/day = 200M x 300 bytes ≈ 60 GB/day ≈ 21 TB/year

Now you know: 230k reads/sec means you need caching and read replicas; 21 TB/year means you'll shard. The numbers justify your architecture. Keep the standard latency numbers handy, and see estimation for the full method.

Step 3 — Define the API

Nail the contract between client and server before designing internals. It forces clarity about what the system actually offers:

POST /tweets            { text }            -> { tweetId }
GET  /users/{id}/feed   ?cursor=...          -> { tweets[], nextCursor }
POST /users/{id}/follow { targetUserId }     -> 200 OK

Notice the cursor for pagination (never "page numbers" at scale) and clean resource naming. REST is the safe default; mention gRPC or GraphQL if the problem calls for it.

Step 4 — Data model

What are the core entities, and how do they relate? For Twitter: User, Tweet, Follow. Sketch the tables/collections and their keys. Then make the big call: SQL or NoSQL? Justify it — "relationships and transactions matter here, so relational," or "massive write volume with simple lookups, so a wide-column NoSQL store." This is also where you decide your sharding key if scale demands it.

Step 5 — High-level design (draw the boxes)

Now, and only now, draw the architecture. Start simple and let the requirements pull in each component. A typical read-heavy system:

Client LoadBalancer Appservers Cache Queue Database+ replicas Workers

Walk the interviewer through a request: "A read hits the load balancer, goes to an app server, which checks the cache first, falling back to a read replica. A write goes to the primary DB and drops a job on the queue for slow work like fanning out to followers." Narrate the flow — that's what scores.

Step 6 — Deep dive & bottlenecks

The interviewer will now zoom in: "How does the timeline actually work at this scale?" or "What happens when the cache dies?" This is where senior candidates separate themselves. Show you can:

  • Find the bottleneck — "230k reads/sec will crush the DB, so the timeline must be cached / precomputed."
  • Handle failure — "If a cache node dies, reads fall back to the DB; we use consistent hashing so only a fraction of keys move." (See resilience patterns.)
  • State trade-offs out loud — "Fan-out-on-write makes reads fast but writes expensive for celebrities with 100M followers, so we use a hybrid." There's rarely one right answer; naming the trade-off is the answer.

What interviewers are actually scoring

Not the "correct" design (there isn't one). They're scoring: Did you clarify before diving in? Did you communicate and think out loud? Did you justify decisions with the requirements/numbers? Did you drive the conversation instead of waiting to be led? Did you handle trade-offs and failure like someone who's run real systems?

The mistakes that fail people

  • Drawing boxes before clarifying requirements — you'll design the wrong thing.
  • Going silent — the interviewer can't score thoughts they can't hear.
  • Over-engineering — don't shard a system for 1,000 users. Match complexity to scale.
  • Ignoring the interviewer's hints — "what if this fails?" is a nudge, not small talk. Follow it.
  • No numbers — "we'll add caching" is weak; "230k reads/sec needs caching" is senior.

Practice this framework on a real problem

Reading it isn't enough — run the 6 steps end to end on one design until it's muscle memory. The perfect starter is designing a URL shortener: small enough to finish, rich enough to touch every step. Then try a news feed.

Here's what changed everything for me: I stopped trying to know the answer and started trusting the process. The first time I hit "Design Uber" cold, I didn't panic — I just said "let me start with requirements," and the framework carried me. Ten minutes in, a design I'd never seen before was taking shape on the board, and the interviewer was nodding. That's the whole trick: you don't memorise a thousand systems, you memorise one framework and apply it live. Drill it on three or four designs, always out loud, always with numbers, and you'll walk in calm — because whatever they ask, you already know your first sentence. And that confidence is exactly what they're hiring for. You've got this.

What to read next

← Scaling to millions · Design a URL shortener →

Related Articles

How to Approach a Low-Level Design (LLD) Interview: The Framework
System Design

How to Approach a Low-Level Design (LLD) Interview: The Framework

System Design: The Complete Guide (HLD, LLD & Interview Prep)
System Design

System Design: The Complete Guide (HLD, LLD & Interview Prep)

Scaling from Zero to Millions of Users: A Beginner’s Guide
System Design

Scaling from Zero to Millions of Users: A Beginner’s Guide