AssistedVoice
All articles
Technical

The System Design Interview: A Complete 2026 Guide

September 3, 2026 16 min readBy The Assisted Voice Team

The system design round is where interviewers stop asking whether you can implement a function and start asking whether you can shape a system under ambiguity. After years on both sides of the table, the candidates who pass consistently do the same things: they clarify before they draw, they state assumptions aloud, they quantify scale with rough arithmetic, and they explain tradeoffs instead of reciting buzzwords. This guide is built around that behaviour — not around copying a URL shortener diagram you found online.

Key takeaways

  • Mid-level signals are structured decomposition and sensible defaults; senior and staff signals are tradeoff articulation, failure modes, and operational realism.
  • Use a fixed framework every time: requirements, scale, estimation, API, data model, architecture, deep dives, bottlenecks, tradeoffs.
  • Estimation is about order-of-magnitude reasoning, not false precision — show your arithmetic.
  • Building blocks (caching, queues, sharding, consistency) are choices with costs, not checklist items.
  • In 2026, expect prompts that include LLM calls — latency budgets, cost per request, caching, fallbacks, and evaluation matter.

What the round is actually scoring

Interviewers are not grading you on whether your diagram matches the one in their head. They are grading whether you would be safe to design a real feature with colleagues in the room. That means requirement clarification, communication while thinking, and the ability to change your mind when new constraints appear. A beautiful three-tier diagram that ignores idempotency or observability is a fail at senior level even if it looks polished.

At mid level, the bar is structured thinking: break the problem into components, pick reasonable technologies, and explain the happy path. You are not expected to know every sharding strategy by name, but you should ask about read/write ratio, expected QPS, and retention before proposing a database. Silence while you stare at the whiteboard is costly at every level; narrating your reasoning is part of the score.

At senior level, interviewers listen for tradeoffs. Why this database over that one? What breaks first under 10× traffic? How do you deploy without downtime? Staff-level loops add cross-team constraints, cost awareness, and migration paths — designing a greenfield toy is insufficient if you cannot discuss how the system evolves over two years. The same prompt yields different expectations depending on level; when in doubt, ask which hat they want you to wear.

Communication counts

Interviewers often score the conversation as heavily as the diagram. Practice talking through your approach out loud — tools like Assisted Voice can help you rehearse structured narration in 50+ languages during mock sessions or live meetings, but the habit of continuous explanation is what transfers to the real round.

A repeatable framework

Use the same sequence every time so you never wonder what to do next under pressure. The framework below is deliberately boring; boring is good when the clock is running. Spend the first five to eight minutes on requirements and scale before you touch a box on the board.

  1. 1Clarify functional requirements — core user actions, actors, and what is explicitly out of scope.
  2. 2Clarify non-functional requirements — latency targets, availability, durability, consistency expectations, and compliance constraints.
  3. 3Establish scale and constraints — daily active users, read/write mix, payload sizes, geographic distribution, and growth assumptions.
  4. 4Back-of-the-envelope estimation — QPS, storage growth, bandwidth, cache sizing; write the arithmetic down.
  5. 5Define the API — key endpoints or events, request/response shapes, and idempotency keys where needed.
  6. 6Design the data model — entities, relationships, indexes, and partition keys if sharded.
  7. 7Sketch high-level architecture — clients, gateways, services, queues, stores, and external dependencies.
  8. 8Deep-dive one or two components at the interviewer's direction — usually the hot path or the hardest consistency problem.
  9. 9Identify bottlenecks — what saturates first under load and how you would relieve it.
  10. 10Discuss tradeoffs and failure modes — partial outages, retry storms, data loss scenarios, and operational runbooks.

The deep-dive step is where senior candidates separate themselves. When the interviewer says "tell me more about the delivery pipeline," they want sequence diagrams, retry policy, and dead-letter handling — not a bigger rectangle labelled "worker." Let them steer which component to zoom into; it saves you from over-preparing the wrong corner of the design.

Back-of-the-envelope estimation

