Index

One line per wiki page: - [[Page Name]] — summary. Update on every ingest.


Topics

(synthesis pages — start here for queries)

Meta / Navigation

  • Learning Path — 10-stage guided journey from design principles → distributed systems → observability

Design Patterns

Design Principles

Software Architecture

Microservices & Cloud

Domain-Driven Design

Testing & Quality

Reactive Architecture

Messaging & Communication

API Design

  • API Design Overview — REST vs. GraphQL vs. gRPC decision guide; versioning, contracts, maturity model

Concepts — Creational Patterns (GoF)

  • Singleton Pattern — one instance per JVM/process; eager/lazy/DCL/holder/enum variants; thread-safety
  • Factory Method Pattern — polymorphic factory method decouples creator from product; JDBC, Calendar examples
  • Abstract Factory Pattern — creates families of related objects; AWT/Swing, Spring ApplicationContext examples
  • Builder Pattern — step-by-step construction of complex objects; Director, Fluent, inner-builder variants
  • Prototype Pattern — clones objects without depending on concrete class; shallow vs deep copy; registry
  • Object Pool Pattern — acquire/release lifecycle for expensive resources; HikariCP, ThreadPoolExecutor examples
  • Lazy Initialization — defers creation to first use; DCL, holder class, Kotlin lazy, Virtual Proxy variants

Concepts — Structural Patterns (GoF)

  • Adapter Pattern — translates one interface to another; also Wrapper; Java I/O, JDBC, Spring MVC examples
  • Bridge Pattern — decouples abstraction from implementation; shapes×colours motivation; Java AWT examples
  • Composite Pattern — part-whole trees; clients treat leaves and composites uniformly; HTML DOM, React
  • Decorator Pattern — wraps objects to add behaviour dynamically; Java I/O streams, Spring Security chain
  • Facade Pattern — simplified interface over a complex subsystem; Spring JdbcTemplate, AWS SDK examples
  • Flyweight Pattern — shares intrinsic state; Java Integer cache, String pool, game engine particle pools
  • Proxy Pattern — controls access via same-interface surrogate; 6 types; Spring AOP, Hibernate lazy loading

Concepts — Behavioral Patterns (GoF)

  • Observer Pattern — subject broadcasts state changes to subscribers; Django signals, GUI listeners
  • Strategy Pattern — interchangeable algorithms; Java Comparator, Spring Security, payment systems
  • Command Pattern — request as object; undo/queue/macro; text editor undo, AWS SQS, DB transactions
  • Chain of Responsibility Pattern — sequential handler dispatch; web middleware, servlet filters, approval flows
  • Template Method Pattern — algorithm skeleton with variable steps; JUnit lifecycle, JdbcTemplate, data export
  • Iterator Pattern — uniform collection traversal; Java Iterable, Python generators, JDBC cursors
  • State Pattern — delegate to state object; vending machines, media players, TCP states, order lifecycle
  • Mediator Pattern — central hub eliminates O(n²) coupling; air traffic control, Redux store, MVC controller
  • Memento Pattern — opaque state snapshot for undo; Git commits, Photoshop history, Terraform rollback
  • Visitor Pattern — add operations to stable hierarchy via double dispatch; compilers, shopping cart tax

Concepts — Design Principles

Concepts — Architectural Styles & Patterns

  • Event-Driven Architecture — producers, brokers, consumers; choreography vs. orchestration; pub/sub vs streaming
  • CQRS — separate read/write models; Fowler’s caution; reporting database alternative; pairs with Event Sourcing
  • Event Sourcing — append-only event log as system of record; Fowler’s three capabilities; schema evolution pitfalls
  • Repository Pattern — collection-like data access abstraction; DDD usage; Unit of Work pattern
  • MVC Pattern — Model/View/Controller; fat controller anti-pattern; MVP/MVVM variants noted
  • MVVM Pattern — ViewModel holds observable UI state; data binding; WPF, Angular, SwiftUI, Jetpack Compose
  • Layered Architecture — horizontal concern separation; 3/4-layer schemes; sinkhole anti-pattern
  • Microservices Architecture — vertical domain decomposition; Fowler/Lewis 9 characteristics; migration strategy
  • Service-Oriented Architecture — business services + ESB; 7 guiding principles; orchestration vs choreography
  • Clean Architecture — concentric layers; inward-only dependencies; synthesis of Hexagonal/Onion/DCI/BCE
  • Hexagonal Architecture — ports (inbound/outbound) and adapters; Cockburn 2005; domain core isolation
  • Onion Architecture — Jeffrey Palermo’s concentric-layer variant; domain model at center
  • Modular Monolith — single deployable with strict module boundaries; MonolithFirst strategy; path to microservices
  • Vertical Slice Architecture — feature-oriented code organization; complements CQRS/MediatR
  • Serverless Architecture — FaaS model; event-driven execution; cost model; cold start trade-offs
  • Actor Model Architecture — actors + message passing; supervision hierarchies; Orleans/Akka.NET/Proto.Actor
  • Domain-Driven Design — strategic (Bounded Context, Ubiquitous Language) and tactical building blocks
  • Architectural Styles and Patterns — style vs. pattern hierarchy; monolith vs. distributed taxonomy

