Ask HN: Tech Debt War Stories

What is the common thread among tech debt-crippled companies you've worked in? Not enough man hours to pay it down, difficulty to align engineering's willingness to pay it down with product's focus on new features, or something else? How can it be that, in the age of AI code gen, we haven't yet managed to solve this once and for all?

6 points | by erubini_fg 11 hours ago

7 comments

  • stale-labs 2 hours ago
    In my experience the biggest source of tech debt is decisions made under time pressure that never get revisited. "We'll clean this up later" turns into "this is how it works now."

    Also worth noting that what feels like tech debt is often just "code that does something different than what I'd do." Sometimes worth asking if rewriting is actually necessary or if youre just not used to the existing approach yet.

    AI might help with routine refactoring but it cant make the judgment call about what should change. That still requires someone who deeply understands the system.

  • grugdev42 5 hours ago
    Web dev based answer:

    I know it's cliche to say it, but most of the tech debt I've seen is on the frontend.

    Most backends are relatively simple. Just a DB with lots of code wrapping it. But even the worst backends are relatively simple beasts. Just lots of cronjobs and lots of procedural code. While the code is garbage, it can be understood eventually. The backend is mature... even the tech debt on the backend is a known quantity!

    But the frontend... damn the complexity and the over engineering are something unique. I think there is a fetish among frontend developers to make things as complicated as possible. Packages galore and SO MANY COMPONENTS.

    As soon as people start inventing their own design system, UI framework, and sub packages I think the frontend is doomed for that project.

    • muzani 2 minutes ago
      Async really turns FE into a nightmare. Simple concept: user logs in, get userID, get feed associated with ID, get posts on feed, get reacts on post.

      Sometimes the tech debt is that BE can't pass this data all at once yet. Fine. Let's fetch it.

      But then FE gets creative. We can reduce nesting. We can chain it. We can preload stuff before the data loads. Instead of polling, let's do observers. Actually these aren't thread safe. And you know what, nothing should be in the UI thread because they'll cause delays. And this code isn't clean, one function should do only one thing.

      Actually why are these screens even connected? We should use global variables and go to any screen from anywhere. Actually everything can be global. But global is an anti-pattern. So let's call it DI and single page application and have everything shared but everything must also be a singleton because shared immutability is bad too.

  • al_borland 9 hours ago
    Most of the tech debt I deal with comes from projects that are declared a success by management before they are actually done, and no one is officially responsible for maintaining it. The teams are told to move on to something new, the old thing never gets fully finished and dies a long slow death, because no one wants to officially say that it was a waste of time and should be shut down.

    Do this repeatedly and it really starts to add up. At times we are running 3-4 platforms for the same thing. Two are legacy with one or two critical things still running on them with no support. One is “production”, but no one is actually paying much attention to it. And one is in development or pilot… it’s all anyone can talk about, but it doesn’t actually work. While that in-house developed pilot is going on, we’ll also be told to do a POC with a tool from some outside vendors.

    AI won’t solve political and bureaucratic problems. If anything, it will make it worse, as turnover to new products is expected faster.

    To get rid of technical debt, an organization needs to focus. Which means saying “no” to most things, instead of trying to do it all.

  • buchanae 10 hours ago
    A lot of tech debt I've seen stems from people tacking things onto a loose foundation – adding API endpoints when there's no clear pattern, adding validation or defaults in different ways, organizing layers of code in various ways, multiple implementations of the same business need.

    This is compounded when people come and go. The software/tech industry, in my experience, does not encourage long tenure – layoffs, reorgs, and the general trend of people hopping between employers every 2-3 years.

    Startups also love the idea of building things fast and ugly, and 5 years later that leaves the company with a successful product (hopefully), a team that's grown fast (and turned over multiple times), and a shaky foundation.

    Engineering generally seems open to paying down tech debt, but there's an overwhelming amount of it sometimes, and someone needs to deeply understand the problem and lay out a clear plan for taking care of it, and that takes serious effort.

  • JimsonYang 10 hours ago
    AI makes technical debt so much worse. Speaking from the frontend perspective- reducing technical debt is all about making changeable standardized code. However models change structure, variables names, or changing variables means I'm building a lot of frontend on a shaky foundation. I routinely spend hours a week just fixing weird frontend builds. And as I'm the frontend role, my cofounder doesn't understand design, so I often get messy code
  • ex-aws-dude 9 hours ago
    One thing I’ve noticed over the years is that tech debt gets worse the more authors you add in the mix.

    If you have one person who owns an area/domain it tends to stay pretty clean.

    But as soon as you add more people it becomes patchwork of differing approaches

  • mamonster 4 hours ago
    In finance (at least in smaller companies), the most common form of tech debt is an Excel spreadsheet governing some super important process that was written by someone from the C-suite 10 years ago and has not been changed since because that person insists that he needs to be able to check it.

    "This data in sheets X,Y,Z is all the same, can we make it a named range and make all the cells that need it refer to it directly?"

    "No, like this you check that you put it correctly"

    I've seen a sheet that was responsible for millions of dollars in revenue where in order for the formulas to work you had to manually adjust 10 cells once you added a line because it was all stuff like "$A$20:$A$458" instead of, you know, referring to a column in a named table.