The basic Darwinian tragedy of software engineering is this:
Beautiful code gets rewritten; ugly code survives.
Just so, generic code is replaced by its concrete instances, which are faster and (at first) easier to comprehend.
Just so, extensible code gets extended and shimmed and customized until under its own sheer weight it collapses, then replaced by a monolith that Just Works.
Just so, simple code grows, feature by creeping feature, layer by backward-compatible layer, until it is complicated.
So perishes the good, the beautiful, and the true.
In this world of local-optimum-seeking markets, aesthetics alone keep us from the hell of the Programmer-Archaeologist.
Code is limited primarily by our ability to manage complexity. Thus,
Software grows until it exceeds our capacity to understand it.
Because of this, creating large software systems requires making and enforcing decisions about problems beyond any one person's ability to understand. Making collective decisions is the core problem of society, government, and culture. After 14,000 years, we still fuck up a lot. As software eats the world, we should expect our collective decision-making systems to be badly stressed for the foreseeable future.
Perhaps we should expect true advances in software “engineering” only when we learn how better to govern ourselves.
To those who have a choice:
Refuse to work on systems that profit from digital addictions.
Refuse to work on systems that centralize control of media.
Refuse to work on systems that prop up an unjust status quo.
Refuse to work on systems that require unsustainable tradeoffs.
Refuse to work on systems that weaponize the fabric of society.
Above all, refuse to work on systems that understand and manipulate people, but offer no affordance for their subjects to understand and manipulate them.
Work on something that matters, if only to you.
Work on something that helps people, even in small ways.
Work on making things understandable.
Once, software let a lucky few of us escape to virtual worlds, choose our own communities, and explore alternate realities. These days, for better or worse, software defines everyone's reality. Let's build one worth living in.