Everything is terrible, especially software

Everything new is broken.

one of Jerry Weinberg’s maxims

This happens because every other part of the world hasn’t adapted to the new thing, and the new thing hasn’t adapted to the world it’s in. That newfangled 3D printer worked fine in the lab, but it wasn’t ready for ambient cat fur, and my computer wasn’t ready for its drivers, and I wasn’t ready to program it.

Everything old is stupid.

this is me

Years later, that same device is full of historical reasons. Options that mattered at first but don’t make sense now. Deprecations that still operate just in case someone plugs in a certain computer that I don’t use anymore. Safeguards that seem useless, but maybe wouldn’t if we turned them off and a brown-out made its electricity wobble.

Everything new is not yet adapted to the environment, nor the environment to it; everything old is adapted to an environment that no longer exists.

This explains why software is so terrible: it changes faster than anything physical, so it’s always new. And it’s built on a trusted foundation, so it’s always old.

Good software evolves over years. Yet even at the beginning, it’s built out of components that are old. And to be useful, it has to integrate with systems new (and broken) and old (and stupid).

Then again, “stupid” is a description of our relationship with a thing: we don’t know the reasons. And “broken” is a function of our (environment’s) relationship with the thing: we don’t know how to use it smoothly.

It’s a continual negotiation, an endless journey from broken to antiquated. This is Progress. Try to enjoy it, between screams of frustration.