Skip to content
SparkTime, home
System Design From Zero to Interview-Ready
Lessons
1 · System Design Foundations
2 · APIs and Communication
3 · Capacity Estimation
4 · Core Building Blocks
5 · Databases
6 · Distributed Systems
7 · Reliability and Operations
8 · Architecture and Security
9 · Interview Method and Foundation Case Studies
10 · Real-World Case Studies
11 · Large-Scale Case Studies
12 · Interview Readiness
Lesson 29 of 45

Lesson 29 · Interview Method and Foundation Case Studies

The System Design Interview Framework: A Repeatable Method for Any Problem

A practical, repeatable way to run a 45-minute system design interview: what interviewers typically evaluate, a 21-item checklist grouped into seven phases, a time plan, phrases for clarifying, estimating and stating trade-offs, how to handle hints and pushback, how SDE-1 and SDE-2 expectations differ, and a compact worked example.

On this page

Key takeaways

  • A system design interview checks how you reason: exploring the problem, designing step by step, going deep where it matters, weighing trade-offs and communicating clearly.
  • Use the same seven phases every time (Clarify, Estimate, Interface, Data, Baseline, Scale, Harden), expanded into a 21-item checklist.
  • Spend roughly the first quarter of the time on requirements, estimates, APIs and data, and keep at least a third for scaling and deep dives.
  • State every important decision as a trade-off: what you chose, what it costs, and why that cost is acceptable here.
  • SDE-1 candidates should be clear and correct on fundamentals; SDE-2 candidates should also drive the discussion and go deep on data, consistency and failure.

Most people who struggle in system design interviews do not lack knowledge. They know what a cache is and what sharding means. What goes wrong is structure: they start drawing before they understand the problem, spend twenty minutes on a part the interviewer does not care about, forget to estimate, never mention failures, and run out of time before saying what their design actually is.

This article gives you a structure you can rely on under pressure. It is the seven-phase method from article 01, expanded into a 21-item checklist with a time plan, the phrases that make your reasoning visible, and a clear picture of what changes between SDE-1 and SDE-2 rounds. Every case study that follows uses it.

What you will learn

#
  • What system design interviewers typically evaluate.
  • The 21-item checklist, grouped into the seven phases.
  • A time plan for 45-minute and 60-minute interviews.
  • Phrases for clarifying, estimating, deciding and summarising.
  • How to handle hints, pushback and getting stuck.
  • How SDE-1 and SDE-2 expectations differ.
  • A compact worked example: a game leaderboard.
  • How to practise.

What interviewers typically evaluate

#

Rubrics differ between companies and interviewers, and change over time, so treat this as a general picture rather than any company's official criteria. Most system design evaluations look for evidence of:

Dimension

What it looks like

Problem exploration

Asks clarifying questions; agrees scope; states measurable requirements

Design quality

A coherent architecture that meets the requirements, built up step by step

Technical depth

Goes deep in two or three areas: data model, scaling, consistency, failure handling

Trade-offs

Names alternatives and explains choices with their costs

Communication

Explains clearly, structures the discussion, responds to feedback

Notice what is not on the list: naming many technologies, or reproducing a famous company's architecture. Interviewers look for observable reasoning.

The checklist: 21 items in seven phases

#

Phase

Checklist items

Output

1. Clarify

1. Clarify the problem and users. 2. Functional requirements. 3. Non-functional requirements.

A short list of what is in scope, and measurable targets

2. Estimate

4. Scale assumptions. 5. Capacity estimation: QPS, storage, bandwidth, cache.

A few numbers that identify the hard parts

3. Interface

6. APIs (with idempotency where needed).

Four to six endpoints or messages

4. Data

7. Data model: entities, keys, access patterns, indexes, partition keys.

The main tables or collections

5. Baseline

8. High-level architecture. 9. Request flow walkthrough.

A simple diagram and one request traced through it

6. Scale

