Cruft is avoidable software complexity: the gap between a system’s current code and its ideal structure or implementation, without changing intended functionality. It makes software harder to understand, riskier to change, and more expensive to maintain. section 10.2.2
Cruft commonly appears as:
- Poorly defined boundaries and interactions between parts of a system. section 10.2.2
- Tight coupling, bad naming, and monolithic code spanning multiple subdomains. section 10.2.2 section 10.3.7
- Complexity accumulated in a supporting subdomain whose maintenance cost exceeds its business differentiation. section 10.3.7
A frustrating penalty model
Gran Turismo’s online penalty system illustrates complexity that is not necessarily cruft: the user need is clear, but designing rules that handle cutting corners, crashes, and collisions fairly remains intrinsically difficult. Cruft concerns avoidable complexity that could be removed without changing functionality. section 10.2.2
When a supporting subdomain has high complexity, first question whether cruft or a prioritization mistake is consuming investment. If the subdomain must keep evolving, reducing complexity enables change; if not, a smaller team may simply maintain it. Tightly coupled systems require coordinated modernization across affected subdomains rather than fine-grained team strategies. section 10.3.7
Use the suspect supporting pattern to identify subdomains whose complexity and maintenance cost may be driven by accumulated cruft. section 10.3.7

