3 great books on Software Architecture
Having survived an intensive year of designing, developing, shipping and operating numerous cloud-native microservices at scale, makes me appreciate the books that helped me step up my engineering game.
The following 3 books are by far the best resources on software architecture you can add to your TODO list. They are ideal for all software engineers and technical architects who deal with any kind of cloud / distributed systems.
Full disclosure: the following are Amazon affiliate links. Using them to purchase a book won’t cost you extra, but will help me buy more books.
Clean Architecture: A Craftsman's Guide to Software Structure and Design
Uncle Bob strikes again! I had been waiting for this book for about a year, and had set high expectation. It ended up exceeding my expectations and providing value in areas of technical architecture I was completely oblivious about.
Discover what architecture is really about, and most importantly what it is not about. Learn the difference between architecturally critical elements and mere details. Get to know how important are layers and boundaries, and how to successfully define them. Brush up on numerous design principles for tackling function, component separation, and data management. Finally, become familiar with common architectural failures of the Industry, and figure out how prevent or face them.
Whether you are tasked with designing a new architecture or executing a design that someone else came up with, Clean Architecture is where you want to start from. It’s a pleasant read that I was able to finish cover to cover within just a few days. If you haven’t already, also check out the the other two book of the series, Clean Code (Amazon affiliate link) and The Clean Coder (Amazon affiliate link) (not prerequisites for reading Clean Architecture).
Building Microservices: Designing Fine-Grained Systems
Sam Newman has put together an excellent guide which is now considered a classic, explaining all the ins and outs of moving from monolithic systems to smaller, fine-grained and self-contained services.
I highly recommend this book, especially for those who haven’t worked with microservices before or have just gotten a taste and would like to see the bigger picture.
It is a relatively short book, and I managed to finish it in less than a week. It doesn’t focus on code but rather makes the case about the new set of practices, challenges and plenty of potential pitfalls that come with this given architectural style.
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
This is an extremely valuable read, not only for architects, but also for those who work with microservices or any distributed application that revolves around data.
Today, data is in the heart of most challenges related to systems design. Architects have plenty of data-centric challenges to tackle, including scalability, consistency, reliability, efficiency, and maintainability. On top of that there are numerous platforms and tools that can be leveraged to achieve each project’s design goals, including relational / document / graph databases, stream / batch processors, web APIs and message brokers.
Martin Kleppmann not only helps you make sense of all the buzzwords, but also guides you through this diverse landscape by doing deep dives of how each piece of technology works under the hood, what are their pros and cons, and under which circumstances it is a good idea to use them. Apart from the theory, the book comes with plenty of practical advice you can start leveraging on your day to day work right away.
As of today, this is the most well-written, comprehensive and modern book about working with data. It’s destined to become a classic.
Got any book suggestions of your own? Don’t hesitate to drop a line in the comments below! And if you’re hungry for more, have a look at at my full hand-picked collection of recommended books for Software Industry professionals. Happy reading!