Estimation proves you can connect product numbers to infrastructure. Interviewers do not expect exactness; they expect sane orders of magnitude and visible reasoning. Round aggressively, state assumptions, and convert everything to per-second rates before you talk about machines.

A useful habit: translate daily actions to writes per second and reads per second separately. Storage is average payload size times retained records. Bandwidth is QPS times payload size on the wire. Cache size is the fraction of working set you can afford to keep hot times object size. If your numbers disagree by 100×, fix the assumption, not the arithmetic.

Assumptions:
  50M registered users, 10M DAU
  Each user receives 20 notifications/day (read-heavy fan-out)
  Each user triggers 2 notification-worthy events/day (writes)
  Notification record ~ 500 bytes; retain 90 days

Reads:
  10M DAU × 20 reads/day ≈ 200M reads/day
  200M / 86,400 ≈ 2,300 read QPS (peak ×3 → ~7,000 rps)

Writes (ingress events):
  10M × 2 / 86,400 ≈ 230 write events/s (peak ×3 → ~700 wps)

Storage (notification rows only):
  10M users × 2/day × 90 days = 1.8B rows
  1.8B × 500 B ≈ 900 GB → plan ~1 TB with indexes

Outbound push bandwidth (if 30% mobile push, 1 KB payload):
  200M × 0.3 × 1 KB ≈ 60 GB/day ≈ 7 Mbps average (peaks higher)

Cache (hot inbox for 7 days, 20% of users active):
  2M users × 20 × 7 × 500 B ≈ 140 GB → too large for one Redis;
  shard by user_id or cache only unread counts + recent page

These numbers immediately suggest a read-heavy path that needs caching or precomputed feeds, a write path that can absorb hundreds of events per second without a single hot partition, and storage that belongs in something built for range queries by user and time — not a naive key-value dump. That is the point of estimation: it constrains your design before you romanticise microservices.

Building blocks and their tradeoffs

Interviewers hear the same slogans every week. Your job is to treat each building block as a decision with costs, not a sticker you slap on the diagram.

Load balancing

Layer-7 load balancers route by HTTP path and can terminate TLS; layer-4 spreads TCP connections with less context. Consistent hashing helps when you cache per key on app nodes. Health checks must distinguish "process up" from "dependency dead" or you will flap traffic onto broken instances. Mention sticky sessions only when session state cannot be externalised — they complicate failover.

Caching and invalidation

Cache-aside is the default pattern: read through cache, on miss load from DB and populate. Write-through and write-behind trade complexity for consistency guarantees. Invalidation strategies matter more than hit ratio slides: TTL-only is simple but serves stale data; event-driven invalidation is accurate but requires a reliable pub/sub path. For feed-like reads, versioned cache keys prevent thundering herds when popular keys expire together.

SQL vs NoSQL as a decision

Choose SQL when you need joins, transactions across rows, and ad hoc analytics on structured data. Choose wide-column or document stores when access patterns are keyed lookups or time-series per partition and you can denormalise deliberately. Choose a graph store when traversals are the product. Saying "NoSQL scales" without naming the access pattern is a weak signal. Many production systems use both: OLTP in Postgres, search in Elasticsearch, analytics in a warehouse.

Sharding and partitioning

Hash partitioning spreads load evenly but makes range queries expensive. Range partitioning helps time-ordered data but creates hot shards for the latest interval. Directory-based sharding adds a lookup tier. Pick the partition key from the query you cannot afford to scatter-gather — usually user_id or tenant_id for consumer products. Mention rebalancing and dual-write migrations if they ask about growth.

Replication and consistency

Single-leader replication is easy to reason about; multi-leader and leaderless raise conflict resolution questions. Read-your-writes often means routing reads to the primary or using session tokens. Eventual consistency is acceptable for notification badges long before it is acceptable for ledger balances. Name the consistency model per path, not once for the whole system.

CAP in practical terms

