ArchitectureAdvanced12 chapters

System Design for Developers

Reasoning about load, state, and failure before you write the code

Almost every scaling problem is a decision made early, cheaply and without evidence, so design is the discipline of forcing load, state and failure into the open and writing down why.

Design is not drawing boxes. It is deciding, in order, what load the system has to absorb, where state lives and what consistency it needs, and how the thing behaves when a dependency is gone — then recording the constraint that forced each answer and the signal that would reverse it. This book works through that order using the decisions that actually cost money later: data model, service boundaries, caching, queues and backpressure, timeouts and idempotency, observability, capacity, and how to migrate a system that cannot stop running.

Written for: Mid-to-senior engineers who can build a feature and cannot yet defend a system.

No chapter is published yet. The full contents below is the finished outline; chapters go live as they are written, and none of them will sit behind a signup.

Jacket for System Design for Developers — Reasoning about load, state, and failure before you write the code

What it makes operable

Outcomes, not topic coverage.

  1. 01Start from a load model instead of a box diagram
  2. 02Choose state, consistency and a data model you can still live with at scale
  3. 03Make timeouts, retries, idempotency and backpressure explicit decisions
  4. 04Write a decision record that names the constraint and the reversal signal

Complete contents

12 chapters, in order.

Each chapter settles one decision, so it can be read on its own. Read in sequence to build the argument the book is making.

  1. 01

    Start From the Load, Not the Diagram

    Shape, peak and growth of traffic, established before a single box is drawn.

    In writing
  2. 02

    State Is the Hard Part

    Why stateless services are easy and the data underneath them is not.

    In writing
  3. 03

    Choosing a Data Model You Can Live With

    Access patterns first; the choice of store is a consequence of them.

    In writing
  4. 04

    Where to Put the Boundary Between Services

    Transaction scope, ownership and deploy cadence, not domain diagrams.

    In writing
  5. 05

    Caching: Correctness First

    Invalidation, staleness contracts, and what a cache is allowed to serve.

    In writing
  6. 06

    Queues, Backpressure, and Fair Scheduling

    What the system does when work arrives faster than it can be finished.

    In writing
  7. 07

    Consistency You Can Explain to the Business

    Choosing a guarantee, then describing it in a sentence non-engineers accept.

    In writing
  8. 08

    Timeouts, Retries, Idempotency

    The three settings that decide whether a partial failure corrupts data.

    In writing
  9. 09

    Observability as a Design Input

    Deciding what you will need to see while the design is still cheap to change.

    In writing
  10. 10

    Capacity, Cost, and the Bill

    Turning a load model into a number the business can plan against.

    In writing
  11. 11

    Migrating a Running System

    Dual writes, backfills, cutovers, and the rollback you keep in reserve.

    In writing
  12. 12

    Writing the Decision Record

    The constraint that forced the choice and the signal that would reverse it.

    In writing

Evidence

What this book is arguing against.

Third-party sources behind the book's premise. Every figure in them belongs to the party that published it and is attributed to them in the text.