And by that I mean, it has to account for more scenarios or do additional things... unless your software is growing in complexity while you're only removing features...
Bugs in software come from thinking we're simplifying the world in one way though the program, while in reality it receives a slightly different picture.
Faulty data models and system designs -- that aren't fixed -- lead to ever-increasing complexity. But that is the fault of the data model/designer.
I.e., there is a way to build (and grow) systems w/o linear increase in complexity -- but it takes a particular rare skill set.
I would say it's to construct simple enough systems, and the hallmark of skill is a developer's ability to define enough.
_One_ hallmark of developer ability is the discretion/wisdom/experience to know how flexible to make the thing. (How to prioritize and limit feature-creep, etc.)
But this is different than Simplicity. A general purpose programming language or database -- highly flexible/generic systems -- for example, can be built well/simple. But so can highly _specific_ systems.
In both cases though, one can build something that is decoupled and manipulable or one can build something that is coupled and rigid -- and the ability to do so is a function of skill set _not intrinsically_ a function of time. In other words, a skilled developer doesn't have to "take time" to deliver a Simple capability.
And sometimes it is good to have a replaceable head on the hammer.
A Hammer's construction can be Simple. A Knife's construction can be Simple. Or not.
In a sense, this post is simply stating the obvious.
The biggest differentiator of skilled software practitioners is the ability to construct simple systems.
To call this claim panglossian or meaningless is to hold the philistinic line that this skill set doesn't matter, that any complex system is effectively the same as any ol' simple one -- don't worry about cultivating the skill, it doesn't matter anyway...
But simplicity is the single most important thing that matters in any maintaining system other than one-off scripts, hack jobs, etc. -- It's absolute torture to collaborate on a software project with anyone who rejects this premise.