CAP is not a menu where you pick two letters and ignore the third. Under partition, you choose between stalling writes and serving possibly stale reads. In interviews, translate it: "If the link between regions fails, do we pause notification delivery or risk duplicate sends?" That is the useful framing.

Message queues and event streaming

Queues decouple producers and consumers, smooth spikes, and enable retries. Kafka-style logs add replay and multiple consumer groups at the cost of operational complexity. At-least-once delivery is common; exactly-once end-to-end requires idempotent consumers and deduplication keys. Dead-letter queues are not optional for production designs — say what happens after max retries.

CDNs, rate limiting, and idempotency

CDNs help static assets and cacheable API responses at the edge; they do not fix dynamic inbox queries. Rate limiting protects shared dependencies — token bucket at the gateway, per-user and per-IP tiers. Idempotency keys on write APIs prevent duplicate side effects when clients retry POSTs; store key plus response hash with a TTL. These three topics separate designs that work on day one from designs that survive day thirty.

Observability

Metrics, structured logs, and traces are how on-call engineers debug your architecture at 3 a.m. Mention SLOs on delivery latency and error rate, dashboards per queue depth, and trace IDs propagated from API gateway through workers. A design without observability is incomplete at senior level.

Worked example: multi-channel notification service

We will walk through a notification platform that accepts events from product services and delivers to mobile push, email, and SMS according to user preferences. URL shorteners are overdone; notification systems exercise fan-out, queues, idempotency, and channel-specific failure — all common in real interviews.

Requirements and scale

Functional: ingest events (order shipped, mention, security alert); resolve user preferences and quiet hours; render templates per channel; track delivery status; support unsubscribe. Non-functional: deliver most notifications within 60 seconds; at-least-once delivery acceptable with deduplication on the client where needed; 99.9% availability on ingest; GDPR-style delete propagates within 24 hours. Scale: use the estimation above — roughly 700 peak write events per second and 7,000 peak inbox reads per second for 10M DAU.

API and data model

Ingress: POST /v1/events with idempotency-key header, body containing event_type, user_id, payload, and optional scheduled_at. User-facing: GET /v1/inbox?cursor= for paginated notifications; PATCH /v1/preferences for channel toggles. Internal admin: GET /v1/delivery/{id} for support lookups. Data stores: Notification row (user_id, notification_id, created_at, channel_status JSON, payload_ref); UserPreferences (user_id, channels, quiet_hours); Template (event_type, channel, versioned body); DeliveryAttempt (notification_id, channel, attempt, status, provider_id) for auditing and retries.

High-level architecture

Product services call the Notification API behind an API gateway with auth and rate limits. Validated events land on a partitioned event log (Kafka) keyed by user_id to preserve ordering per user. A router consumer reads events, loads preferences from a cache backed by Postgres, and enqueues channel-specific jobs to SQS-like queues — push_queue, email_queue, sms_queue. Workers call FCM, SendGrid, and Twilio respectively, writing DeliveryAttempt rows and updating notification status. Inbox reads hit a read-optimised store — Postgres with index on (user_id, created_at DESC) plus Redis cache for the first page of unread items. Template rendering runs in a sidecar service with versioned templates in object storage.

Deep dive: delivery pipeline and failures

When the interviewer zooms in here, draw the sequence: event → router → queue → worker → provider callback. Workers use exponential backoff with jitter; after N failures, move to DLQ and alert. Idempotency: event_id deduped in Redis SET with 24-hour TTL before enqueue. Push tokens invalid after provider 410 response trigger a preference update job. Email bounces update suppressions. For scheduled notifications, a scheduler service writes to a time-indexed queue scanned by cron workers — not sleeping threads in the router.

  • Hot user problem: celebrity account generates 100× normal events — per-user rate limits in the router prevent queue flooding.
  • Provider outage: degrade SMS first if push and email still work; surface degraded mode in status page and metrics.
  • Duplicate delivery: at-least-once queues plus idempotent workers; clients dedupe by notification_id on display.
  • Preference cache stale: short TTL plus cache invalidation on preference update event.

Practice narrating under time pressure

