Designing Data-Intensive Applications

This book starts very good, author tells upfront what to expect.

I really like when from the beginning of the book everything is clear and straightforward.

What this is special about this book author speak about design, his whole major point that design small system first and only then do everything needed for scale of the system, first make runnable prototype and the later add capacity for scale.

I agree with this approach! No big design upfront!
This approach is one of the best when somebody design or create new platform/system.

Author compares advantages and disadvantages about where to store data on disk or in memory, memory nowadays is cheap and stable and sure having disks to store data important too, I like how author compares different approaches and thinking process how to solve typical problems during design process.

There is discussion about stored procedures in databases and how they can affect overall performance.

I like the style of the author it maintains the level of complexity but ensure to discuss major point and leaving rest for research for the reader.

Rest and XML is discussed too, of course I agree with author about the XMl, which is very verbose not every vendor have strict standard and actually SOAP is very old tech in comparison to REST which more comprehensive and rely only on HTTP protocol.

You will find the discussion of caches in distributed network.

Then there in deep discussion about side effects in modern enterprise software.

Author describes issue with concurrency in database world and how to go about!

I find interesting how author describe how to go about solving issues in such distributed networks.

The description of distributed systems was interesting, but I see there is no valid path, you make you assumption as clear as possible and try out the most suitable solutions.

The description of Unix tools was interesting.

I find very lengthily author description of messaging systems.
The whole “play“ on messaging systems is serialization and data accuracy , meaning data was processed as expected and the data never arrived too late.

Author describes topic of functional programming and why in some cases it can make a lot of differences, but he clearly describes the limitations of functional programming.

Finally in the last chapters there big analysis of database related problems, it has more theoretical value , but the overall presented ideas are not bad.

Author even mention the morals for software developers, because many of us developing in one way or another a tracking software and we should be aware, that such type of technology can be easily misused und that’s our developers responsibility to make sure, that we do software development , but without hurting or neglecting our morals and professional beliefs.

Summary: This is a semi theoretical book, it’s covers a lot of different topics, but it lucks crucial information how to solve most problems in distributed networks.

This book from time to time have good ideas, but the implementation not mentioned nowhere, so you need to derive your own solutions from presented theory and ideas which you have read in this book.

Whom I recommend this book?

Techleads, software architects , senior developers, scrum masters , everyone involved in active development work. IS this book mandatory ? No absolutely not, but if you want to know more about becoming good at software design , i think you should read it!