How to Prepare for System Design Interviews
System design interviews are not only about memorizing famous architectures. They test whether you can reason from requirements to trade-offs: latency, scale, data ownership, correctness, failure modes, and product experience.
Use this guide as a study map. For each area, learn the concept, explain where it shows up in a real system, and practice making trade-offs out loud.
1. Core Technical Foundations
Networking and Latency
Know the basic latency numbers and request-path costs well enough to reason without stopping the interview.
- Basic numbers in your head:
- memory access
- SSD and disk access
- same-AZ network call
- cross-region network call
- CDN edge versus origin
- DNS lookup and caching.
- TCP handshake and connection setup.
- TLS negotiation and termination.
- HTTP request/response lifecycle.
- HTTP/1.1 versus HTTP/2 versus HTTP/3 at a high level.
- Keep-alive and connection pooling.
- Load balancers and reverse proxies.
- Timeouts, retries, and connection limits.
Interview signal:
- You can explain why one extra network hop matters.
- You can decide when to cache, pool, batch, or move compute closer to users.
OS and Concurrency Basics
You do not need to be a kernel engineer, but you should understand what limits a server under load.
- Processes versus threads.
- Blocking versus non-blocking I/O.
- Event loops and worker pools.
- Context switching overhead.
- File descriptors and socket limits.
- Connection backlog queues.
- Memory pressure and garbage collection.
- How slow clients can consume server resources.
- CPU-bound versus I/O-bound workloads.
Interview signal:
- You can explain why a service runs out of connections before it runs out of CPU.
- You can reason about backpressure instead of only adding more machines.
Data Formats and APIs
Know the trade-offs of common API and payload choices.
- JSON:
- easy to debug
- broad browser support
- larger payloads
- Protobuf:
- compact and typed
- better for internal RPC
- less human-readable
- REST:
- resource-oriented
- cache-friendly
- simple public API model
- gRPC:
- strong contracts
- streaming support
- common for service-to-service calls
- WebSockets:
- full-duplex
- low-latency interactive communication
- Long polling and SSE:
- simpler server-push options for browser clients
API design basics:
- Idempotent methods.
- Pagination.
- Filtering and sorting.
- API versioning.
- Rate limits and quotas.
- Error response shape.
- Backward compatibility.
2. Request Flow and Boundaries
End-to-End Request Lifecycle
Practice narrating a request from the user's device to the database and back.
Example path:
Client
-> DNS
-> CDN / edge
-> load balancer
-> API gateway
-> auth / rate limit
-> service
-> cache
-> database
-> response
At each layer, ask:
- What work happens here?
- Can this layer fail?
- Can this layer cache?
- Does this layer authenticate?
- Does this layer enforce rate limits?
- What timeout applies?
- What logs and metrics are emitted?
Interview signal:
- You can draw boundaries cleanly and explain why each boundary exists.
Sync vs Async
Not every request should block until all work is complete.
Use synchronous flow when:
- the user needs the result immediately,
- correctness depends on the operation finishing,
- the work is short and predictable.
Use asynchronous flow when:
- work is slow or expensive,
- multiple downstream systems must be notified,
- spikes should be smoothed,
- retries are acceptable,
- the user can continue without waiting.
Patterns to know:
- Job queue.
- Event stream.
- Background workers.
- Fan-out.
- Fan-in.
- Scheduled jobs.
- Dead letter queues.
- Outbox pattern.
Examples:
- Checkout payment authorization is synchronous.
- Sending a receipt email is asynchronous.
- Upload commit is synchronous.
- Thumbnail generation is asynchronous.
Service Decomposition
Start simple. Split services only when there is a real reason.
One service may be enough when:
- scale is modest,
- one team owns the domain,
- data is tightly coupled,
- transactions are important.
Split services when:
- teams need independent ownership,
- scaling needs differ,
- deployment cadence differs,
- failure isolation matters,
- data boundaries are clear.
For each service, define:
- owned data,
- public API,
- dependencies,
- failure behavior,
- scaling model,
- operational owner.
Interview signal:
- You can resist premature microservices while still designing clear ownership.
3. Data Modeling and Storage Choices
Data Modeling
Start from access patterns, not from technology.
Ask:
- What are the core entities?
- What relationships exist?
- What queries are on the critical path?
- What data is mutable?
- What data is append-only?
- What data must be strongly consistent?
- What data can be eventually consistent?
- What is the retention policy?
Concepts to know:
- Normalization versus denormalization.
- Primary keys and composite keys.
- Secondary indexes.
- Unique constraints.
- Soft delete.
- Audit logs.
- Materialized views.
- Idempotency records.
Interview signal:
- You can explain why a schema supports the product's actual queries.
Storage Engines
Pick storage based on access pattern and correctness needs.
Relational database:
- transactions,
- constraints,
- joins,
- strong consistency,
- great for core business entities.
Key-value store:
- simple lookup by key,
- high throughput,
- cache or session data,
- direct ID-based access.
Document store:
- flexible schema,
- nested objects,
- product data with evolving shape.
Wide-column store:
- high write volume,
- partitioned time or entity data,
- large-scale event-like records.
Time-series database:
- metrics,
- counters,
- monitoring,
- retention and rollups.
Object storage:
- files,
- images,
- videos,
- backups,
- immutable blobs.
Also understand:
- indexes,
- partitions,
- sharding,
- federation,
- hot partitions,
- archival,
- lifecycle policies,
- backup and restore.
Caching
Know where caching can happen:
- browser cache,
- mobile local cache,
- CDN,
- edge cache,
- application memory cache,
- distributed cache,
- database buffer cache.
Patterns:
- Cache-aside.
- Write-through.
- Write-behind.
- Read-through.
- Stale-while-revalidate.
Hard parts:
- cache key design,
- invalidation,
- TTL selection,
- negative caching,
- cache stampede protection,
- hot keys,
- stale data behavior.
Interview signal:
- You can say exactly what can be stale and for how long.
4. Scale and Performance Patterns
Throughput and Capacity
Practice quick estimates:
- requests per second,
- peak versus average traffic,
- p50, p95, p99 latency,
- concurrent users,
- connection count,
- read/write ratio,
- storage growth,
- bandwidth,
- queue depth.
Scaling concepts:
- vertical scaling,
- horizontal scaling,
- stateless services,
- auto scaling,
- partitioning,
- replication,
- read replicas,
- connection pooling.
Interview signal:
- You can identify the bottleneck instead of blindly adding servers.
Protecting Systems
Defensive design matters at staff level.
- Rate limiting.
- Quotas.
- Backpressure.
- Circuit breakers.
- Timeouts.
- Retries with jitter.
- Bulkheads.
- Load shedding.
- Admission control.
- Queues for smoothing spikes.
- Dead letter queues.
Explain:
- what gets rejected,
- what gets queued,
- what gets degraded,
- what gets retried,
- what gets dropped.
Heavy Features
Some features should not run directly in the request path.
Examples:
- search indexing,
- feed generation,
- recommendation,
- reporting,
- analytics aggregation,
- media transcoding,
- notification fan-out.
Design choices:
- precompute versus on demand,
- batch versus streaming,
- exact versus approximate,
- online versus offline,
- sampling,
- ranking freshness,
- materialized views.
Interview signal:
- You can keep the core user path fast while still supporting expensive product features.
5. Reliability and Correctness
Redundancy and Failover
Know the basics:
- replication,
- leader/follower,
- multi-AZ,
- multi-region,
- health checks,
- failover triggers,
- disaster recovery,
- RPO and RTO,
- graceful degradation.
Ask:
- What happens if one instance fails?
- What happens if one AZ fails?
- What happens if one region fails?
- What data can be lost?
- How long can the system be unavailable?
- Can users continue with degraded functionality?
Consistency
Know the major consistency models:
- strong consistency,
- eventual consistency,
- read-your-writes,
- monotonic reads,
- causal consistency.
Use strong consistency when:
- money changes hands,
- permissions change,
- inventory is limited,
- duplicate actions are harmful,
- user trust depends on exactness.
Use eventual consistency when:
- feeds update,
- analytics aggregate,
- search indexes refresh,
- notifications fan out,
- counters are approximate.
Correctness tools:
- idempotency keys,
- retry semantics,
- deduplication,
- sequence numbers,
- version checks,
- optimistic locking,
- distributed locks only when necessary,
- transactions,
- outbox pattern.
Interview signal:
- You can say where consistency can be relaxed and where it cannot.
How to Use This in an Interview
Start with scope
Clarify:
- users,
- core flows,
- scale,
- data,
- latency,
- consistency,
- availability,
- security.
Draw the happy path
Show the main request path first. Keep it simple.
Then add:
- cache,
- queue,
- database,
- async worker,
- observability,
- failure handling.
State trade-offs explicitly
Strong answers sound like:
- "I would keep this synchronous because the user needs immediate confirmation."
- "This can be asynchronous because email delivery should not block checkout."
- "This cache can be stale for 60 seconds because the UI can tolerate it."
- "This write needs idempotency because clients may retry after timeout."
- "This service should degrade before the core workflow fails."
Close with staff-level concerns
Always mention:
- failure modes,
- operational controls,
- metrics,
- rollout plan,
- security and privacy,
- cost,
- product experience.
The goal is not to design the most complex system. The goal is to show that you can choose the right complexity for the product, scale, and risk.