A non-review of half of Designing Data-Intensive Applications

I read the first seven chapters of "Designing Data-Intensive Applications" before deciding to stop. It's about half of this hefty book. In the spirit of learning in public through this blog, I'll reflect on what I learned from this experience before putting the book aside.

Book cover

The book delves deep into the internals of databases and distributed systems. By dive deep I mean, really deep! It starts slowly with the first chapter covering reliability, scalability, and maintainability - the main concerns in these sorts of applications. From there it goes into covering types of databases (SQL, NoSQL, graph) and query languages, the techniques databases use to store data on disk, data serialization formats, replication, partitioning, and transactions. The list goes on, but I will stop here, because that's what I read.

The review part

This is a very well-written book that's easy to read and nicely structured. I'm impressed by how much the author knows and how well he explains complex ideas.

The book is very nuanced and detailed. The author leads the reader through historical context, covering issues and trade-offs in each topic. This makes the book very informative and gives you a deep understanding of the topics.

There's zero fluff in this book. Every bit of information serves a purpose. The author doesn't just state opinions; issues are discussed, solutions are explained, including trade-offs and historical context. Everything is supported with examples and references.

I also like how the book jumps into the details quickly. There's just enough introduction to set the stage, then it's straight into the meat of each topic. This keeps things engaging and lets the book cover a lot of ground.

The non-review part

So, why am I stopping, and what's with the "non-review" in the title?

When I picked up this book, I had two main goals:

Did I achieve these goals? Not really. The main issue is that I'm not in a position to learn well from this book right now. I understand what I'm reading, but I don't have hands-on experience with the problems it discusses and don't have the opportunities to tackle these challenges in my day-to-day work.

This makes it hard for me to really absorb the knowledge. I get it while I'm reading, but I forget it quickly because I can't see how to use it in my work. Compare this to the last technical book I read, "The Pragmatic Programmer" (see my review here). That book immediately impacted how I work as the concepts resonated with me and provided actionable solutions for many issues I face. There's just so much to learn and so little time. I can't justify spending time on a 500+ page book that doesn't help me right now, no matter how good it is.

Having said all that. Here are a few tips for my future self (and maybe for you too), in case I need to get on top of these topics in the future:

So, I'm putting "Designing Data-Intensive Applications" aside for now. But I do want to come back to it someday. First, I need to gain more experience and start dealing with some of the problems the book covers. I'm sure it'll be super valuable then.

To sum up, this is a great book, but it's not the right time for me to read it. I'll focus on resources that are more directly useful for my current work and immediate career goals. And when the time is right, I'll definitely pick this book up again.


This blog post was made with the help of Claude 3.5 Sonnet and GitHub Copilot.