Use when an existing codebase resists change: files that must be edited together across unrelated modules, circular or cross-layer dependencies, god modules, shared mutable state, persistence models leaking across boundaries, shotgun changes, tests that boot unrelated infrastructure, or architecture that keeps drifting.