Skip to main content

Coupling, complexity, delivery, and operational cost

Architecture moves cost; it rarely removes it. Compare options across the whole lifecycle and affected teams.

Trade-off matrix​

AttributeOption A: single app moduleOption B: feature modules
Initial deliveryFasterBoundary/build setup cost
OwnershipInformalCan be explicit
Build isolationLimitedPossible if graph/tasks support it
Navigation/contractsDirect/simpleStable APIs/adapters required
RuntimeFewer boundariesSimilar unless dynamic delivery
OrganizationalEasy for one teamBetter potential for multiple teams

Scores are conversation aids, not mathematics. Weight requirements, show evidence/confidence and run sensitivity analysis: if a small weight change flips the result, the decision is uncertain.

Costs to include​

Implementation, migration/coexistence, learning/hiring, cognitive load, clean/incremental build, test matrix, binary/startup/runtime, security/privacy review, observability/on-call, upgrades/deprecations, incident recovery, coordination and eventual exit.

Coupling is not inherently wrong. Cohesive code that changes together may belong together. Harmful coupling forces unrelated teams/features to coordinate, leaks unstable models, or makes failure propagate. Abstractions add concepts and indirection; spend them at volatile or ownership boundaries.

Team capacity is an architectural constraint​

A design needing a platform team, data scientists and 24/7 operations is invalid if one mobile team must run it. Prefer the simplest design meeting prioritized attributes with realistic skills and ownership.

Practical mistakes​

  • ❌ Optimize runtime while ignoring build/on-call/migration cost.
  • ✅ compare total lifecycle and opportunity cost.
  • ❌ maximize decoupling everywhere.
  • ✅ couple cohesive behavior; isolate volatility/trust/ownership boundaries.
  • ❌ use weighted scores to disguise predetermined preference.
  • ✅ expose assumptions and sensitivity.

Exercise​

Compare Room versus files, one module versus feature modules, and native versus KMP for a five-engineer app. Include three-year costs and reversal paths.