Wittgenstein famously said, "limits of my language are the limits of my world". For the majority of technology leaders, sadly, "limits of their silence are the limits of their understanding". The moment a jargon is casually verbalized, it stops being understood well. Just ask someone about how to address transactional complexity in so-called microservices land, where domain entities are somewhat scattered across various services. Anyone who just read a blog post would likely say "Saga". Anyone who built it would probably say "We used a messaging tool to transfer data". Anyone who'd built it and scaled it would take a pause and will go over how this is essentially a 2-phase commit problem, except to be solved with code rather than in database. Therefore, after two years of struggle with "replication lag" at scale they just refactored some objects and accepted about 0.1% failures addressed out-of-band with compensating transactions. Hire the third person!
Best modern software architecture book out there. Competence is reflected in rational negation - buzzwords are cool but what is the catch? If someone just excitedly lays out positives of a certain technology principle - say, microservices, or react - s/he could be a salesperson or naive or both! Neither would survive the long-term impact of a critical decision taken with, basically, "mimetic copying" - just because others were doing it. You would trust your leader more when she can contextualize the real-life challenges of a proposal. This is even more relevant for any _recent_ trend embraced suddenly.
This book thoughtfully compiles, explains a set of techniques you need to know as a CTO/VPE to build modern apps. Other arch books are too high level, or do not cover the breadth or preaches without practicing data. This has concrete design and code examples.
Most importantly, it shares where something is not a good fit. This is critical as we engineers choose shiny tech, the usage profile changes with time, and median tenure of engineers is 4 years. The choice, say - frontend-for-backend with 3 different API gateways, becomes someone else's problem down the lane. That person now hires 15 platform engineers to redo it. There goes the entire future cash flow.
My fav interview question is "What is the drawback of your favorite tech/framework/tool, and share a real-life example with how you conquered it". Every technology has its 'Annus horribilis'. Best engineers may not know Lamport Clock, but empirically or passionately answer how they successfully overcame the challenge of their go to technology in a real-life, complex domain. This book follows that philosophy and teaches how to do that with at least 20 or more modern technology primitives.
It shines the brightest especially in three areas - one, microservices essentially as a distributed architecture - and all the associated challenges thereof; two, how to minimize overhead-per-service - e.g., by, first, deploying a API gateway, and then, if polyglot, using a "service mesh"; three, how to deploy and manage with modern primitives like deploy-as-container and why that minimizes the bootstrap time. The chapter on observability/monitoring and looking at it from six different angles - distributed tracing to aggregated log and exception reports - alone is worth the price of entry. I have not come across a single book that walks through the ENTIRE lifecycle - with honest trade-off analysis and working domain model/code.
Simply brilliant.