Software Capex: The Cost of Flexibility
We tend to think of flexibility as a good thing. When it comes to interpersonal relationships, the ability to compromise is considered a sign of maturity. Shouldn't this be the case for software? After all, software is just a human solution to a human problem. Well, it turns out that it depends on what exactly we mean by "flexibility." Flexibility as software extensibility is generally positive. It's unlikely that we perfectly capture the problem space in an optimal fashion in the first go. We should strive to make our future selves' lives easier. Extensibility means, holding all else equal, building a version of the solution that is easier to expand upon in the future. This kind of flexibility is good. It means spending a little extra time now to save time in an ongoing fashion in the future. We'll return to this idea later. When by "flexibility" we mean producing a solution to an ambiguously defined problem, that's where we get int