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.