Big Ball of Mud


Big ball of mud?

Big ball of mud is the state of the system, which in other words can be described as “the mess”. Distant parts of the system interacting with each other, often breaking the original structure or with no structure at all. You know that you have one of these when you are trying to change or pull out to some other system one of the functionalities: you take one class, but quickly you realize that it depends on many other classes or modules, which of course need other parts. You end up with a net of unmanageable interdependencies.

There are many reasons for this to happen: bad architectural decisions, technical debt, rotation in the team etc. Although always considered an anti-pattern, in real life it is the every day job for many of us.

The term originated from the paper written in 1999 by Brian Foote and Joseph Yoder. According to Wikipedia it also has another meaning:

In discussion of the Lisp programming language the term big ball of mud is used differently, in this case to describe the malleability of a Lisp system. In Lisp, it is generally possible to:

  • Easily write macros that give you control over the language syntax, so that the notation looks closer to the problem’s domain
  • Use a data-directed programming style
  • Execute parts of a program at compile time rather than runtime
  • Save a system image of a modified Lisp implementation for future use

And this is something what I like. Although C# is my language of choice, I try to design with similar principles – making a solution as flexible as possible.
Big ball of mud? Yes, both meanings are familiar to me.


Written by bigballofmud

2009/01/01 at 6:43 pm

%d bloggers like this: