Hacker News new | ask | show | jobs
by neocodesoftware 2196 days ago
"systems accrue debt" statement is thrown out but not supported

but two earlier statements could be used

1. management put up roadblocks for authorization to improve quality - keeping bad code longer

2. management rushed through bad code, more tech debt to fix later

i think this relates to joseph tainter's collapse complex civilizations declining marginal returns

re: 80 hours to add a text

there are declining marginals returns - yes because of complexity - but specifically because of total tech debt and increase of tech debt from at least the two points remy made

3 comments

The key offering here is a tangible metric for real costs: dedicated FTE positions.

The questions of what debt is, what systems are, and what systemic debt are, deserve deeper inquiry, I'll allow. The notion of techical debt's been floated going back at least to Ward Cunningham (http://wiki.c2.com/?TechnicalDebt), and strikes me as highly useful.

Obvious cognates to both financial and evolutionary systems. As well as, as you note, Tainter's work on complexity.

Another point I've seen increasingly made of late, particularly post-Covid19, is of the conflict between efficiency and resilience.

Other references:

Martin Fowler, TechnicalDebt https://www.martinfowler.com/bliki/TechnicalDebt.html

Wikipedia: https://en.wikipedia.org/wiki/Technical_debt

The Technical Debt Community: https://web.archive.org/web/20180718121933/http://www.ontech... (archive).

Numerous HN discussions: https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...

Reddit search: https://old.reddit.com/r/dredmorbius/search?q="technical+deb...

> the conflict between efficiency and resilience.

I've been thinking about this a lot. It shows up in everything from mechanical devices to the global economy.

I keep going back to this quote from The Psychology of Computer Programming by Gerald Weinberg:

> Fisher's Fundamental Theorem states—in terms appropriate to the present context—that the better adapted a system is to a particular environment, the less adaptable it is to new environments.

It's a systems thing. You build a system that is resilient to changes in the environment, it is less efficient if the environment doesn't change versus a system that is optimized for that specific environment. But the counterpoint is that the optimized system can't handle changes in the environment.

Nice. I've always thought of it as shaving away error margins, but I think your quote is much more general and easy to understand.
Well, shaving away the error margins is one way you gain efficiency. But in doing so the assumption is made that the environment is static (or sufficiently static relative to that margin). How does the fastest ground vehicle hit that mark? By being the lightest, most streamlined it can be with the most powerful motor it can contain, running on one of the flattest longest spaces it can find. Put it on a NASCAR track and the operator would be dead.

An important note is that assumptions are often not made explicitly. People don't sit down and say, "I think this vehicle will never be used on an oval race track, therefore 'steering' will be minimal, and the throttle will be full-open or full-closed". They just know they're making the fastest ground vehicle, and so those decisions are consequences of that specific objective. They happen to have an implied assumption that the vehicle will never need to operate at lower speeds or make turns.

This leads to an interesting tangent, System-Theoretic Process Analysis (STPA) by Nancy Leveson has an objective of improving system safety. But one of the ways it does this is to raise those assumptions to the level of conscious awareness by creating an explicit system model. It's not the only process that does this, but it's making headway in the systems safety community these days.

To me, "systems accrue debt" is a consequence of three things: entropy, change, and learning.

Entropy is pretty obvious. Change is about the divergence between the system and the world it's reacting to. E.g., a payroll system that was fine in 1960 would not be fine today; our concepts of work and employment have changed significantly.

Learning is the most subtle thing for me. Knowledge is basically a ratchet: this year we know more than last year, and so on back. A software architecture that was brilliant in 1970 was outdated by 1980, and so on for every decade. As years go on, we learn more about good ways to build things, revealing previously unseen flaws in old systems.

One could argue that this concept of debt is unfair, that it's a moving target. That's true in some sense. But systems are things we create to improve the world, and the world was never going to sit still.

I think that there is a distinction that is interesting to make here: human made systems vs natural systems. Human made systems have a source of systemic debt that natural systems cannot have, due to human errors. In the natural systems, "function" comes after "form" (we don't believe in natural teleology) whereas in human technology "function" comes before "form", and thus the "form" may be faulty.

I have always understood technical debt as the systemic debt derived from human error, but it is nice to see how it is indistinguishable from the systemic debt "naturally" acquired when the environment changes (and I think of civilizations as natural rather than human made systems).