Complexity and why you should optimize for V&V
You might start off simply, but complexity is hard to control.
To give an example, below is a visualization of the various dependencies of Mercurial using a Python visualization tool called Snakefood. Mercurial is a well-designed tool, but not a particularly complex piece of software (and not "spaghetti code" despite the looks of the visualization of it in 2015).
However, as you look at its evolution, you see that the various dependencies have grown exponentially over the years, from a relatively simple map to an incomprehensible tangle of interconnections as new features and functions are created.
We help developers and organizations manage complexity through testing, training, and safety services...and there's no way around the fact that complexity happens, and happens quickly. And while this isn't a particularly novel insight, one thing that we have found is that almost everyone underestimates the implications of a complex, interconnected system.
You start off with a simple design, and before you know it, you have something that no single human could reasonably understand...and that's Mercurial in 2008. By 2015...
Here's the implication: Bugs will be left undiscovered, and in the end you’re going to spend more time on V&V than design. So optimize for super-efficient V&V.