Software Architecture#
Software architecture is the discipline of making high-level structural decisions about software systems. It defines how components interact, how data flows, and how the system evolves over time. Good architecture enables teams to deliver value quickly while maintaining quality attributes like scalability, maintainability, and resilience.
This learning path covers architecture from foundational concepts through advanced patterns, giving you the tools to design systems that stand the test of time and change.
What You’ll Learn#
| Section | Topic | Key Skills |
|---|---|---|
| 01 | Architecture Fundamentals | Quality attributes, C4 model, ADRs, architect’s role |
| 02 | Design Patterns | Creational, structural, behavioral patterns and anti-patterns |
| 03 | Clean Architecture | Dependency rule, hexagonal architecture, ports and adapters |
| 04 | Domain-Driven Design | Bounded contexts, aggregates, domain events, ubiquitous language |
| 05 | Event-Driven Architecture | Event sourcing, CQRS, sagas, eventual consistency |
| 06 | Monolith to Microservices | Strangler fig, modular monolith, database decomposition |
| 07 | Architectural Patterns | Layered, serverless, space-based, pipe-and-filter |
| 08 | Architecture Decisions | ADRs, fitness functions, evolutionary architecture, tech radar |
Prerequisites#
Before starting this path, you should be comfortable with:
- Programming fundamentals — proficiency in at least one object-oriented language (Java, Python, C#, TypeScript)
- Basic data structures and algorithms — understanding of complexity and trade-offs
- Version control (Git) — branching, merging, collaboration workflows
- Databases — relational modeling, basic SQL, understanding of NoSQL concepts
- Web fundamentals — HTTP, REST APIs, client-server architecture
- Basic cloud concepts — what cloud services are and why they exist
Recommended Learning Order#
Follow the sections in order. Each builds on concepts from the previous:
Fundamentals → Design Patterns → Clean Architecture → DDD → Event-Driven → Migration → Patterns → DecisionsWho This Path Is For#
- Senior developers looking to step into architecture roles
- Tech leads making system design decisions daily
- Architects wanting to formalize their knowledge
- Anyone preparing for system design interviews
Companion Resources#
- Fundamentals of Software Architecture — Mark Richards & Neal Ford
- Clean Architecture — Robert C. Martin
- Domain-Driven Design — Eric Evans
- Building Evolutionary Architectures — Neal Ford, Rebecca Parsons, Patrick Kua
- Designing Data-Intensive Applications — Martin Kleppmann