14. Doing the Right Thing
14.7 The book, in one page
| Ch | What it established |
|---|---|
| 1 | Trade-offs. Operational vs analytical; cloud vs self-hosted; distributed vs single-node; business needs vs user rights |
| 2 | Nonfunctional requirements. Performance (percentiles, tail amplification), reliability (fault vs failure), scalability (no magic sauce), maintainability (operability, simplicity, evolvability) |
| 3 | Data models. Relational, document, graph, event sourcing, DataFrames; SQL, Cypher, SPARQL, Datalog, GraphQL |
| 4 | Storage engines. LSM-trees and B-trees for OLTP; column-oriented for analytics; inverted, multidimensional, and vector indexes for retrieval |
| 5 | Encoding and evolution. Backward/forward compatibility; JSON vs Protobuf vs Avro; dataflow through databases, services, workflows, and events |
| 6 | Replication. Single-leader, multi-leader, leaderless; replication lag anomalies; conflict resolution; version vectors |
| 7 | Sharding. Key-range vs hash; rebalancing; request routing; local vs global secondary indexes |
| 8 | Transactions. ACID's ambiguity; the anomaly table; serial execution, 2PL, SSI; 2PC and why XA fails |
| 9 | The trouble with distributed systems. Unreliable networks, unreliable clocks, process pauses; quorums, fencing, Byzantine faults; system models, safety vs liveness |
| 10 | Consistency and consensus. Linearizability and its cost; logical clocks; the equivalence of consensus, CAS, shared logs, and atomic commit |
| 11 | Batch processing. Unix tools → MapReduce → dataflow engines; the shuffle; workflow orchestration; serving derived data |
| 12 | Stream processing. Log-based brokers; CDC and log compaction; event time vs processing time; the three join types; exactly-once |
| 13 | A philosophy. Unbundling the database; write path vs read path; integrity without coordination; the end-to-end argument; trust but verify |
| 14 | Doing the right thing. Predictive analytics, bias, feedback loops, surveillance, consent, data as a toxic asset — and the responsibility that comes with all of the above |
"Given the large impact that software and data have on the world, we as engineers must remember that WE CARRY A RESPONSIBILITY TO WORK TOWARD THE KIND OF WORLD THAT WE WANT TO LIVE IN: A WORLD THAT TREATS PEOPLE WITH HUMANITY AND RESPECT. LET'S WORK TOGETHER TOWARD THAT GOAL."