Designing Data-Intensive Applications
An interactive study companion for Martin Kleppmann's classic on reliable, scalable, and maintainable systems.
Start with Chapter 14 chapters
Explore part5 chapters
Explore part3 chapters
Explore part10 case studies
Explore case studiesSystem Design Case Studies
Real-world architectures for YouTube, WhatsApp, booking systems, voting, multiplayer games, collaboration tools, multistep workflows, and long-running forms — with diagrams and TypeScript examples.
Curriculum
What we mean by reliability, scalability, and maintainability — and how they shape every data-intensive application.
Open chapterRelational, document, and graph models — and the query languages that bring them to life.
Open chapterThe data structures and storage engines that power databases under the hood.
Open chapterHow data is encoded, how schemas evolve, and how information flows between systems.
Open chapterLeaders, followers, quorums, and the consistency trade-offs of replicated data.
Open chapterSplitting data across nodes — key-range vs hash partitioning, rebalancing, and routing.
Open chapterACID, isolation levels, and the path to serializability.
Open chapterNetworks, clocks, and partial failures — why distributed systems are fundamentally uncertain.
Open chapterLinearizability, ordering, and reaching agreement in distributed systems.
Open chapterMapReduce, dataflow engines, and the Unix philosophy applied at scale.
Open chapterEvent streams, change data capture, and reasoning about time in motion.
Open chapterUnbundling databases, correctness, and building applications around dataflow.
Open chapter