10. Bottlenecks. 11. Scaling. 12. Caching. 13. Database choices and scaling. 14. Asynchronous processing.

An evolved diagram with a reason for each addition

7. Harden

15. Consistency. 16. Reliability. 17. Failure handling. 18. Security. 19. Observability. 20. Trade-offs. 21. Final summary.

A defended design and a two-minute summary

You will not always cover all 21 in depth. The checklist is a map: it reminds you what exists, so you can choose consciously what to skip ("I'll skip detailed security unless you'd like me to cover it") rather than forgetting it.

A time plan

#

45-minute interview

#

Minutes

Phase

Notes

0 to 5

Clarify

Restate the problem, ask questions, write requirements

5 to 10

Estimate

Traffic, storage, and one or two other numbers that matter

10 to 15

Interface and Data

Key APIs and the main tables, briefly

15 to 23

Baseline

Simple architecture, then trace one request

23 to 38

Scale and deep dives

What breaks first; fix it; go deep where the interviewer steers

38 to 43

Harden

Failures, consistency, security, observability, trade-offs

43 to 45

Summary

Two-minute recap, plus what you would do next

Roughly: a quarter of the time on understanding and framing, a third or more on scaling and depth. If the interviewer cuts in to steer towards a deep dive earlier, follow them; the plan is a default, not a script.

60-minute interview

#

Keep the first sections similar (they do not need to grow much) and give the extra time to deep dives: a second component in depth, a failure walkthrough, or a follow-up requirement ("now make it multi-region").

Phase by phase: what to do and what to say

#

1. Clarify

#

Restate the problem in one sentence, then ask questions that change the design (article 02 has a reusable list).

"To make sure I understand: we're building a service that turns long URLs into short ones and redirects people who visit the short link. Can I ask a few questions first?"

Then write requirements down, numbered, so you can refer to them:

"Functional: 1, create a short link; 2, redirect; 3, optional custom alias; 4, optional expiry. Out of scope: analytics dashboards and user accounts, unless you'd like them. Non-functional: redirects under 50 ms at p99, very high availability for redirects, links never silently point to the wrong place."

Mark the one or two requirements that will drive the design: "this is extremely read-heavy, so the redirect path is where most of the design effort goes."

2. Estimate

#

State assumptions, compute, and draw a conclusion (articles 06 and 07).

"Assume 100 million new links a month and a 100-to-1 read-to-write ratio. That's about 40 writes a second and 4,000 reads a second on average; with a peak factor of 3, 12,000 reads a second. Each link is about 500 bytes, so 50 GB a month, 600 GB a year: one database can hold years of it. The read rate says we want a cache."

Keep it to two or three minutes. If the interviewer says "skip estimation", skip it gracefully.

3. Interface

#

"Two main endpoints: POST /v1/links with the long URL and optional alias, returning 201 and the short code; and GET /{code}, returning a redirect. Creation should take an idempotency key so retries don't create duplicate links."

4. Data

#

"One main table keyed by short code, since every redirect looks up by code. Columns: code, long URL, owner, created and expiry times. The access pattern is a point lookup by primary key, which also means it shards cleanly by code if we ever need to."

5. Baseline

#

Draw the simplest thing that works, then walk a request through it:

"Client to load balancer to stateless app servers to the database. For a redirect: the server receives GET /abc123, looks up the code, and returns a 302 with the location. Now let's see what breaks first at 12,000 reads a second."

The baseline matters because it shows you can design without reflexively adding every component, and it gives the rest of the interview a clear starting point.

6. Scale

#

Use the three questions from article 01 aloud:

"What breaks first? Reads: 12,000 per second of point lookups on a hot subset. I'll add a cache in front of the database (cache-aside, TTL of a day, since links rarely change). With a 95% hit ratio the database sees about 600 reads a second."

Each addition gets a reason tied to a number or a requirement. Repeat until the interviewer is satisfied or steers you to a deep dive.

7. Harden

#

