To be clear: I do not think we should actually forget technical debt. Also, this is not the nth post discussing if “debt” is an appropriate metaphor. I do not have a strong opinion regarding the metaphor. My point is rather that I realized in a recent discussion that in the end, it is not so much about technical debt but rather about something else, and I wanted to share the thought.

  • Kissaki
    link
    fedilink
    English
    arrow-up
    5
    ·
    7 hours ago

    they asked me if I could develop some useful metrics for technical debt which could be surveyed relatively easily, ideally automatically

    This is where I would have said “no, that’s not possible” or had a discussion about risks where things you simply can’t cover with automated metrics would lead to misdirection and possibly negative instead of positive consequences.

    They then explore what technical debt is and notice that even many things outside of technical debt have significant impact you can’t ignore. I’m quite disappointed they don’t come back to their metrics task at all. How did they finish their task? Did they communicate and discuss all these broader concepts instead of implementing metrics?

    There’s some metrics you can implement on code. Test coverage, complexity by various metrics, function body length, etc. But they only ever cover small aspects of technical debt. Consequently, they can’t be a foundation for (continuously) steering debt payment efforts for most positive effects.

    I know my projects and can make a list of things and efforts and impacts and we can prioritize those. But I find the idea of (automated) metrics entirely inappropriate for observing or steering technical debt.

  • squaresinger@lemmy.world
    link
    fedilink
    arrow-up
    26
    ·
    11 hours ago

    Technical debt is a management term.

    The reason we use it is to tell non-technical management people why implementing a simple feature might take an hour on a fresh project and a week on an old legacy project.

    It’s used to tell them why we shouldn’t go with the quickest and dirtiest solution but instead should go with a more expensive proper solution.

    It also tells management why we might have to spend some time imrpoving our code base without any tangible improvements to the customer.

    And because it’s a term that speaks to non-technical management it uses financial language, becausee that’s what they understand. Technical debt means “I am choosing to cut corners today, but we will have to pay up in the future by fixing stuff that wouldn’t be broken if we do it right today.”

    And because it’s aimed towards non-technical management and not towards developers, it’s of course not very specific. Non-technical management doesn’t need to understand about dependency hell, unclean code or bad developer documentation. That’s not their field and it doesn’t have to be.

    The real problem in OOPs example wasn’t that there’s no clear metric or definition of technical debt. The problem was that non-technical managemnt thought that technical debt is an engineering concept instead of a management one, and thought that they themselves were allowed to meddle with it.

    The right way to handle that is to ask the people who are actually impacted by technical debt what they want to improve. Any developer can quickly give you a good list of the most pressing tech debt issues in their code base. No need to pull in someone from outside of the project to make up some useless KPIs that will end up missing critical topics.


    Btw, engineers already have engineering terms for what’s described as technical debt. E.g. “dependency hell”, “low test coverage”, “outdated dependency”, “bad code style”, “unoptimized code” and so on. And since these are engineering terms, they actually have specific meanings and most of them are testable and quantifiable in some specific way.

    • Feyd
      link
      fedilink
      arrow-up
      7
      ·
      8 hours ago

      The reason we use it is to tell non-technical management people why implementing a simple feature might take an hour on a fresh project and a week on an old legacy project.

      Yes, thank you. It’s really as simple as that

      A client recently approached me with the need to measure technical debt.

      The writer made the whole essay because saying “just ask your engineers what they need to improve” wouldn’t make him money.

      • squaresinger@lemmy.world
        link
        fedilink
        arrow-up
        3
        ·
        7 hours ago

        The writer made the whole essay because saying “just ask your engineers what they need to improve” wouldn’t make him money.

        I wonder if the writer ever worked as an engineer.

  • heikkiket
    link
    fedilink
    arrow-up
    7
    ·
    12 hours ago

    I think this was a good piece of writing and states quite well the reasons why I don’t like technical debt as a term. Especially in situations where people say it’s necessary.

    In my opinion the root cause is poor management and poor management is not necessary.

    • Kissaki
      link
      fedilink
      English
      arrow-up
      3
      ·
      8 hours ago

      As a lead dev I have plenty of cases where I weigh effort vs impact and risk and conclude to “this is good enough for now”. Such cases are not poor management - which I assume you mean something like “we have to ship more faster, so do the shortest”. Sometimes cutting corners is the correct and good decision, sometimes the only feasible one, as long as you’re aware and weigh risks and consequences.

      We, and specifically I, do plenty of improvements where possible and reasonable. Whatever I visit, depending on how much effort it is. But sometimes effort is too much to be resolvable or investable.

      For context, I’m working on a project that has been running for 20 years.

      • squaresinger@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        7 hours ago

        In this context, YAGNI is a very good principle, because incidentally, working too much ahead to avoid technical debt can actually cause technical debt.

    • squaresinger@lemmy.world
      link
      fedilink
      arrow-up
      7
      ·
      11 hours ago

      Tech debt is a term directed at managers to convince them to not always go for the quickest and dirtiest hack.

      It’s not a term that’s ever meant to describe anything to an engineer.

    • Ŝan • 𐑖ƨɤ@piefed.zip
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      4
      ·
      11 hours ago

      Yah, it’s a well-written article. I’d happily work wiþ þis guy. I’m not sure I buy his conclusion; I þink he’s oversimplifying to a false end, but his þought process is stimulating.

      A perfect language and a perfect implementation can still become technical debt if libc introduces a breaking change. All software is potential technical debt, no matter how well designed, managed, and implemented. Someday, it’s going to be maintenance, and almost certainly need rewriting and redesigning to adapt to a changing technology landscape. E.g. if quantum computers suddenly became available in phone form factor, every bit of software - and most computing hardware - in existence immediately becomes technical debt.