A system design interview framework is a repeatable order of steps that keeps you from drawing boxes before you know what problem you are solving. The one that works for most prompts is: clarify requirements, estimate scale, define the API, sketch the data model, draw a high-level design, go deep on two or three components, discuss trade-offs, and wrap up. Interviewers are grading how you reason under ambiguity, so a visible structure is half the battle.
Why you need a system design interview framework
Open-ended prompts like "design a URL shortener" or "design a news feed" have no single right answer. Without structure, candidates tend to fall into one of three traps:
- Jumping straight into technology choices ("we'll use Kafka and Cassandra") before knowing the read/write ratio.
- Spending twenty minutes on requirements and never reaching the interesting parts.
- Designing a perfect system for a problem the interviewer did not ask about.
A framework fixes all three. It gives you checkpoints, lets the interviewer see where you are, and makes it easy for them to redirect you. It also buys you thinking time: while you write down requirements, your brain is already sketching the architecture.
The 8 steps at a glance
| Step | Goal | Rough time (45-min interview) |
|---|---|---|
| 1. Requirements | Agree on functional and non-functional scope | 5 min |
| 2. Estimates | Size traffic, storage, and bandwidth | 3-5 min |
| 3. API | Define the contract clients use | 3-5 min |
| 4. Data model | Choose entities, keys, and storage type | 5 min |
| 5. High-level design | Draw the end-to-end request path | 8-10 min |
| 6. Deep dives | Go deep on the hardest components | 10-12 min |
| 7. Trade-offs | Name what you gave up and why | 3-5 min |
| 8. Wrap-up | Summarize, list bottlenecks and next steps | 2 min |
The timings are illustrative. Some interviewers want to skip estimates; others want to spend the whole session on one deep dive. Treat the table as a default, not a script.
Step 1: Clarify functional and non-functional requirements
Start by restating the problem and listing what the system must do. For a URL shortener, functional requirements might be: create a short link, redirect a short link, optionally set an expiry, and view click counts.
Then list non-functional requirements, which drive almost every architectural decision:
- Scale - how many users, how many requests per second?
- Latency - is this user-facing (tens of milliseconds) or a background job?
- Availability vs consistency - can a user briefly see stale data?
- Durability - is losing a write acceptable?
- Read/write ratio - read-heavy systems want caches; write-heavy ones want partitioning.
Explicitly mark what is out of scope. "I'll skip authentication and analytics dashboards unless you'd like me to cover them" shows judgment and protects your time.
Step 2: Back-of-the-envelope estimates
Estimates exist to justify design choices, not to impress with arithmetic. Round aggressively and say your assumptions out loud.
Assumptions (illustrative):
100M new short links per month
Read:write ratio = 100:1
Writes: 100M / (30 * 86,400 s) ~= 40 writes/s
Reads: 40 * 100 ~= 4,000 reads/s
Storage per link: ~500 bytes
5 years: 100M * 12 * 5 * 500 B ~= 3 TB
From these numbers you can already say something useful: reads dominate, so caching matters; 3 TB fits on a small cluster, so sharding is about throughput and availability more than raw capacity. If you are shaky on the vocabulary here, the guides on latency and throughput are a good refresher.
Step 3: Define the API
Write the two to four endpoints that matter. Keep it concrete: method, path, inputs, outputs, and error cases.
POST /v1/links { longUrl, expiresAt? } -> 201 { code, shortUrl }
GET /{code} -> 301/302 Location: longUrl
GET /v1/links/{code}/stats -> 200 { clicks, createdAt }
This step forces decisions early: Do you need idempotency keys on create? Is the redirect a 301 (cacheable by browsers) or a 302 (lets you count every click)? For deeper patterns, see API design.
Step 4: Sketch the data model
Name the core entities, their primary keys, and the access patterns. Access patterns decide the store, not the other way around.
For the shortener, one table keyed by code is enough: lookups are by exact key, there are no joins, and the data is easy to partition. That points toward a key-value store or a simple relational table with the code as the primary key. Mention indexes you will need and whether data is append-only or frequently updated.
Step 5: Draw the high-level design
Now draw the request path end to end: client, DNS/CDN, load balancer, stateless application servers, cache, database, and any async components like queues or workers. Walk through one write and one read out loud.
Keep it simple first. A working, boring design you can defend beats a clever one you cannot explain. Once the path is on the board, ask the interviewer which part they would like to explore.
Step 6: Deep dives on the hardest parts
This is where senior candidates separate themselves. Pick the two or three components with the most risk and go deep. Common deep-dive topics include:
- Key generation - hashing vs a counter vs pre-generated key ranges, and how to avoid collisions.
- Caching - what to cache, eviction policy, and how to handle hot keys. See Caching strategies explained.
- Scaling the database - replication for reads and sharding for writes. See Database sharding explained.
- Failure handling - what happens when a cache node, a shard, or a whole region disappears.
For each, state the problem, list two or three options, pick one, and explain why.
Step 7: Discuss trade-offs explicitly
Every design gives something up. Say it before the interviewer asks. Examples:
- "I chose eventual consistency for click counts because users will not notice a few seconds of lag, and it lets us batch writes."
- "A 302 redirect costs us more traffic, but we need it for accurate analytics."
- "Pre-generating keys adds an extra service, but it removes coordination from the write path."
Tying trade-offs back to the non-functional requirements from Step 1 shows the design is intentional. The CAP theorem is often the vocabulary interviewers expect here.
Step 8: Wrap up
In the last couple of minutes, summarize the design in three sentences, name the most likely bottleneck, and say what you would do next with more time: monitoring and alerting, multi-region deployment, abuse prevention, or cost optimization. Ending cleanly leaves a much better impression than running out of time mid-sentence.
Common mistakes in system design interviews
- Treating the interviewer as an examiner rather than a collaborator. Ask questions and check in.
- Naming products instead of concepts. "A log-based message broker" is a better answer than just "Kafka" because it shows you know why.
- Ignoring failure modes. Every box on the diagram can fail; say what happens when it does.
- Over-precise estimates. Nobody needs four significant figures.
Key takeaways
- Follow a fixed order: requirements, estimates, API, data model, high-level design, deep dives, trade-offs, wrap-up.
- Non-functional requirements drive most architectural decisions, so pin them down first.
- Use estimates to justify choices like caching or sharding, not as a math test.
- Spend the most time on deep dives into the riskiest components.
- State trade-offs proactively and connect them to the requirements.
Frequently asked questions
How long should each step of a system design interview take?
In a typical 45-minute session, aim for about 10 minutes on requirements and estimates, 10 on API, data model, and high-level design, 15 to 20 on deep dives, and a few minutes on trade-offs and wrap-up. Adjust based on interviewer cues; if they push you toward a specific component, follow them.
Do I need to do back-of-the-envelope calculations?
Usually yes, but keep them short and rounded. Their purpose is to justify decisions such as adding a cache or sharding a database. If the interviewer says to skip them, move on without argument.
What if I do not know a specific technology the interviewer mentions?
Say so and reason from first principles. Describe the properties you need, such as ordered durable logs or low-latency key lookups, and explain how you would evaluate options. Interviewers value clear reasoning over product trivia.
How is a senior system design interview different?
Senior candidates are expected to drive the conversation, identify the hardest problems themselves, and discuss operational concerns like monitoring, deployment, and failure recovery. The framework is the same; the depth of the deep dives and trade-off discussion is what changes.