As a manager of a development team, I’ve come to realize that technical debt is a lot like household chores. You don’t want to deal with it, you procrastinate, and before you know it, things are piling up. And let’s be honest—most of the time, it’s not anyone’s fault. It’s the reality of building software in a fast-paced world where product releases and market demands are breathing down your neck. But if you let that debt pile up for too long? Well, suddenly you’re not building on a solid foundation anymore; you’re stacking features on top of cracks.

And here’s the kicker—technical debt isn’t just a developer problem. It’s a company problem. It affects timelines, budgets, and even team morale. So, while it’s easy to say, “We’ll clean it up later,” we all know later doesn’t come unless you make it come. And that’s our job—managing the balance between delivery and quality.

Why Do We End Up With So Much Technical Debt?

Let’s break it down. Technical debt happens for several reasons, all of them totally normal in the life cycle of any product:

  • Deadlines Over Everything
    When you’re in the driver’s seat as a manager, you know how tempting it is to push for speed. ”Just ship it! We’ll polish it later!” But that’s where technical debt quietly slips in—those quick fixes, the “this will work for now” mentality. Of course, we need to meet deadlines; no one’s debating that. But we also need to plan for when and how we’ll go back to improve what we’ve left behind.
  • Changing Requirements (aka, Surprise!)
    We’ve all been blindsided by that last-minute feature request or a sudden pivot in business strategy. It happens. And when it does, we often leave behind hastily implemented workarounds just to stay on track. Agile practices are meant to help with this, but let’s be honest—sometimes they just move the mess around without fully addressing it.
  • Legacy Systems
    This one’s always fun. You’ve got a system that’s been running for years, maybe even written in a language most of your team wasn’t born for. Every time you touch it, it’s like opening Pandora’s Box. But here’s the deal: at some point, you can’t keep slapping on patches. You need to map out the limitations of that system, assess when it’s holding you back, and then decide on a plan for modernization. Are you tracking these limitations regularly? Are you making a realistic plan for incremental upgrades, or are you kicking the can down the road?
  • Inexperience (Yes, It’s Part of Growth)
    Sometimes technical debt happens because you’ve got junior developers learning on the job, which is perfectly normal. They might not have the foresight to predict scalability issues or best practices right away. Instead of seeing it as a negative, view this as an opportunity for mentorship. You can’t avoid it, but you can plan for it—build learning and improvement into your team culture.

So, What Can We Do About It?

Now that we’ve accepted technical debt as a reality, the question is: how do we manage it effectively? Here’s where the work starts, and as managers, it’s our job to create a strategy for both prevention and maintenance. It’s not about avoiding technical debt entirely—that’s unrealistic—it’s about making it manageable.

  1. Map Out Systems and Clarify Their Limitations
    First things first, get a clear picture of your entire architecture. What are the systems that are currently in place? How are they performing? What are their bottlenecks? A key part of technical debt management is simply understanding where it exists. Map out which parts of the codebase are most prone to problems, and track their limitations. For example, is your database structure outdated, slowing down queries? Is your codebase monolithic when it should be moving toward microservices? Document this and review it regularly so you know when systems need to be upgraded—before they become a ticking time bomb.
  2. Create a Technical Debt Log
    Treat technical debt like financial debt. Keep a technical debt log that details what’s been added, what’s been addressed, and what needs attention. Tools like Jira, SonarQube, and Code Climate can help you track and quantify the debt so that you can prioritize fixing it in future sprints. This log shouldn’t be seen as a list of failures, but as a prioritized backlog of improvement opportunities.
  3. Routine Refactoring
    We need to stop treating refactoring like a luxury we can’t afford. Make refactoring a scheduled part of your sprints, not something that happens “when we have time”—because, let’s be real, that time never comes unless you make it. Implement a strategy of continuous improvement, where every sprint includes some refactoring, even if it’s small. This will prevent technical debt from spiraling out of control.
  4. Automate Where You Can
    I’m a big advocate for automation when it comes to technical debt management. Use tools like SonarQube or ESLint for static code analysis to catch issues early. Automated testing is another lifesaver—if it’s embedded into your workflow, you’ll reduce the chances of rushing features out without proper coverage. This helps reduce the debt before it even gets a chance to pile up.
  5. Engage the Whole Team in Debt Management
    Technical debt isn’t just a “developer problem.” It’s a team problem. That means product owners, stakeholders, and yes, management too, need to understand its impact. Make sure you’re regularly reviewing technical debt with your team and product owners to prioritize it alongside new features. Help them see that addressing debt is crucial for long-term scalability and product health.
  6. Plan for Upgrades
    For legacy systems, make a gradual modernization plan rather than relying on quick fixes. You don’t need to rip everything out at once—that’s a recipe for disaster. Instead, identify the highest-priority areas that need upgrading and allocate time in each sprint to address them incrementally.

The Real Struggle: The Devs vs. Management Debate

Now, here’s the elephant in the room: the tug-of-war between management and developers when it comes to technical debt. If you’ve ever been in this conversation, you know exactly what I’m talking about.

From the management perspective, it can feel like we’ve been sold a bill of goods. “Why did we end up with so much low-quality code?” you might ask, feeling cheated by what looks like sloppy work. But here’s the truth: our developers are constantly under pressure to deliver. They’ve had to make trade-offs, often against their own best judgment, in the name of getting something out the door on time.

On the flip side, developers often feel like they’ve been overridden. They see the technical debt accumulating and the compromises being made, but when they bring it up, they’re told to prioritize delivery over quality. There’s frustration on both sides, and the tension can be palpable.

The solution? A better conversation. We need to shift the conversation from blame to collaboration. Developers aren’t being lazy, and management isn’t being unreasonable. We’re all trying to achieve the same thing—deliver a great product on time. The challenge is finding the right balance, and that comes down to transparency and planning. Regularly discussing technical debt in team meetings, mapping out a long-term plan for paying it down, and getting stakeholder buy-in are crucial steps to bridge this gap.

In Conclusion: Don’t Lose Sight of the Bigger Picture

At the end of the day, technical debt is part of the game. It’s not something to be afraid of, and it’s not something to blame anyone for. What’s important is how we manage it. As managers, our job is to balance delivery with sustainability, to help our teams deliver great work without accumulating so much debt that we can’t move forward.

Most importantly, we need to foster an open, transparent conversation where both management and developers feel heard. If we keep fighting over why we ended up with technical debt, we’ll lose sight of the bigger picture: building software that can evolve and scale over time.

Jörn Green profilbild

Published by

Categories:

2 svar till ”Embracing technical debt”

  1. Howard profilbild

    It’s a good article, Jörn. I’ve also seen technical debt creep up during my time, as the requirement for faster and tighter release dates puts more pressure on developers. The developers vs managers quandary should be something that’s mitigated by the product management team, in my view. It becomes a question of trade-offs; allowing the developers to reduce the debt by doing more with what’s already been released.

    Gillad av 1 person

  2. Jörn Green profilbild

    You are absolutely right: when it works it works, and its a product management topic. Unfortunately ive never seen anything but a tense discussion on it. 🙂

    You comment made me quite motivated, thanks!

    Gilla

Lämna ett svar till Jörn Green Avbryt svar