A big part of what we’re all trying to do is bring the complexity of our systems and working environments way down compared to that of the established industry. Complexity is a tricky concept, however, and I believe it is wise to understand when it is and isn’t okay to play the “too complex” card.
Bill de hÓra introduced me to the idea
that’s not simple argument is often not very different
that won’t scale argument we’ve all come to despise:
These days we are all complexity experts and simplicity mavens. Once upon a time a popular way to trash somebody’s technical design without having to bother to present a cogent argument was to point at it and say it would never scale. Today we just can call designs we don’t like complex - that’s even better because while it’s unlikely to happen, you can actually have a meaningful conversation about scale. Complexity on the other hand is comparatively vague - indeed there is only one simple definition of simplicity for software.
But David Meggison does an excellent job of describing why the simplicity argument is a healthy way of thinking about systems anyway:
… it’s really a fundamental change in the burden of proof (in the popular sense of the obligation to defend a position). With the rise of agile development and worse is better, we’ve shifted from “required until proven unnecessary” 10 years ago to “unnecessary until proven required” today, and I think that’s a change for the better — after all, if we’re uncertain either way, we might as well pick the option that requires less time and money. So when people say “the project is too complex,” what they’re really saying is “prove to me that these features are justified.”
He goes on to talk about the relationship between “unnecessary until proven required” and The Presumption of Innocence, which is widley considered to be an essential right of peoples belonging to a democratic society.
I propose that we adopt “unnecessary until proven required”, which is perhaps also known as YAGNI, as one of the “strength traits” that help ensure the successful evolution of a system.