Listening to Udi Dahan on Deep Fried Bytes Episode 49, I heard Udi say something very simple, but very important.

When people hear the word “simple” they translate that in their head to easy. So when someone talks about “Keep it simple” they think the message is “Keep it Easy”. But, keeping things simple is not easy at all.

Evolved complexity is the easiest thing in the world to develop. Just start with a clean, freshly developed system and start adding features and fixing bugs, doing the regular maintenance the system requires. Make sure you seldom look at the bigger picture and never ever take the time for a significant refactoring or to change one of your architectural decisions. Always work under significant time pressure, and do just enough to get the next feature working or the bug fixed.

In just a few years you’ll have a system that is extraordinarily complex, with layers upon layers, temporal dependencies between seemingly unrelated functions and business rules scattered throughout the system from the user interface to the database. You’ll also have a system that is costly to maintain, and a codebase where some areas are signposted “Abandon All Hope” because no-one quite understands how they work anymore.

Avoiding this chaos is simple - but not easy.

To avoid the chaos of an unmaintainable system involves incurring costs up front and on an ongoing basis as you invest in maintaining the simplicity of the system and in actively countering unnecessary complexity as it arises.

The payoff for this investment can be huge, as your system will age well and you will be able adapt it to changing business needs because it won’t become ossified and difficult to work on.

Looking after your codebase in this way is a wise investment - but it can be difficult to achieve, especially if (when!) budgets are being squeezed.

Comments

blog comments powered by Disqus
Next Post
Attack of the Lazy Coder  20 May 2010
Prior Post
Gadget Envy  15 May 2010
Related Posts
Browsers and WSL  31 Mar 2024
Factory methods and functions  05 Mar 2023
Using Constructors  27 Feb 2023
An Inconvenient API  18 Feb 2023
Method Archetypes  11 Sep 2022
A bash puzzle, solved  02 Jul 2022
A bash puzzle  25 Jun 2022
Improve your troubleshooting by aggregating errors  11 Jun 2022
Improve your troubleshooting by wrapping errors  28 May 2022
Keep your promises  14 May 2022
Archives
May 2010
2010