[HN Gopher] Tech debt metaphor maximalism ___________________________________________________________________ Tech debt metaphor maximalism Author : xena Score : 99 points Date : 2023-07-07 17:46 UTC (5 hours ago) (HTM) web link (apenwarr.ca) (TXT) w3m dump (apenwarr.ca) | c-linkage wrote: | My problem with the entire technical debt metaphor is that the | interest payments are invisible. | | On an accounting sheet I can see my interest rate and how much | I'm paying monthly and make decisions. With technical debt, it's | all about people time, and people time is a sunk cost to your | finance department. | smif wrote: | I think this is close, but I'd go even further and say that the | problem is that with real debt anyone can see the money in | black and white, they require no special training to be able to | understand real debt and read the numbers off an account | summary. There's not much room for interpretation there. | | With tech debt, you can ask several engineers and get very | different answers about how much tech debt there is on a | particular project. It's not well defined, subject to | interpretation, and so doesn't fit well with management wanting | quantify the objective value of doing something. I think this | is the real reason it's often disregarded. | | It requires a degree of trust from management to the engineers | to properly address, and that trust can be abused. All sides | are aware of this and I'm sure I'm not the only one that has | used tech debt as an excuse for some minor padding here and | there. | Thrio499 wrote: | It is very exact text, but it is missing basic point: | | People who develop and manage the code, most likely do not own | the debt. Code (and technical debt) belongs to stock holders. And | there is a huge separation from developers and management. | wpietri wrote: | This is a nice but very long exploration of the tech debt | metaphor, raising several excellent points. I especially like | comparing it with the business uses of actual debt. | | The only thing I think I'd add to it is that like actual debt, a | lot of people do not behave sensibly with tech debt. One of my | big tests in any new job is the first time a product manager | wants to put something on credit. E.g., "We have to add feature X | right now so we can land a big client. Can we cut corners to get | this out the door? We'll sort out the mess later." | | Despite things like this making my eyelid twitch, I'll always | tell a new product manager yes the first time they ask this. But | then I watch carefully to see if they're conscientious about | paying down the debt. Some of them are great about it, | prioritizing the deferred work. Others, though, always have a | next emergency. But in my view if it's always an emergency it | never is, and so I never again trust them with the tech-debt | credit card. | automatic6131 wrote: | Tbh, cutting corners to land new revenue, if it's sufficiently | big, sounds like the prime reason to take on tech debt. It's | arguably just like a loan to make a new factory line to expand | production for new sales or whatever. | | For sure, if it's a small client or far from a sure thing, then | yeah it's bad. Like anything, a judgement call about where the | cost benefit ratio lies. | littlestymaar wrote: | One very similarly finance-oriented comparison that I like to | make is that every line code is a liability, in the financial | sense of that word[1]: that's what's on the right side of your | balance sheet, which enables your assets: that is _your product_. | | Like there are many ways to finance your business, there are many | ways to make the same product, from coding it from scratch | yourself (which ranges from "from quick and dirty" to "using | formal methods") to customizing a open-source foundation, or even | a third party's white-label product. Which one is better | completely depends on the situation (like with equity vs debt). | | [1]:in finance, "liability" isn't "bad", debt is a liability, but | so is equity, and even profit is a liability! | twic wrote: | Debt works like this: | | 1. you take on debt to get hold of some cash | | 2. at some point, you ought to repay the debt by giving up the | same amount of cash | | 3. until you do, you have to spend a steady trickle of cash | servicing the debt | | In the technical debt metaphor, cash stands for development | effort. But: | | 1. taking on technical debt doesn't give you a load of | development effort out of nowhere (i suppose you could say that | shipping what should be a three week feature in two weeks is like | getting a week of effort from nowhere, but that seems dubious to | me - you haven't shipped the same feature!) | | 2. repaying technical debt generally takes more work than it | saved, because by the time you repay it, it's infected other code | that was written afterwards BUT sometimes you end up being able | to delete the whole thing, because the feature was retired or | fundamentally rewritten, in which case you don't need to repay it | at all! | | 3. sometimes, existing technical debt requires no extra work at | all (if it's in a part of the codebase you aren't touching), but | if it does, it's not a constant amount, it's proportional to the | amount of work you are doing on that code | | So it doesn't seem like a brilliant metaphor, really. | | Perhaps it's more like cleaning your bike chain after a ride | through the mud. If you don't do it, it saves you some time | today. But every time you ride your bike again, it's more effort | to pedal, and it's wearing your chain out faster. | xyzzy4747 wrote: | Good engineers don't create as much tech debt in the first place, | or if they do it's straight-forward code that's relatively easy | to refactor. The #1 fix to prevent most serious tech debt and | also get features done quickly is the quality of your engineers | (or yourself if you're the one coding). Someone knowledgeable | with several completed projects and up-to-date knowledge should | create the codebase. | | Also it depends a lot on what stage your project is in. If you | have zero customers or money coming in, your focus should be on | creating a working product and getting customers. That means zero | tests for now, just a working product. It will also more quickly | validate if you're working on the right thing or not, or if you | need to pivot. | | One problem I see is when engineers want to solve the tech debt | problem before even proving the product should exist. No, first | establish the demand, get real cash flow, then start focusing on | tech debt. | | If you are an entrepreneur then tech debt is literally the last | of your concerns. If you grow enough where it is then it's a good | problem to have - the biggest problem is typically not enough | customers, not too much tech debt. | | On the other hand if you are working at Google, and know for a | fact thousands or millions of people will use your code, then you | should "lock it down" right at the beginning, have all the | testing upfront, good documentation, etc. | twic wrote: | There's a classic Steve Freeman joint, "bad code isn't technical | debt, it's an unhedged call option": | | https://www.infoq.com/news/2014/12/call-options-bad-code/ | klysm wrote: | And that margin call might come at a bad time | sonofhans wrote: | I worked with Ward Cunningham for about a year, and he said once | that he regretted coining the phrase "technical debt." He said it | allowed people to think of the debt in a bottomless way: once | you've accumulated some, why not a little more? After all, the | first little bit didn't hurt us, did it? | | The end result of this thinking is the feature factory, where a | company only ever builds new features, usually to attract new | customers. Necessary refactors are called "tech debt" and left to | pile up. Yes, this is just another view of bad management, but | still, Ward thought that the metaphor afforded it too easily. | | He said he wished instead that he'd coined "opportunity," as in, | producing or consuming it. Good practices produce opportunity. | Opportunity can then be consumed in order to meet certain short- | term goals. | | So it flips the baseline. Rather than having a baseline of | quality then dipping below it into tech debt, you'd produce | opportunity to put you above the baseline. Once you have this | opportunity, you consume it to get back to baseline but not | below. | | I'm not convinced that the concept phrased thus would have the | same traction. Still, I love this way of looking at it, like I | love much of Ward's POV on the world. | dasil003 wrote: | Totally agree with that, but I don't think regret is warranted. | The power of "technical debt" is that it was actually catchy | enough to get a foothold with the MBAs and pointy hairs. That | alone is a victory. Any sufficiently good idea with a catchy | meme is subject to cargo culting and abuse. We need look no | further than The Agile Manifesto to see how thoroughly any | well-summarized wisdom, drawn from a well of deep expertise, | lovingly word-smithed with the utmost clarity, can be abused | and twisted into a hideous monstrosity that is, in fact, the | complete opposite of the original intent. | lumost wrote: | I've also found that the term can be used to describe anything. | Some folks would think of anything that isn't "shiny new | framework" as tech debt. Some folks think of unsupported | features as tech debt. Some folks think that the 2 million line | monolithic code base producing billions of profit per year is | tech debt. | | After seeing a few too many tech debt reduction programs yield | even more tech debt than they started with... I simply don't | buy retrospective arguments any more. Decide what is | acceptable/unacceptable at design time, don't strangle yourself | on it after the fact. | wpietri wrote: | Sorry, but I don't understand this. Tech debt it any mess | that makes it harder to improve the product. You have to pay | cost without getting any new value; the benefit for the cost | was received previously. People may misuse the term, but it | has a pretty clear meaning. | | I also don't understand what "design time" could mean these | days. 30 years ago, when release cycles were 18-36 months, it | was a real thing. But now? With modern release cadences, we | are always designing the system. Which is great, because the | quality of design is limited by our knowledge, and our | knowledge increases over time. Setting our standards early on | in a project, when we're most ignorant, guarantees we'll be | setting the bar wrong. | pydry wrote: | I get it. People feel the pain correctly but decide the | solution is some combination of write everything in shiny | new framework and start linting more strictly. | lumost wrote: | > Setting our standards early on in a project, when we're | most ignorant, guarantees we'll be setting the bar wrong. | | This seems like an artificial constraint, there are obvious | basics such as | | - Code should be reviewed by N people | | - Testing should cover X core workflows/Y branches etc. | | - Dev environments should be creatable in X | minutes/hours/days | | - The system should perform specific tasks (if you don't | know what these are, then coding the system may or may not | be the best use of time) | | - The system should support Y TPS at Z cost (all systems | have a maximum scale, estimate the scale that is required). | | - Design should be signed off on by Y people, where Y may | be 1 person in a small team. | | etc. You can find the right set of constraints for your | domain. However a system not doing something it wasn't | designed for isn't really tech debt in my opinion, it's | just a new use case which needs to be built for. | divbzero wrote: | Sticking with the balance sheet analogy, the phrase would be | "technical asset". | CSMastermind wrote: | I've always used the phrase "technical wealth" to explain the | opposite of technical debt. | | But I agree your term works a little better since you can | have both assets and liabilities and ideally you want to be | wealthy not indebted. | m463 wrote: | Don't forget people use ambiguity as a tool all the time. | | Politicians use words like "justice" or "freedom" to create | common ground with little controversy even when they define the | term in a way diametrically opposed to their constituents. | | I think it can be the same with "tech debt". | | I have a friend who figures when he sells his house it will be | a tear-down, so he has all kinds of "house tech debt" that he | just manages to live with until he literally moves on. it | basically means "I don't care about fixing that" or "I'm not | going to fix that ever". | brianpan wrote: | * * * | commandlinefan wrote: | Another problem with the analogy is that you can meaningfully | make a $0.01 payment on your debt. You can pick any arbitrary | percentage of your debt and pay it off right now, if you have | the money to do so. Programming tasks are not only more | (unpredictably) quantized than that, they're usually Sisyphean: | if you do a little but don't finish, you've wasted the time you | spent because the boulder rolls back down as soon as you stop | pushing. | xedrac wrote: | That is a good point. Tech debt is often, but not always, | harder to pay back in small amounts. | JJMcJ wrote: | Enough technical debt and your project is on "technical payday | loans". I've worked on such projects and it's no fun. | [deleted] | marcosdumay wrote: | > The end result of this thinking is the feature factory | | I'm not sure how relevant this is, but a feature factory is the | result of people contracting software development, and | measuring it by features; nothing more. | | Any other characteristic is a consequence, not a cause. | vinibrito wrote: | You just expanded my mind with that today. Well, so we can | raise above the status quo, how else would development be | contracted? | Jtsummers wrote: | Include in the contract "non-functional" requirements (the | distinction can be fuzzy with a good case to put some | requirement in both categories, but it's a useful | distinction nonetheless). These are things like how stable | it is (uptime requirements, perhaps), how secure it is. How | quickly can a new feature be delivered? This lets you | require an organizational capability, but not a system | feature capability. If it takes your contractor 6 months to | deliver an update with a color change to a page background, | something is wrong. Require more responsiveness, but also | offer more responsiveness on your side (like if you have a | QA/test team responsible for final sign-off or to answer | clarification questions, etc.). | | You don't want to mandate their internal processes, at that | point they're not contractors they're your employees and | you are essentially taking over their management. | | EDIT: Grammar | spacebanana7 wrote: | Any delegation of work from one person to another involves | a loss of context and distorts incentives. The only way out | entirely is to build your own software to solve your own | problems. | | See the principal agent problem in economics. | | Unfortunately subsistence software engineering isn't a | viable profession because the productive capacity of a | single engineer is limited. And we occasionally need | physical stuff like food/water. | marcosdumay wrote: | I am wary of formal offshoring of development at all. | Contractors can solve a few problems for small companies | when they are also small and you have a trusting long term | relationship. On any other context, contracting seems to | always fail. | | But the specific format of specifying the software, | contract it away, and pay for feature size leads to the | specific kind of failure that we call "feature factory". | NoMoreNicksLeft wrote: | > I worked with Ward Cunningham for about a year, and he said | once that he regretted coining the phrase "technical debt." He | said it allowed people to think of the debt in a bottomless | way: once you've accumulated some, why not a little more? After | all, the first little bit didn't hurt us, did it? | | I suspect that at the foundational level of this metaphor, the | true problem is that some/most people treat financial debt the | same, until they're evicted and the car has been repossessed | and they've got a warrant out for their failure to show in | court. | | I want to be wrong about that. Someone tell me I'm wrong. ___________________________________________________________________ (page generated 2023-07-07 23:00 UTC)