Software design paradigms tend to ignore the idea of limiting complexity.
What is too much, and just enough? When should we not integrate? The correct answer is only as much as needed to get the job done, and AvoidIntegration? if unnecessary.
What this means in practice is using a lot of existing wheels (not ReinventingTheWheel). As a result, this sometimes means not coding at all. In many cases the need for a unique solution outweighs the off the counter solutions - in which case we make sure that we exhaust all standard APIs and data representation/encoding options before inventing our own. At each level, we ratchet up the complexity only as needed, and no more.
This seems to fly in the face of traditional practices where process, regardless of the complexity involved, rules the day.
Another way of expressing this, at first blush, is DoTheSimplestThingThatCouldPossiblyWork. However, this only approaches obliquely what is the right solution versus what is the simple solution. I believe these are two different things that may or may not coincide over the lifetime of a project. -- MalcolmCampbell (I didn't like the way I said that - but it will have to do until I can come up with something better)