Walk through failures, consistency, security and observability briefly but explicitly:

"If the cache fails, the database would see 12,000 reads a second, which it can't sustain, so we'd shed load and serve popular links from a small in-process cache. If the primary fails, a synchronous standby takes over within a minute; redirects keep working from replicas and cache. Consistency: a newly created link must work immediately for its creator, so we write through to the cache on creation..."

Stating trade-offs

#

Every important decision should sound like this, with three parts:

"I chose X. It costs Y. That's acceptable here because Z."

For example: "I chose a 302 redirect rather than 301. It costs us more requests, because browsers won't cache the redirect permanently. That's acceptable because we want to count clicks and be able to change or expire links."

The final summary

#

In under two minutes: the requirements you designed for, the architecture in one breath, the two or three key decisions and their trade-offs, the main risks and what you would do next.

Handling hints, pushback and getting stuck

#
  • Hints are gifts. If the interviewer asks "what happens when this key gets very popular?", they are steering you to a deep dive. Go there.
  • Pushback is not a verdict. "Why not just use a NoSQL store?" usually means "explain your reasoning". Restate your reasons; if their point is better, adopt it openly: "That's a good point; given the access pattern is only by key, a key-value store would also fit, and I'd choose based on what the team already operates."
  • When stuck, go back to the requirements and numbers: "Let me look at what we need: 12,000 reads a second, mostly repeated. That suggests..."
  • Check in at transitions: "I have a baseline. Shall I go into scaling the reads, or would you like to see the data model in more detail first?"
  • Do not go silent. Thinking aloud lets the interviewer follow and help.

Diagrams that help

#
  • Draw boxes for components and label the arrows (what flows).
  • Distinguish the request path (synchronous) from the asynchronous path (queues and workers), for example with dashed lines or separate rows.
  • Show data stores explicitly, with what they hold.
  • Evolve one diagram as you scale, rather than drawing a new one, so the interviewer sees the history of decisions.

SDE-1 and SDE-2: what changes

#

Interview levels and expectations vary by company; the comparison below is a general guide.

Area

SDE-1

SDE-2

Driving the discussion

Follows the structure; responds well to guidance

Drives the structure; chooses where to go deep and says why

Requirements

Clear functional and basic non-functional requirements

Prioritises requirements and states which ones conflict

Estimation

Correct, rounded numbers

Uses numbers to justify or reject components

Architecture

Clean baseline, sensible use of load balancer, cache, queue, database

Evolves the design under load; partitioning and replication strategies

Data

Sensible schema and indexes

Partition keys, hot keys, consistency per operation, migration concerns

Failure handling

Mentions redundancy, retries, timeouts

Walks through partial failures, duplicates, data-loss windows, degradation

Trade-offs

Names alternatives

Quantifies costs and connects choices to requirements

Green flags and red flags

#

Green flags

Red flags

Asks questions before designing

Starts drawing immediately

States assumptions and numbers

No numbers at all, or false precision

Starts simple and evolves

Begins with every technology they know

Gives a reason for each component

"We'll add Kafka because it scales"

Talks about failure without being asked

Only the happy path

States trade-offs

Presents choices as obviously correct

Checks in with the interviewer

Monologue for 30 minutes

Ends with a clear summary

Runs out of time mid-diagram

Worked example: a game leaderboard, compressed

#

Here is the framework applied briefly to "design a leaderboard for a mobile game", to show the shape. The full case studies that follow are much deeper.

Clarify. Players submit scores after each match; the app shows the global top 100 and the player's own rank. Questions: one global board or per region and per season? (Per season, global.) How fresh must ranks be? (Within a few seconds.) Ties? (Earlier score ranks higher.) Out of scope: friends' leaderboards, anti-cheat details.

Estimate. Assume 5 million daily players, 10 matches each: 50 million score submissions a day, about 580 per second on average, about 1,700 at a peak factor of 3. Reads of the top 100 and "my rank": assume 20 per player per day, 100 million a day, about 1,200 per second average, 3,500 peak. A season has up to 20 million players: one entry each (player id and score) is small.

