Big Ball of Mud is an term that describes a system or computer program that has no real distinguishable architecture and is choking to death from all the mud that has been thrown on it to keep it alive.
Brian Foote and Joseph Yoder popularized the Big Ball of Mud term in their Big Ball of Mud paper. That paper defines the term as:
- "A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spagetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is shared promiscuously among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated. The overall structure of the system may never have been well defined. If it was, it may have eroded beyond recognition. Programmers with a shred of architectural sensibility shun these quagmires. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems."
Big Ball of Mud systems are developed over a period of time, by different individuals with different skill levels doing what they think is best at the time.
Foote and Yoder do not universally condemn Big Ball of Mud programming. They point out that this pattern is most prevalent because it works — at least for the moment. However, as they become caked with mud programs of this pattern become maintenance nightmares producing less and less reliable results.
Overtime if left unchecked, the mud will eventually choke the system to death.
Often the best thing to do when you encounter a Big Ball of Mud system is to learn what it accomplishes and from that start drafting requirements for a new well architected system.
By the way, times when technology shifts (procedural to OO programming, client-server to web-based, file-based to database, the introduction of the internet etc.) can provide good reasons to kill off the Big Ball of Mud system and move on. Often Big Ball of Mud systems can not effectively take on the new technology which introduces the opportunity to kill the old system and build a new well architected system.
Which brings us back to the .NET Framework. The .NET Framework is a technology shift - just ask any VB Classic programmer.
It you are responsible for a Big Ball of Mud system take another look at the .NET Framework.
It may be the road to your salvation.