Reading list

Books and papers I keep coming back to

The shelf I actually recommend to people I mentor — from first clean function to principal-level judgement — plus the papers underneath most of the systems I've built.

Books

Books I hand to engineers

Fifteen books, roughly in the order I'd hand them to someone.

foundations

Clean Code

Robert C. Martin

Still the fastest way to give a team a shared vocabulary for "this is hard to read".

Buy on Amazon →
foundations

The Pragmatic Programmer

Hunt & Thomas

Habits that outlast any specific stack — the 20th-anniversary edition holds up.

Buy on Amazon →
foundations

A Philosophy of Software Design

John Ousterhout

The clearest short book on what "complexity" actually costs and where it hides.

Buy on Amazon →
foundations

Head First Design Patterns

Freeman & Robson

The friendliest route into patterns; I still use its Observer chapter to explain pub/sub.

Buy on Amazon →
systems

Designing Data-Intensive Applications

Martin Kleppmann

The one book to read before designing anything with a queue, a replica or a retry.

Buy on Amazon →
systems

Database Internals

Alex Petrov

What DDIA gestures at from the outside, this one opens up — storage engines and distributed consensus.

Buy on Amazon →
systems

Domain-Driven Design

Eric Evans

Where bounded contexts come from. Read the first half; live the second.

Buy on Amazon →
systems

Implementing Domain-Driven Design

Vaughn Vernon

The practical follow-up to Evans — closes the gap between the theory and the code you actually write.

Buy on Amazon →
systems

Building Microservices

Sam Newman

Honest about the costs. Read it before you split the monolith, not after.

Buy on Amazon →
systems

Release It!

Michael Nygard

Circuit breakers, bulkheads, and the failure modes you'll meet at 3 a.m.

Buy on Amazon →
operations

Site Reliability Engineering

Google (Beyer, Jones, Petoff, Murphy)

The vocabulary for error budgets, SLOs, and on-call maturity — I quote this in every incident review.

Buy on Amazon →
delivery

Accelerate

Forsgren, Humble & Kim

The evidence, not just the opinion, for what actually moves deployment frequency and stability.

Buy on Amazon →
career

The Staff Engineer's Path

Tanya Reilly

The best map of what changes when your job becomes influence rather than output.

Buy on Amazon →
career

Staff Engineer

Will Larson

Archetypes and interviews; useful for deciding which kind of Staff you want to be.

Buy on Amazon →
career

Fundamentals of Software Architecture

Richards & Ford

Trade-off thinking, made explicit. Good bridge from senior engineer to architect.

Buy on Amazon →

Disclosure: as an Amazon Associate I earn from qualifying purchases. Prices are unchanged for you.

Papers I recommend

Ten foundational distributed-systems papers

No affiliate links here — straight to the official source, ACM Digital Library, or the author's own site. Roughly chronological.

CACM, 1978

Time, Clocks, and the Ordering of Events in a Distributed System

Leslie Lamport

Logical clocks and happens-before — the paper every other paper on this list assumes you've read.

Read the paper →
OSDI, 2004

MapReduce: Simplified Data Processing on Large Clusters

Jeffrey Dean & Sanjay Ghemawat

Proved you could hide failure handling behind two functions and still scale to thousands of machines.

Read the paper →
OSDI, 2006

The Chubby Lock Service for Loosely-Coupled Distributed Systems

Mike Burrows

Shows why most systems want a coordination service, not a consensus library, and what that API should look like.

Read the paper →
SOSP, 2007

Dynamo: Amazon’s Highly Available Key-value Store

DeCandia et al.

Made eventual consistency, vector clocks, and hinted handoff mainstream engineering tools, not just theory.

Read the paper →
OSDI, 2012

Spanner: Google’s Globally-Distributed Database

Corbett et al.

TrueTime turns clock uncertainty into an explicit, boundable API instead of a hidden assumption.

Read the paper →
SIGMOD, 2012

Calvin: Fast Distributed Transactions for Partitioned Database Systems

Thomson, Diamond, Weng, Ren, Shao & Abadi

Deterministic transaction ordering that sidesteps two-phase commit’s latency tax entirely.

Read the paper →
NetDB, 2011

Kafka: a Distributed Messaging System for Log Processing

Kreps, Narkhede & Rao

Reframes a message queue as an append-only commit log — the idea underneath most streaming systems since.

Read the paper →
USENIX ATC, 2014

In Search of an Understandable Consensus Algorithm (Raft)

Diego Ongaro & John Ousterhout

Proves a consensus protocol can be provably correct and still teachable in an afternoon.

Read the paper →
USENIX ATC, 2013

TAO: Facebook’s Distributed Data Store for the Social Graph

Bronson et al.

A read-heavy, eventually-consistent graph cache for a workload where "mostly correct, always fast" wins.

Read the paper →
SIGMOD, 2017

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases

Verbitski et al.

Moves redo logging into the storage layer and turns durability into the network’s problem, not the engine’s.

Read the paper →