Pattern or Anti-Pattern? The Big Ball of Mud
It’s lengthy, and I haven’t had the time to read through the whole thing, but this is a delightful look at the most common pattern in application architecture, the Big Ball of Mud:
While much attention has been focused on high-level software architectural patterns, what is, in effect, the de-facto standard software architecture is seldom discussed. This paper examines this most frequently deployed of software architectures: the BIG BALL OF MUD. A BIG BALL OF MUD is a casually, even haphazardly, structured system. Its organization, if one can call it that, is dictated more by expediency than design. Yet, its enduring popularity cannot merely be indicative of a general disregard for architecture.
These patterns explore the forces that encourage the emergence of a BIG BALL OF MUD, and the undeniable effectiveness of this approach to software architecture. What are the people who build them doing right? If more high-minded architectural approaches are to compete, we must understand what the forces that lead to a BIG BALL OF MUD are, and examine alternative ways to resolve them.
A number of additional patterns emerge out of the BIG BALL OF MUD. We discuss them in turn. Two principal questions underlie these patterns: Why are so many existing systems architecturally undistinguished, and what can we do to improve them?
Included in the discussion are such additional patterns as Throwaway Code, Piecemeal Growth, Sweeping It Under The Rug (aka hide it behind a facade), and more.
As someone who’s written my share of Big Ball of Mud applications, and spent time refactoring some of them into something a little less heinous, it’s good to see a both humorous and frank discussion of why so many applications end up this way.
As the authors note, good architecture is certainly something we should all aspire to use. But there are many reasons why we may not reach the pinnacle, and sometimes, that’s OK. I think this quote captures the idea well:
Not every backyard storage shack needs marble columns.
Which is not to say that we shouldn’t strive to do our jobs well, and right. Just that we also need to recognize that limitations and circumstances may not always allow us to achieve the ideal. So learn to love your Big Ball of Mud, even while you look for ways to make the next app a little less muddy.
[h/t Scott Allen]