Learning Path

A guided journey through this wiki from foundational principles to distributed system design. Each stage builds on the previous.

How to Use This Wiki

For queries: Start in wiki/topics/ — synthesis pages connect concepts and answer “how does X relate to Y?” directly. Then drill into wiki/concepts/ for depth on a specific idea.

For learning: Follow the stages below. Each stage assumes the previous ones.

For reference: Use the Index or search by tag.


Stage 1 — Foundations of Good Code

Prerequisites: basic OOP (classes, inheritance, polymorphism, interfaces)

These principles define what “good” code looks like at the module level. Learn these before patterns.

ConceptWhy it matters
Separation of ConcernsThe oldest and most universal design principle
AbstractionThe mechanism that makes everything else possible
EncapsulationHow you protect invariants and hide change
Information HidingParnas’s insight: design to the secret, not the structure
Coupling and CohesionThe two metrics that measure design quality
Law of DemeterDon’t talk to strangers; keep coupling local

Topic: Software Design Fundamentals


Stage 2 — Design Principles

When to apply: before you write any non-trivial class

ConceptCore idea
Single Responsibility PrincipleOne reason to change
Open-Closed PrincipleExtend without modifying
Liskov Substitution PrincipleSubtypes must honour contracts
Interface Segregation PrincipleRole interfaces, not fat interfaces
Dependency Inversion PrincipleDepend on abstractions
DRY PrincipleSingle authoritative representation
KISS PrincipleSimplest thing that works
YAGNI PrincipleDon’t build what you don’t need yet
Composition over InheritanceFavour has-a over is-a
Dependency InjectionSupply dependencies from outside

Topics: SOLID Principles, Design Principles Overview


Stage 3 — GoF Design Patterns

When to apply: when building object-oriented systems in any language

Patterns are reusable solutions to recurring problems. Learn the GoF 23 as a vocabulary.

Creational — how objects are created

Singleton Pattern · Factory Method Pattern · Abstract Factory Pattern · Builder Pattern · Prototype Pattern · Object Pool Pattern · Lazy Initialization

Topic: Creational Patterns Overview

Structural — how objects are composed

Adapter Pattern · Bridge Pattern · Composite Pattern · Decorator Pattern · Facade Pattern · Flyweight Pattern · Proxy Pattern

Topic: Structural Patterns Overview

Behavioral — how objects communicate

Observer Pattern · Strategy Pattern · Command Pattern · Chain of Responsibility Pattern · Template Method Pattern · Iterator Pattern · State Pattern · Mediator Pattern · Memento Pattern · Visitor Pattern

Topic: Behavioral Patterns Overview

Master topic: Design Patterns Overview


Stage 4 — Application Architecture

Scale: a single deployable application

How to structure the internals of an application beyond individual classes.

ConceptCore idea
Layered ArchitectureHorizontal concern separation (Presentation / Application / Domain / Infrastructure)
MVC PatternSeparate model, view, controller responsibilities
MVVM PatternBind views to observable ViewModels; testable UI logic
Repository PatternAbstract data access behind a collection-like interface
Domain-Driven DesignModel the domain explicitly; Bounded Contexts, Aggregates
Clean ArchitectureDependencies point inward; framework-independent core
Hexagonal ArchitecturePorts and adapters; swap infrastructure without touching domain
Onion ArchitectureDomain at center; infrastructure at the outer ring
Vertical Slice ArchitectureOrganise by feature, not layer
Modular MonolithStrong module boundaries before splitting into services

Topic: Architectural Styles Comparison


Stage 5 — Distributed Systems & Microservices

Scale: multiple services, multiple teams

ConceptCore idea
Microservices ArchitectureVertical domain decomposition; independent deployment
Event-Driven ArchitectureAsync communication via events; choreography vs orchestration
CQRSSeparate read and write models
Event SourcingAppend-only event log as system of record
CAP TheoremConsistency, Availability, Partition Tolerance — pick two
Eventual ConsistencySystems converge without locking; BASE vs ACID
Distributed Transactions2PC and why Saga is the modern answer
Saga PatternDistributed transaction via compensating transactions
Conway’s LawYour architecture mirrors your org structure

Topics: Microservices Patterns Overview, DDD Building Blocks


Stage 6 — Reliability & Resilience Patterns

When to apply: any service that calls another service

ConceptCore idea
Circuit Breaker PatternStop calling a failing service; fail fast
Bulkhead PatternIsolate resource pools to contain blast radius
Outbox PatternAtomic state + event publication
IdempotencySafe-to-retry operations
BackpressureFlow control when consumers can’t keep up
Resiliency PatternsRetry, Timeout, Fallback, Hedging
Anti-Corruption Layer PatternProtect your domain from external model corruption

Topic: Cloud Design Patterns Overview


Stage 7 — APIs & Communication

Scale: service-to-service and client-to-service

ConceptCore idea
RESTFielding’s constraints; stateless; resources
GraphQLQuery language; client-specified shape; schema
gRPCProtocol Buffers; HTTP/2; streaming; contract-first
API Gateway PatternSingle external entry point
Backend for Frontend PatternPer-client-type API Gateway variant
Service MeshInfrastructure layer for east-west traffic

Topic: API Design Overview


Stage 8 — Messaging & Event Streaming

ConceptCore idea
Message QueuePoint-to-point async; decoupling producers from consumers
Publish-Subscribe PatternFan-out; topics; distributed Observer
Apache KafkaDistributed log; partitions; consumer groups; retention
Message BrokerRabbitMQ vs Kafka trade-offs
Enterprise Integration PatternsHohpe & Woolf taxonomy: channels, routers, translators

Topic: Messaging Patterns Overview


Stage 9 — Testing & Quality

ConceptCore idea
Test PyramidUnit → Integration → E2E; balance for speed and confidence
Test-Driven DevelopmentRed-Green-Refactor; design feedback loop
Consumer-Driven Contract TestingMicroservice integration verified without spinning up dependencies
Test DoubleMock, Stub, Fake, Spy, Dummy — Fowler’s taxonomy

Topic: Testing Strategies Overview


Stage 10 — Observability & Operations

ConceptCore idea
ObservabilityLogs + metrics + traces; know what your system is doing
Distributed TracingFollow a request across service boundaries
Twelve-Factor AppPrinciples for cloud-native, deployable apps
Infrastructure as CodeImmutable infrastructure; drift prevention
Continuous Integration and DeliveryCI/CD pipeline; deployment strategies
Architectural Decision Records (ADR)Record the why behind architecture decisions

Key People

The thinkers behind these ideas: