Skip to content
Back to Books

Programming

Designing Data-Intensive Applications

by Martin Kleppmann

★★★★☆

This is one of the better books you can read

If you're tryna move from
"I can build applications"

Toward
"I understand how production systems actually work."

The Book Focuses heavily on:

  • Data models and query languages
  • Storage engines
  • Indexing
  • Replication
  • Partitioning / sharding
  • Transactions
  • Consistency
  • Distributed systems
  • Fault tolerance
  • Batch processing
  • Stream processing
  • Event-driven architectures

The important distinction is that it teaches
why these systems are designed the way they are
Rather than simply showing you how to configure them.

One Particularly Important Aspect

DDIA taught me that seemingly simple abstractions hide complicated machinery.

Take a database query:

SELECT * FROM users WHERE email = 'x@example.com';

At the application level, that's trivial.

But underneath, the database might be dealing with: SQL ↓ Query planner ↓ Index lookup ↓ B-tree ↓ Disk pages / memory ↓ Concurrency control ↓ Transaction isolation ↓ Replication ↓ Durability

Understanding this stack made things like database optimization much less mysterious.

The Chapters That Stood Out To me

Chapter 1: Reliable, Scalable, and Maintainable Applications
This gave me the vocab for thinking about system quality.

Chapter 3: Storage and Retrieval
This was extremely useful in helping me understand what databases are actually doing.

Chapter 5: Replication
This is very backend heavy.

Chapter 7: Transactions
Relevant for PostgreSQL and Prisma.

Chapter 8: The Trouble with Distributed Systems
Made me appreciate how many things can go wrong once you distribute computation across machines

The One Downside

It is not an easy book.

You can read 10 pages and feel like you've learned very little
Only to realize later that
You've encountered concepts that you keep recognizing everywhere.

It's not a book I'd recommend treating like a normal programming textbook.

Don't approach it as:

I need to memorize everything.

Instead:

I want to build a mental model of how large-scale data systems work.

One Important Caveat

The book was published in 2017
So I wouldn't use it as a source for the current details of specific technologies
The fundamental concepts remain highly Relevant
But modern systems have evolved considerably

E.g:

  • The conceptual material about Replication
  • Consistency
  • Transactions
  • Distributed systems
  • Storage engines
  • and Stream processing remain useful

While the exact capabilities or architectures of today's databases
And cloud services should be checked against current documentation.