Skip to content

Learn how systems scale

A notebook for distributed systems. Each idea is taught with diagrams you step through, a small working copy in Go, and a quiz to help you remember it.

Three ways to use this site

The tracks

Ten tracks, from the numbers every engineer should know to security. Each finished topic is filled in. The roadmap shows the reading order.

  1. Start here

    How to approach a system design problem, Numbers every engineer should know, Back-of-envelope estimation, Performance vs scalability, scaling up vs scaling out, Availability in numbers: nines, SLOs, error budgets

  2. Networking and communication

    How a request travels, how services talk to each other, and how traffic is spread over servers.

  3. Storage and databases

    Data models, how storage engines work inside, transactions, and the special stores for blobs, search and time series.

  4. Consistency and consensus

    What "consistent" means, how machines agree on order and on a leader, and how transactions span services.

  5. Caching

    Where to put a cache, how to keep it correct, and what happens when one key gets all the traffic.

  6. Messaging, streams and batch

    Doing work later and elsewhere, delivery guarantees, logs, and processing data in large batches or as events arrive.

  7. Reliability and operations

    Failing well, protecting a service from overload, finding failures, and recovering from disasters.

  8. Architecture patterns

    How to divide a system into services, and the patterns that connect them.

  9. Security

    Who the caller is, what they can do, and how services trust each other.