i am done with “technical debt” as a useful concept.
as so often happens, an appealing idea happened, one with useful connections to the concrete, and we took it and ran with it. unfortunately, that idea has more appeal than it does decision-making value.
folks justify the most ridiculous nonsense and put it under the heading of “technical debt”. in particular, they write shitty code, i mean *terrible* code. they do this in the name of productivity. the claim is they are accruing technical debt, and that it’s just debt, and that they’re borrowing speed from the future to pay for it now.
here are some problems with that claim.
first, it simply isn’t the case that shitty code now makes more features faster now. that is, you can not go faster by writing shitty code. so right from the get-go the metaphor breaks down.
if i borrow Y money it is to get X now. i borrow it, i get X now, and I pay back Y + Z. would i borrow Y if i didn’t *get* X now? ummmm, no. so first, you don’t get the thing you’re borrowing for. that’s one issue.
second, debt in general, as my friend @YvesHanoulle just pointed out, is one of those “i’m good at it” things. people think they know all about debt. that, after all, is the appeal of the metaphor, right?
do look around you, tho. would any reasonable person say that the world is full of people who are good at debt? the idea that “i’m good at debt” is far more widespread than the reality of people being good at it.
so, too, with technical debt. the idea that “i am good figuring out costs+benefits for technical debt projection” is far more widespread than the reality. so second, technical debt’s appeal is actually based on a false premise, that most of us understand financial debt and manage it well.
third, unlike financial debt, there are no tables charts and formulae to help us parse our technical debt. there are no *numbers* associated with technical debt. no numbers means no math. no math means analysis based on intuition.
and we’ve just pointed out in flaw #2 that — even *with* numbers — skill at parsing debt calculations is actually quite rare. financial debt success — bounded by math — is rare. how much more rare is technical debt success — bounded by guess and supposition? so the third flaw: the non-mathematical nature of technical debt makes the successful management of it even *less* likely.
let me enhance your terror a little, too, by pointing out that the technical debt decision makers don’t even have technical credentials. how likely is it that a middle-level manager who lives in meetings, powerpoint, and outlook, can assess the cost/benefit of shitty code?
so. for me, technical debt is just out the door. it fails on at least three points to be a compelling or useful metaphor.
i should back up a little, tho. there is *something* there, and we must consider it.
my friend @WardCunningham cut a video years back about technical debt, in which he explained he never meant for anyone to write shitty code. what it seems he was talking about when he first spoke of technical debt wasn’t the kind of awful crap we see today at all.
rather, it was about deferred design decisions. in the hardcore XP mode we work largely without a big overriding design model. this notion is reflected in the idea of working by stories. we solve *just* the problem in front of us. we do not solve ahead. we do not even specify ahead. we take our challenge one story at a time, work that story to completion, and move on. this means that we are always, permanently, deferring the idea of “the once and for all best design for our finished app”.
this idea, the “permanent revolution” if you will, lies at the heart of the modern software development synthesis.
we have been slow and awkward in bringing this notion to the fore. this is the source of many flaws in our current attempts to do so. think about the story wars, the gradual rising attack on capacity-box planning, the usage of “technical debt” to justify shite code. all of this muddle comes from our failure to grasp and explicate the permanent revolution and its related concepts.
i’ll take a breather there. thanks for letting me muse!