The System Design Fundamentals Handbook
The shared vocabulary, read with a reliability lens: what CAP says your system does during a partition, why stateless services are the ones you can scale and replace freely, and how replication and consensus keep data alive when machines die. It prepares you to answer "what happens if this node disappears?" for every box in a diagram, which is the habit the rest of the path depends on.
Availability (Nines) Calculator
Chain dependencies in series and in parallel, then read off end-to-end availability, the number of nines and the yearly and monthly downtime. It trains the arithmetic behind availability targets: three nines is roughly 8.8 hours of downtime a year, each extra nine is about ten times harder, serial dependencies multiply, and parallel replicas multiply their unavailabilities instead, which is why redundancy on the critical path pays.
Interactive Capacity Estimator
Turn daily users, request rates, payload sizes and a peak-to-average factor into peak QPS, storage per year with replication, bandwidth and node counts, with every formula visible. Use it before a launch review: size for the spike rather than the average, see how a higher peak factor or replication setting changes the node count, and practice stating the headroom you would provision and why.
Partitioning, Sharding & Replication
How data is split and copied so that losing one node is an inconvenience rather than an outage: partitioning schemes, consistent hashing with virtual nodes, hot partitions caused by a bad shard key, replication topologies and quorums. It prepares you to spot the reliability risks in a data layer, such as one hot shard that saturates first or a rebalance that moves far more data than expected.
Quorum (N/R/W) Explorer
Dial N, R and W and see how many failures reads and writes each survive, whether reads are guaranteed fresh, and what the setting does to latency. For reliability work the key readings are N minus W and N minus R: practice choosing settings for a store that must keep accepting writes when a replica is lost, and explaining what consistency you give up to get there.
Design a Rate Limiter
Load shedding designed properly: rejecting work at the edge before it costs anything, choosing whose traffic to limit, token buckets versus windows, one correct counter across many gateways, regional trade-offs, and failing open or closed when the limiter's own store is down. It prepares you for the reliability question hidden inside every limiter design, which is what happens to your users when the protection itself fails.
Design a Distributed Cache
A cache is a reliability component as much as a speed one, and this design covers the failure side: replication and failover, invalidation, hot keys, and surviving a thundering herd by coalescing misses. Practice explaining what happens to the database behind it after a cold start or a mass flush, since a cache that quietly carries most of your read load is also a single point of failure.
Design a Message Queue
The pattern for absorbing spikes: producers append to a durable log, consumers drain it at their own pace, and partitions, replication with in-sync replicas, retention and delivery guarantees decide what survives a broker failure. It prepares you to reason about consumer lag, slow consumer groups and replays, and to explain why at-least-once delivery with idempotent consumers is usually the practical target.