Concepts — Microservices & Cloud Patterns

  • Circuit Breaker Pattern — Closed/Open/Half-Open state machine; Fowler’s bliki; Resilience4j/Polly
  • Saga Pattern — distributed transaction via choreography or orchestration; compensating transactions
  • API Gateway Pattern — single external entry point; Microsoft’s routing/aggregation/offloading trio
  • Backend for Frontend Pattern — per-client-type gateway; solves API Gateway granularity mismatch
  • Strangler Fig Pattern — incremental legacy migration via facade; Fowler’s Queensland tree analogy
  • Sidecar Pattern — co-deployed peripheral container; language-agnostic cross-cutting concerns
  • Service Mesh — infrastructure layer for east-west service communication; data plane + control plane
  • Ambassador Pattern — sidecar variant for outbound call management; proxy helper services
  • Bulkhead Pattern — resource pool isolation to contain failure blast radius
  • Outbox Pattern — atomic state + event publication in one DB transaction; reliable at-least-once delivery
  • Inbox Pattern — consumer-side deduplication; exactly-once handler execution
  • Anti-Corruption Layer Pattern — translation layer protecting domain from external model corruption
  • Resiliency Patterns — Retry, Timeout, Fallback, Hedging; Polly/Simmy reference

Concepts — DDD Building Blocks

  • Bounded Context — explicit model boundary with ubiquitous language; strategic DDD cornerstone
  • Aggregate — cluster of domain objects with single root enforcing invariants
  • Domain Event — immutable record of a business fact; domain vs. integration event distinction
  • Value Object — immutable, identity-free domain descriptor; solves primitive obsession
  • Event Storming — collaborative workshop; Big Picture / Process Level / Design Level formats

Concepts — Distributed Systems Fundamentals

  • CAP Theorem — Consistency/Availability/Partition Tolerance trade-offs; CP vs AP systems
  • Eventual Consistency — BASE vs ACID; consistency spectrum; conflict resolution strategies
  • Idempotency — safe-to-retry operations; idempotency keys; idempotent consumers
  • Backpressure — flow control; throttle/buffer/drop/reject strategies; Reactive Streams
  • Distributed Transactions — 2PC mechanics and problems; Saga as the modern alternative

Concepts — Messaging & Event Streaming

Concepts — API Design

  • REST — Fielding’s 6 constraints; resource model; HTTP verb semantics; Richardson Maturity Model
  • GraphQL — query/mutation/subscription; type system; resolver model; N+1 problem; vs REST/gRPC
  • gRPC — Protocol Buffers; HTTP/2; 4 streaming modes; contract-first; vs REST/GraphQL table
  • API Design Principles — versioning strategies; backward compat rules; idempotency keys; HATEOAS
  • Richardson Maturity Model — Level 0–3 with examples; HATEOAS link anatomy; design principles per level

Concepts — Reactive Architecture

  • Reactive Architecture — Reactive Manifesto: Responsive, Resilient, Elastic, Message-Driven
  • Reactive Streams — Publisher/Subscriber/Subscription/Processor; backpressure via request(n); JDK 9 Flow
  • Reactive Programming — ReactiveX/Observable model; operators; Project Reactor; Spring WebFlux

Concepts — Testing

Concepts — DevOps & Infrastructure

Concepts — Observability

  • Observability — three pillars (logs/metrics/traces); observability vs. monitoring; OpenTelemetry
  • Distributed Tracing — spans, traces, context propagation; W3C Trace Context; Jaeger/Zipkin

Concepts — Software Design Fundamentals


People

  • Gang of Four — Gamma, Helm, Johnson, Vlissides; 1994 GoF book; 23 canonical patterns
  • Martin Fowler — named CQRS, Event Sourcing, Microservices patterns; Refactoring; PoEAA; Thoughtworks Chief Scientist
  • Robert C. Martin — SOLID principles, Clean Architecture, Clean Code; founding Agile Manifesto signatory
  • Eric Evans — Domain-Driven Design; Ubiquitous Language, Bounded Context, Aggregate, Domain Events
  • Alistair Cockburn — Hexagonal Architecture (Ports & Adapters); Crystal methodology; Agile Manifesto
  • Ward Cunningham — coined Technical Debt; invented Wiki; co-created Extreme Programming with Kent Beck
  • Kent Beck — Test-Driven Development; Extreme Programming; YAGNI; JUnit; four rules of simple design
  • Gregor Hohpe — Enterprise Integration Patterns; 65 messaging patterns; event-driven architecture
  • Chris Richardson — Microservices Patterns; Saga pattern; microservices.io; distributed data management
  • Edsger Dijkstra — Separation of Concerns; structured programming; semaphores; Turing Award
  • David Parnas — Information Hiding; modular decomposition criteria; 1972 CACM paper

Sources