‘Decision debt’ is when we defer decisions to some later date.
Applying strategic mediocrity to software development is all about accruing as much decision debt as possible. Because making decisions is a lot of work: weighing tradeoffs, imagining the future, avoiding pitfalls. The fewer decisions we make, the better.
There’s a kind of decision debt I call ‘configuration fatigue’. It’s when most decisions are already made for you, because defaults. But you’ll suffer unforeseen consequences for having accepted those defaults.
Consider configuring a powerful piece of infrastructure software. Like Nginx or MySQL. The number of configuration options are simply mind-boggling.
So we use the defaults. We change the few configuration options that we understand. And we remain ignorant about the rest.
But those configuration options gnaw at us…
Every time a bug appears, we wonder: did I misconfigure something?
And then you go to deploy the system into production. Your backlog full of important features and bugfixes, deferred until after shipping.
That list of unknown configuration options looms large.
And that is configuration fatigue. I don’t know any cure for it. Other than learning a model of every single configuration option, and a large chunk of the behavior of the component being configured.
It’s an unavoidable, fundamental problem of building on top of a software stack.
And this problem pops up everywhere: OpenGL / DirectX / Vulcan state, CSS defaults, C/C++ compiler flags, CMS setup, SQL table creation, to name just a few.