Idealistic Mess Versus Lazy Mess
In pondering "systems that went wrong", I've noticed certain patterns in how they go wrong and patterns in the symptoms. I'll propose a UsefulLie dichotomy between idealistic messes and "lazy" messes.
Idealistic, GoldPlating, and MentalMasturbation messes:
-
Difficult to figure out what any piece of code does
-
Difficult to trace the impact of a change due to too many layers of indirection
-
Wrong abstraction used, resulting in big DiscontinuitySpikes. Some changes that fit the abstractions are quite easy, others are nearly impossible.
-
Unlike lazy messes, you spend more time studying code than typing code to fix it.
-
Inconsistent use of different paradigms or techniques.
-
Lots of wasted code for dead-end or unfinished concepts.
Lazy messes:
-
Lot's of violation of OnceAndOnlyOnce, so prepare to type a lot to change or fix.
-
Generally a consistent pattern
-
Lots of code to do relatively little
-
Lots of similar-looking IF statements or viney, repetitious sub-classing for endless exceptions to the rule.