A Map of Architecture Patterns for Developers and Tech Leads

When you join a microservices project, you quickly notice a characteristic detail. Every developer understands clean architecture differently. One tries to squeeze CQRS into a three-page CRUD, another builds a monumental domain with a dozen layers of wrappers, and a third solves coupling problems through Event Sourcing. For a team to speak the same language, you need a unified knowledge base.
Each of us has dozens of article and video links bookmarked. The problem is that these materials get lost quickly. The author of the awesome-software-architecture repository, Mehdi Hadeli, solved this problem: he compiled a structured collection of system design materials in one place.
What the repository is
This is an open knowledge base with links to articles, tutorials, books, and code examples. The project has gathered over 11,000 stars on GitHub. Unlike standard Awesome-style directories, it doesn't just structure general topics—it covers specific patterns and architectural decisions.
Developers also launched a separate website awesome-architecture.com where reading materials is more convenient than in Markdown files.
Main sections of the collection
Architectural styles and approaches
The repository breaks down ways to organize code in detail:
- Monoliths and microservices. From the classic Monolith to the Modular Monolith concept, which helps prepare code for eventual splitting.
- Layered architectures. A breakdown of differences between Clean Architecture, Onion, and Hexagonal.
- Vertical Slice Architecture. An approach that groups code around business features rather than technical layers.
- Actor Model. Principles of actor operation with examples using Akka.NET, Orleans, and ProtoActor frameworks.
Domain-Driven Design and CQRS
The DDD section turned out to be the most detailed. The author broke down Eric Evans's concept into its component elements. The catalog has materials on strategic design (Bounded Context, Ubiquitous Language) and tactical patterns (Aggregates, Value Objects, Domain Services). Anti-patterns like Anemic Domain Model are covered separately.
A dedicated block is allocated for the CQRS topic, addressing read/write model separation, data consistency, and its connection to Event Sourcing.
Distributed systems and clouds
When designing cloud services, the Cloud Design Patterns section will come in handy:
- Resilience patterns: Circuit Breaker, Bulkhead, Retry.
- Messaging: Outbox, Inbox, Saga, Change Data Capture.
- Network components: API Gateway (Ambassador, Kong, Ocelot), Service Mesh (Istio, Linkerd), and load balancing solutions.
The collection also includes materials on infrastructure tools: Kubernetes, Terraform, Nomad, Kafka, RabbitMQ, and NATS.
Observability and reliability
A separate section is dedicated to Observability. It contains articles on end-to-end tracing via Correlation ID, log collection through ELK, EFK, Fluent Bit, and Grafana Loki stacks. Additionally, it covers back pressure and building fault-tolerant systems.
Features and nuances of the collection
You'll encounter tables marked TODO in the README itself. Don't be alarmed: articles on these topics are already in the docs folder. Navigation is well-organized, with materials distributed across directories, making it easy to find the topic you need via search.
The repository's weak point is a noticeable bias toward the .NET stack in the framework-specific sections. Libraries like Steeltoe, MassTransit, or CAP are frequently mentioned there. However, the fundamental concepts are the same everywhere. They work for projects in Go, Java, Python, or TypeScript.
How to use the catalog in practice
- Preparing for System Design interviews. The collection covers most questions asked in architectural sections.
- Reference for designing systems. Helps refresh your memory on the difference between actors and classic services, or choose the right messaging pattern.
- Onboarding and team training. Links from the repository work as a reading list for immersing developers in the project's architecture.
The awesome-software-architecture repository will be useful for developers transitioning from writing functions to designing systems. Bookmark the project so that the right article on patterns is always at hand.
Related projects