Heuristic
Break a dependency before optimizing inside it
Coupling can dominate local efficiency.
When it fits
- When local performance tuning keeps failing because every change waits on another component or organization.
When to avoid it
- Modularity trades coordination inside a boundary for coordination across interfaces. Do not split systems simply to make diagrams or org charts look cleaner.
Why it matters
Before squeezing another few percent from a component, test whether removing, stabilizing or making asynchronous a dependency would reduce larger coordination and waiting costs.
An example
A team spends days coordinating a synchronous approval for a task that takes minutes; decoupling the approval path matters more than optimizing the task.
Check your result
The selected optimization targets the larger end-to-end cost rather than the most visible local step.
Keep this limit in mind
- Modularity trades coordination inside a boundary for coordination across interfaces. Do not split systems simply to make diagrams or org charts look cleaner.
Connected ideas
Useful withKeep reversible experiments behind a boundary
Evidence and sources
Provides context
Simon described complex systems as often hierarchical and near-decomposable, motivating analysis of relatively strong within-subsystem interactions and weaker cross-subsystem interactions.
Near decomposability is a conceptual property, not evidence that any chosen boundary is correct.
The Architecture of Complexity · Near-decomposability discussion