System design is a speaking exam as much as a drawing exam. Assisted Voice gives you real-time structure while you talk through requirements and tradeoffs — 35 minutes free, 50 with a referral — in live meetings or solo rehearsal.

Start free — 35 minutes, no card

Common failure modes

These mistakes appear repeatedly in debriefs. Avoiding them is often enough to move a borderline hire to yes.

  • Jumping to a diagram before clarifying requirements — you optimise the wrong system beautifully.
  • Long silence while thinking — interviewers cannot score thoughts they never hear; talk through assumptions.
  • Over-engineering for scale nobody asked for — multi-region active-active on day one when the product has 1,000 users signals poor judgement.
  • Unable to justify database choice — "we will use MongoDB" without access patterns is a red flag.
  • Ignoring failure and operations — no retries, no DLQ, no metrics, no rollout plan.
  • Treating CAP as trivia instead of connecting it to a concrete path in your design.

The memorised architecture trap

Candidates who memorise one reference architecture often crumble when the interviewer removes a constraint or adds a new channel. Framework beats flashcards.

How the round has shifted in 2026

A growing share of design prompts include LLM calls: support agents, document summarisation, code review bots, and ranking layers that rewrite content. The shape of the round is the same — clarify, estimate, architect — but the bottleneck is often latency and cost rather than raw QPS.

Latency budgets: a single synchronous GPT-class call may take 2–15 seconds. Interactive flows need streaming tokens to the client, parallel tool calls, or a fast routing layer that handles most traffic without invoking the model. State the p50 and p99 you are designing for and where you shed load.

Cost per request: token-priced APIs make unbounded context expensive. Mitigations include retrieval with tight chunk limits, summarising history, smaller models for classification, and caching responses keyed by normalised prompt hash when outputs are stable. Mention budget caps and per-tenant quotas for B2B products.

Fallbacks when a model is unavailable: route to a rules engine, cached template, or human queue; never block checkout because the summariser timed out. Circuit breakers and graceful degradation should appear on the diagram.

Evaluation: production LLM systems need offline eval sets, online A/B metrics, and human review queues for regressions. Interviewers at AI-heavy companies expect you to mention logging prompts and outputs with PII redaction, shadow traffic for new models, and rollback criteria — not just an arrow labelled "LLM."

The best system design answers sound like a design doc introduction: here is what we are building, for whom, at what scale, and what we are willing to sacrifice when things go wrong.

How to prepare effectively

Work through five to eight prompts end to end on a whiteboard or paper, timed to 45 minutes. After each session, write one page on what broke under follow-up questions. Read postmortems from real companies — they train failure-mode thinking better than blog diagrams. Pair with a friend who interrupts you: "what if this region fails?" or "how do you migrate the schema?"

  1. 1Pick diverse prompts: messaging, feed, rate limiter, file storage, search, and one LLM-augmented flow.
  2. 2Force yourself to do estimation before architecture on every prompt.
  3. 3Record yourself explaining the design; listen for unexplained jumps.
  4. 4Study one building block deeply each week — for example Kafka delivery semantics or Postgres indexing.
  5. 5In the real interview, confirm time remaining before the deep dive so you leave room for tradeoffs.

System design interviews reward engineers who think in public, quantify ambiguity, and choose boring technology for the right reasons. Master the framework, practise speaking through it, and treat every follow-up question as a chance to show operational maturity — not as an attack on your first diagram.

Practice this answer — 35 minutes free

Rehearse it with the copilot, then use the same help on the call. No credit card.

Start free — 35 minutes, no card

Frequently asked questions

Most loops allocate 45 to 60 minutes. Spend the first third on requirements and estimation, the middle on architecture and a deep dive, and the final minutes on bottlenecks, failure modes, and tradeoffs.

The Assisted Voice Team

Written by the team behind Assisted Voice — the real-time AI interview copilot. We analyze interview processes at thousands of companies and roles to help candidates prepare, practice, and perform under pressure.

Popular interview guides

Keep reading