Big ball of mud
A big ball of mud is a software system that has no discernible architecture. It is haphazardly structured, sprawling, and held together by expedient patches rather than a coherent design. Information is shared promiscuously across distant parts of the system, and nearly all the important state becomes global or duplicated. If an overall structure was ever defined, it has eroded beyond recognition.
The term was popularized by Brian Foote and Joseph Yoder in their 1997 paper "Big Ball of Mud", though they credit Brian Marick with coining it. They describe the pattern as "a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle" that shows "unmistakable signs of unregulated growth, and repeated, expedient repair".
A big ball of mud is an anti-pattern, but a distinctive one. Foote and Yoder argue it is the most common architecture in practice, the stable state a system reaches when other forces overwhelm deliberate design. Business pressure to ship, developer turnover, and software rot all push a system toward it. Left unchecked, the accumulating technical debt hardens into a structure where every change is a patch on a patch.
The pattern is related to but distinct from spaghetti code. Spaghetti code is
a tangle of control flow, classically the product of undisciplined use of
goto, which structured programming was
devised to curb. A big ball of mud is the same lack of discipline applied to
the whole system: not just control flow but modules, layers, and boundaries
have collapsed into one undifferentiated mass.
See also
- Complexity: a big ball of mud is the form that uncontrolled accidental complexity takes once it has set.
- Anti-pattern
- Software rot
- Technical debt
- Structured programming
References
- Foote, Brian; Yoder, Joseph (1999). Big Ball of Mud. In Harrison, Neil B.; Foote, Brian; Rohnert, Hans (eds). Pattern Languages of Program Design 4. Addison-Wesley.
- Wikipedia. Spaghetti code — Big ball of mud. https://en.wikipedia.org/wiki/Spaghetti_code#big-ball-o-mud