This is a book that simply connects all the dots. It is a must-read for any software developer who aims to become an architect.
This book is a great recipe on how to become a decent software architect. It was such an enjoyable read that I regret this book wasn't a bit longer ;-)
I am amazed at how much knowledge and experience Maciej has condensed into its pages. It's like having 15 years of expertise distilled into a single volume.
What surprised me, though, was how many practical principles and useful tips I found for myself. What especially charmed me was the number of useful diagrams, behavior schemes, templates, and ready-to-use practices. Overall, it's probably my favorite "the next book" on Domain-Driven Design.
Most software architecture books in the market talk specifically about implementation patterns but Jedrzejewski takes the technical topic and layers in business domains, organizational concepts and structuring your delivery in a pragmatic book.
You know all the buzzwords - microservices, modular monoliths, Kubernetes, Kafka - but when it comes to connecting all of them, it feels like solving a puzzle with missing pieces.
You have read blogs and watched videos about architecture, but still can't confidently lead technical decisions on real projects.
In technical interviews for senior roles, you stumble when asked about system design and architectural patterns.
Your architecture decisions from last year already feel outdated and you are not sure how to evolve your systems without starting from scratch.
Your team looks to you for technical decisions, but you are not fully confident if you are making the right long-term choices.
This is not just another theoretical architecture book. It is your practical guide to mastering real-world software architecture, built from years of hands-on experience and battle-tested approaches. In short, this book bridges the gap between where you are and where you want to be.
You will learn how to confidently discuss architectural decisions, handle trade-offs, plan architecture for various team setups, and present your solutions. You will develop a reliable framework for making architectural choices that stand the test of time. Through detailed case studies and practical examples, you will learn how to make decisions that your future self (and team) will thank you for.
You will learn a clear, systematic approach to understanding how different concepts fit together. Through real-world examples, you will see exactly how to combine Event Storming, Domain Storytelling, Domain-Driven Design, microservices, event-driven approach, canary releases, blue-green deployments, CQRS, and many more, into cohesive, maintainable systems.
You will discover proven strategies for evolving architectures without disrupting existing systems. Learn how to gradually modernize applications, split monoliths, and adapt to changing requirements while keeping your systems running smoothly.
In this step, you will learn the basics of software architecture, covering key areas like business analysis, solution architecture, and infrastructure. You will understand the role of software architects, their influence on architectural decisions, and the impact of drivers like functional requirements, technical constraints, and quality attributes while exploring how pragmatism and holism shape these decisions.
Next, we will explore the critical aspect of system design: the business domain. Through workshops on Event Storming and Domain Storytelling, you will learn to analyze processes, discover subdomains, define bounded contexts, and create a context map (strategic Domain-Driven Design).
Step three focuses on understanding your work environment, including decision-making processes, project goals, budget limitations, and differing expectations of stakeholders and development teams. You will assess team skills with a competency matrix, plan infrastructure for various team setups, and learn to calculate crucial metrics like active users, request numbers, and SLA-defined availability, then apply this knowledge to a practical case.
In this step, we explore the technical aspects of software architecture, focusing on single and multiple deployment unit strategies and their most popular representatives: modular monoliths and microservices. You will learn about communication methods, database design, deploying changes, scaling applications, and key patterns like outbox, inbox, and dead letter queue.
Step five focuses on delivering new application versions using strategies like basic, blue-green, canary, and rolling deployments and leveraging continuous delivery and deployment. You will adopt engineering practices such as swarming, pair and mob programming, feature flags, trunk-based development, and short-living branches. You will also learn how to organize post-mortem meetings to analyze past production issues and prevent future ones. I will also show you how to handle changes in the database in case of various versions of the application.
This step covers different ways to test your software, focusing on key concepts from a software architect's perspective. You will learn about the pyramid of tests, the inverted pyramid, the diamond, when to use each, penetration, performance, and load testing to ensure software reliability.
This step highlights that architecture evolves over time, focusing on four key steps: simplicity, maintainability, growth, and complexity. You will learn helpful concepts like CQRS, database replicas and sharding, and tactical Domain-Driven Design to ensure your application's robustness and support informed decision-making as it evolves with the business.
In the final step, you will learn about common security vulnerabilities in greenfield and legacy applications, such as IDOR, supply chain attacks, SQL injection, XSS, and DDoS. You will also explore defense strategies, misconceptions leading to vulnerabilities, and the differences between encoding, encryption, and hashing to select the appropriate mechanism for your needs.
This section covers important engineering practices that didn't fit into the main body of the book. You will learn about metrics, developer carousels, effective use of vertical slices in product design, and managing technical debt.
To master software architecture, you need to put theory into practice. I have prepared several real-world scenario exercises to challenge you, validate your understanding, and highlight areas for further study, enhancing your learning journey.
Join hundreds of engineers who transformed from code-focused developers into confident architects.