Interface. POST /v1/seasons/{seasonId}/scores (idempotency key per match id), GET /v1/seasons/{seasonId}/leaderboard?limit=100, GET /v1/seasons/{seasonId}/players/{playerId}/rank.

Data. Durable store: match_results(match_id PK, player_id, season_id, score, finished_at), the source of truth. Ranking structure: a sorted set per season, member = player id, score = best score (with a tie-breaker encoded). Redis sorted sets keep members ordered by score and support range queries and rank lookups efficiently, which is exactly this access pattern (Redis sorted sets).

Baseline. Game servers call the score API; the API writes the match result to the database and updates the player's best score in the sorted set if higher; reads come from the sorted set.

Scale. 1,700 writes and 3,500 reads per second are well within one in-memory sorted set's comfortable range on suitable hardware (to be confirmed by load testing); 20 million members fit in memory. The top 100 is the same for everyone, so cache it for one second, cutting most of the read load.

Harden. If the sorted set is lost, rebuild it from match_results (a job reads each player's best score for the season). Duplicate submissions are harmless because match_id is unique. Consistency: a player's own rank may lag by a second; acceptable per requirements. Security: only game servers (authenticated service identities) may submit scores, never clients directly, which blocks trivial cheating. Observability: submission rate, sorted-set update latency, rank-query p99. Trade-off: an in-memory ranking structure gives fast, simple ranks at the cost of rebuild time after a failure; a replica of the sorted set reduces that risk.

Summary. "Scores are stored durably by match and folded into a per-season sorted set keyed by player; reads serve top-N and rank directly from it with a short cache on the top 100. Idempotency by match id prevents double counting; the sorted set is rebuildable from the durable store."

How to practise

#
  1. Solo, timed. Pick a problem, set a 45-minute timer, and talk through it aloud while writing notes and diagrams. Record yourself if you can.
  2. Compare with a reference. After finishing, read the matching case study in this course and list what you missed.
  3. Score yourself with the rubric in article 45.
  4. Mock interviews with a friend or peer, taking turns as interviewer. Interviewers learn as much as candidates.
  5. Repeat problems after a week or two. The goal is fluency with the method, so new problems feel familiar.

Common mistakes

#
  • Spending 15 minutes on requirements and running out of time.
  • Estimating everything instead of the numbers that matter.
  • Designing the final architecture first and justifying it backwards.
  • Ignoring the interviewer's hints because they are not in your plan.
  • Never summarising.
  • Treating the interview as a quiz rather than a collaborative design session.

The checklist is also a protection against a quieter failure: a perfectly reasonable design with no stated trade-offs, which leaves the interviewer unable to see your judgment.

Exercises

#

Exercise 1

Clarify a vague prompt

#

The prompt is "Design Instagram Stories". Write eight clarifying questions, each with the design decision it affects, then write three functional requirements, an out-of-scope list and three measurable non-functional requirements.

Exercise 2: Plan the hour

#

You have a 60-minute interview for "Design a ride-hailing app". Write a time plan, and choose two deep-dive topics you would steer towards if the interviewer gives you freedom, with reasons.

Exercise 3: Critique the transcript

#

A candidate's first five minutes for "Design a URL shortener": "We'll use Kubernetes with microservices: a link service, an analytics service and a user service. Each has its own Cassandra cluster, and we'll put Kafka between them and Redis in front. For IDs we'll use Snowflake." List what is wrong with this start, and rewrite the first five minutes.

Exercise 4: Write the summary

#

Write a two-minute final summary (about 200 words) for Pixly's photo upload and feed design as developed in articles 05 to 11, covering requirements, architecture, key decisions with trade-offs, and risks.

Show solutionHide solution

Questions (and what they affect):

  1. Photos only, or video too? (Storage, transcoding, bandwidth.)
  2. How long do stories last: 24 hours? (Retention, deletion jobs, storage size.)
  3. Who sees a story: all followers, close friends, public? (Authorisation, fan-out.)
  4. How many daily active users, and how many stories posted per day? (Scale.)
  5. Must viewers see a new story within seconds? (Push versus pull, consistency.)
  6. Do we show who viewed a story? (A viewer list per story: a write-heavy table.)
  7. Replies, reactions, stickers, music? (Scope.)
  8. Global or one region? (CDN, regional storage.)

Functional: post a photo or short video story that expires after 24 hours; view stories of people you follow, in order; see who viewed your story. Out of scope: replies, stickers, music, ads, highlights. Non-functional: story tray loads in under 300 ms at p99; new stories visible to followers within 10 seconds; media playback starts within 1 second at p95 worldwide; stories are deleted from public view within minutes of expiry.

Exercise 2

Show solutionHide solution

Minutes

Phase

0 to 6

Clarify: riders, drivers, matching, trip lifecycle, payment in or out of scope

6 to 11

Estimate: location updates per second (the dominant write load), ride requests per second, storage

11 to 17

APIs and data model: request ride, driver location updates, trip state

17 to 25

Baseline: apps, gateway, location service, matching, trip service, database

25 to 45

Deep dives (below)

45 to 55

Harden: failures (driver app disconnects, matching service crash), consistency (one driver per ride), security, observability

55 to 60

Summary and next steps

Deep dives: (1) Location ingestion and geospatial indexing: it is the highest-volume, most distinctive part of the system and shows partitioning skill. (2) Matching without double-assigning a driver: it shows concurrency control, leases or conditional updates, and failure handling (offers timing out).

Exercise 3

Show solutionHide solution

Problems: no clarifying questions or requirements; no estimates to justify anything; technology names chosen before any need is shown; microservices and three Cassandra clusters for what is fundamentally one table and a very simple service; Kafka with no asynchronous requirement identified; analytics and users assumed to be in scope without asking.

Rewrite: "Let me restate: we turn long URLs into short codes and redirect visitors. A few questions: how many new links per month, and how many redirects? Do we need custom aliases, expiry, accounts, analytics? How fast must redirects be? ... Assuming 100 million new links a month and 100 reads per write: about 40 creates and 4,000 redirects a second on average, 12,000 at peak. Storage around 600 GB a year. So this is a small amount of data with a very read-heavy, latency-sensitive redirect path. I'll start with one service and one database table keyed by code, then add caching for redirects. Analytics, if needed, can be an asynchronous click stream later."

Exercise 4

Show solutionHide solution

"We designed Pixly to let 10 million daily users upload photos and see a feed of people they follow, with p99 feed loads under 300 ms, uploads acknowledged within 2 seconds, and no acknowledged photo ever lost.

Stateless API servers sit behind a multi-zone load balancer. Clients upload photo bytes directly to object storage using presigned URLs, so the API only handles metadata; images are delivered through a CDN, which cuts peak egress at the origin from about 28 to about 3 Gbps. Metadata lives in PostgreSQL, modelled around our access patterns, with a synchronous standby and read replicas. Redis caches hot metadata and holds sessions and like counters.

After an upload, the API commits the photo row and a photo.uploaded event through an outbox; workers make thumbnails, run moderation and update feeds and notifications asynchronously. The trade-off is that followers see new photos after a few seconds, which the requirements allow, in exchange for fast uploads and isolation from slow work.

Main risks: a cold cache overloading the database, which we handle with request coalescing and load shedding, and the likes table's write growth, which may need partitioning later."

Where to go next

#

Sources & further reading

  1. redis.io
  • Guide · Technology

    Inheritance, Overriding and Overloading

  • Guide · Technology

    Generics: Type Safety, Wildcards and Erasure

  • Guide · Career

    A LinkedIn Profile That Gets Recruiter Messages