Unix pipe model: Each command is highly cohesive
(does one thing) and minimally coupled (communicates only through
stdin/stdout byte streams — data coupling).
cat file | grep pattern | sort | uniq chains four tools
with no shared state, no control flags passed between them, no knowledge
of each other’s internals. The result is a composable system that has
survived fifty years of change.
React component model: Components receive props (data coupling) and emit events (data coupling). A well-designed React component tree has components that do not directly read each other’s state. Violations — components that reach into sibling or cousin component state — produce the shotgun surgery smell when a UI change cascades across the component tree.
Microservices and database-per-service: The database-per-service pattern directly addresses content coupling. If each service owns its database schema, no other service can read or write it directly. Services communicate through published interfaces (APIs, events). The constraint is deliberate: it prevents content coupling from forming at the infrastructure level, forcing API design.
Shared kernel in enterprise systems: Many legacy enterprise systems have a shared database schema accessed by dozens of applications — an extreme case of common coupling. Every application has knowledge of every other’s storage format. Schema migrations require coordinating all applications simultaneously. This is the architectural form of the fintech failure described in the introduction.
Concept: Coupling and Cohesion Thread: T12 (Tradeoffs) ← Book 4, Ch 1 (System design tradeoffs) → Ch 13 (Domain-Driven Design boundaries) Core Idea: Coupling measures inter-component dependency; cohesion measures intra-component unity; the target state is high cohesion within components and low coupling between them, and the coupling type (data through content) determines the cost of a wrong boundary. Tradeoff: AT8 — Coupling/Cohesion: every boundary decision trades component responsibility against the number of coupling points; finer granularity means lower coupling but more interfaces to maintain. Failure Mode: FM4 — Data Consistency Failure: content coupling through shared state (especially shared database tables across services) allows one component to corrupt another’s invariants without detection. Signal: When a single logical change requires modifications in five or more separate files or classes, shotgun surgery is present and common or content coupling is the cause. Maps to: Reference Book, Framework 8 (Patterns)