Thermodynamics of Software Complexity
As an industry, we tend to obsess over complexity and how to reduce it, but that may not be the ideal frame of mind.
During early iterations, we may come up with a design which is strictly better than another, but we rapidly exhaust these low hanging fruits. We end up with many local optimums, without a clear global one.
If we conclude that one these alternatives is the global optimum, it is often a contextual judgment. In other words, we are faced with tradeoffs, and decide that some dimension is more valuable than another.
Once we reach the stage where we compare refined alternatives, then we usually don’t have any opportunity left to reduce complexity, but rather, we merely move it around. We may think we reduced it but that could be an illusion due to complexity having moved outside our scope of ownership (e.g. we dumped the complexity on the users, instead of solving it).
Software is like a thermodynamic system. You cannot just increase temperature while keeping everything else the same. Increasing temperature will also increase pressure. If you increase temperature while keeping pressure fixed, then you’ll need a larger volume, and so on. Something's gotta give.
How do you navigate these design comparisons when something seems too good to be true and some side effect may be hidden?