"A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-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."
This quote comes from in
Brian Foote and
Joseph Yoder's in their paper of the same name
What Techniques do you emply to avoid creating a Big Ball of Mud with your code?
Is Agile development the answer? Doing all your design up front, if so how? ... or just plain common sense?
Also why not tell us about your experiences, or hints and tips to help out if you come across one and need to fix it?
This is a common problem and everyone is going to have an opinion so why not let us know.
(Ideal thread for a first post!)