The System Design Fundamentals Handbook
A compact pass over the four ideas the rest of the path builds on, plus a section on statelessness and horizontal scaling that explains the sticky-session trap and where state is supposed to live. Treat it as a calibration check: if you can already explain read-your-writes consistency and why a second app instance breaks in-memory sessions, skim it and move on.
Partitioning, Sharding & Replication
How one dataset becomes many: range, hash and directory partitioning, consistent hashing with virtual nodes, picking a shard key that avoids hot partitions, and single-leader, multi-leader and leaderless replication. It prepares you for real decisions, such as choosing the partition key for a fast-growing table and estimating how much data moves when you add a node, which the page lets you count directly.
Concurrency, Locks & Isolation Levels
Correctness under contention: the races behind lost updates and double-spends, pessimistic versus optimistic locking, what each SQL isolation level actually prevents, how MVCC stops readers and writers blocking each other, and fencing tokens for distributed locks. Use it to settle questions you meet in code review, such as whether a read-modify-write needs a row lock or a version check, and how ordering lock acquisition prevents a deadlock.
Consensus, Transactions & Coordination
How machines that can crash still agree: why agreement is hard, majority quorums, Raft's elected leader and replicated log, Paxos, coordination services such as ZooKeeper and etcd, two-phase commit versus sagas, and idempotency. The practical payoff is knowing when to lean on an existing coordination service instead of building agreement yourself, and how to make a multi-service workflow safe to retry.
Design a Key-Value Store
The first system that combines every primitive: consistent hashing to place keys, replication along a preference list, tunable quorum reads and writes, conflict resolution when replicas diverge, gossip for membership, and hinted handoff with read repair to heal after failures. Read it as a case study in trade-offs, then test yourself on the page's harder questions, such as what a node does when it rejoins the cluster.
Design a Distributed Cache
A Redis- or Memcached-style cache built up from cache-aside: sharding with consistent hashing instead of modulo, eviction with LRU, LFU and TTLs, replication and failover, invalidation, and coalescing misses so one expired key does not stampede the database. It prepares you for production questions like how to pick a TTL, what to do about a hot key, and what happens after a mass flush.
Design a Message Queue
A Kafka-style log designed from first principles: an append-only log, partitions for parallelism with ordering only within a partition, consumer groups that track offsets, leader-and-ISR replication, leader election for metadata, retention and compaction, and delivery guarantees. It is the background you need when choosing a partition key, sizing a topic, or explaining why exactly-once rarely survives the trip to an external sink.
Design an ID Generator
Why unique IDs get hard at scale and how a Snowflake-style layout solves it: a millisecond timestamp in the high bits for rough ordering, a machine ID field, a sequence counter, safe assignment of node bits, and handling a clock that moves backward. You come away able to compare it with UUIDs and ticket servers, and to explain what an ID leaks and why it is only roughly sorted.
Quorum (N/R/W) Explorer
Set N, R and W and see immediately whether reads are guaranteed to overlap the latest write, how many replica failures reads and writes each survive, and where the setting sits between latency and consistency. Use it to rehearse the settings you would actually choose, such as majority quorums for balanced workloads or W equal to N for read-heavy data, and to explain what each one costs.
Availability (Nines) Calculator
Compose dependencies in series and in parallel and read off combined availability, the number of nines and the downtime per year and per month. It makes one backend lesson stick: every synchronous dependency multiplies into your own uptime, so three services at 99.9 percent in a row land near 99.7, and redundancy on the critical path is how you earn nines back.