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#

SectionTopicKey Skills
01Architecture FundamentalsQuality attributes, C4 model, ADRs, architect’s role
02Design PatternsCreational, structural, behavioral patterns and anti-patterns
03Clean ArchitectureDependency rule, hexagonal architecture, ports and adapters
04Domain-Driven DesignBounded contexts, aggregates, domain events, ubiquitous language
05Event-Driven ArchitectureEvent sourcing, CQRS, sagas, eventual consistency
06Monolith to MicroservicesStrangler fig, modular monolith, database decomposition
07Architectural PatternsLayered, serverless, space-based, pipe-and-filter
08Architecture DecisionsADRs, 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

Follow the sections in order. Each builds on concepts from the previous:

Fundamentals → Design Patterns → Clean Architecture → DDD → Event-Driven → Migration → Patterns → Decisions

Who 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