Master Software Architecture: A Pragmatic Guide
Rated 5 stars by tech experts:
It's like having 15 years of expertise distilled into a single volume. Every piece of information in this book is highly relevant.
It stands out for its pragmatic start-to-finish approach. It's a practical resource, perfect for those beginning their architecture journey.
I learned a lot and I had fun during it of, and I heavily recommend the reading of this book.
You can find your architectural leveling-up cheat code on Leanpub.
Feeling lost in the world of software architecture? This software architecture book is for you!
Years ago, I felt lost when I started in software architecture. There were so many topics and issues, and I was a novice architect in the middle. I didn't know where to start building applications, what key areas to pay attention to, or how to build systems that would be able to evolve over many years.
I have spent countless hours and days learning to recognize this area, and it has not been easy—knowledge was scattered throughout the Internet, books, and tutorials. Finally, mentors helped me get on the right track.
That's why I decided to write this software architecture book. I want to help you navigate this complex world of hard decisions, trade-offs, and techniques that will support you in this fantastic journey. I wish you didn't have to make the same mistakes as me and give up your private life by spending many hours looking for the right information. Each step describes practically the most important aspects of software architecture.
What Will You Learn About
Step 1: Understand Software Architecture
In this step, you will learn the basics of software architecture, covering key areas like business analysis, solution architecture, and infrastructure. You'll 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.
Step 2: Discover Your Business Domain
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 3: Recognize the Environment Around You
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.
Step 4: Choose Deployment Strategy
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 5: Define Release Strategy
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,
Step 6: Focus On Testing
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.
Step 7: Evolve Your Architecture
This step highlights that architecture evolves over time, focusing on four key steps: simplicity, maintainability, growth, and complexity. You'll 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.
Step 8: Don't Forget About Security
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'll also explore defense strategies, misconceptions leading to vulnerabilities, and the differences between encoding, encryption, and hashing to select the appropriate mechanism for your needs.
Extra 1: Other Engineering Practices
This section covers important engineering practices that didn't fit into the main body of the book. You'll learn about metrics, developer carousels, effective use of vertical slices in product design, and managing technical debt.
Extra 2: Architecture Exercises
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.
I would highly appreciate your feedback! You can do it through Linkedin :)
Detailed information
- Buy it today on Leanpub and ramp up your architecture skills!
- Number of pages: 400
- Author: Maciej 'MJ' Jedrzejewski