Making the Business Case for Boring Work

I spent three hours last Tuesday staring at a stack trace that looked less like code and more like a cry for help. It was a legacy payment gateway—the kind of system that stays alive through sheer spite and undocumented patches—and it was finally buckling under the weight of a “quick fix” from six months ago. This is the reality they don’t mention in those polished management seminars: you aren’t just fighting bugs, you’re fighting the perception that maintenance is a luxury. Most people will tell you to use business metrics or ROI frameworks, but when you’re actually sitting in the dark trying to figure out how to argue for technical work while the production environment is bleeding, those abstractions feel incredibly hollow.

I’m not here to give you a template for a slide deck or a list of buzzwords to throw at a Product Owner. Instead, I want to talk about the actual mechanics of survival. I’m going to show you how to translate the terrifying reality of a crumbling database into something a stakeholder can actually understand, without losing your soul in the process. This isn’t about winning an argument; it’s about preventing the inevitable collapse before you’re the one left holding the shovel.

Table of Contents

Bridging the Gap Between Dev and Product Without Losing Your Mind

Bridging the Gap Between Dev and Product Without Losing Your Mind

The friction usually starts when Product sees a ticket as a “feature” and you see it as a “preventative measure against a midnight outage.” To them, a refactor looks like zero progress because nothing on the UI changed. You have to stop talking about clean code—which sounds like a luxury—and start communicating technical value to stakeholders in terms of risk and velocity. If you tell a Product Manager that the database schema is “messy,” they’ll nod and move on. If you tell them that the current schema will increase the time-to-market for every new feature by 20% next quarter, you’ve finally started a real conversation.

Bridging the gap between dev and product requires a translation layer. I’ve learned that you can’t just demand time; you have to show how aligning engineering goals with business objectives actually protects the roadmap they care about. Instead of fighting for “maintenance time,” I frame it as protecting the delivery pipeline. You aren’t asking for permission to tidy up; you are negotiating the stability of the very features they are trying to ship.

Quantifying Technical Debt Impact Before the Whole System Crumbles

Quantifying Technical Debt Impact Before the Whole System Crumbles

If you go into a meeting and say, “the codebase is messy,” you’ve already lost. To a product manager, “messy” sounds like a developer’s preference, not a business risk. You cannot rely on vague adjectives; you have to start quantifying technical debt impact using the only language they actually speak: time and money. I stop talking about refactoring and start talking about velocity degradation. I show them how a feature that took three days last year now takes twelve because we are fighting the legacy payment logic every single step of the way.

Don’t just point at a broken module. Instead, track the “tax” you are paying. When I’m maintaining a twenty-year-old system, I look at the ratio of bug fixes to new feature development. If 70% of our sprint is spent on regression fixes, that is your leverage. You aren’t asking for permission to clean up; you are presenting a case for software maintenance ROI by proving that investing in the foundation is the only way to stop the bleeding and actually hit the roadmap targets.

The Survival Guide for Getting Your Refactors Approved

  • Stop using words like “cleaner” or “elegant.” To a Product Manager, those sound like luxuries. Use “stability” and “predictability” instead. You aren’t asking to make the code pretty; you’re asking to make the system stop throwing 500 errors at 3:00 AM.
  • Map technical debt directly to the roadmap. If a messy database schema is going to slow down the next three features they want, tell them that. Don’t say “the schema is bad”; say “this schema adds a two-week tax to every new payment integration we build.”
  • Build a “Failure Catalog.” When a bug happens because of a shortcut we took six months ago, don’t just fix it and move on. Document the cost: how many hours were lost, which customer was impacted, and what the recovery cost was. Data is harder to argue with than intuition.
  • Negotiate for a “Maintenance Tax” rather than a “Refactor Project.” Asking for three months to rewrite a service is a non-starter. Asking for 20% of every sprint to be dedicated to systemic stability is a business process. It’s much harder to say no to a consistent rhythm than a massive, scary overhaul.
  • Learn the language of risk. If you can’t explain the technical problem in terms of business risk—lost revenue, compliance failures, or developer attrition—you haven’t finished your argument. You need to show them that the current path isn’t just difficult, it’s expensive.

The Hard Truths to Carry With You

Stop talking about “refactoring” and start talking about “risk mitigation”; stakeholders don’t care about clean code, but they care deeply about why the payment gateway went dark for forty minutes.

Build a paper trail of the “unhappy paths”—document every time a workaround or a legacy quirk causes a delay, so when the system finally hits its breaking point, you aren’t the one being blamed for the fire.

Accept that you will never win every argument, so focus your energy on the technical debt that actually threatens stability rather than trying to fix every suboptimal line of code you encounter.

## The Language of Risk

Stop talking about “clean code” or “refactoring”—those sound like luxuries to a Product Manager. Start talking about the probability of a complete service outage during peak transaction volume. You don’t argue for better architecture; you argue against the inevitable day the system stops being able to process payments because you were too busy building features to fix the foundation.

Pernille Askeland

The Long Game

Winning through strategic stewardship: The Long Game.

At the end of the day, arguing for technical work isn’t about winning a debate; it’s about translating reality. You have to stop talking about “cleaner abstractions” and start talking about predictable delivery cycles and the cost of the next outage. We’ve covered how to bridge the communication gap with product owners, how to quantify the actual rot in your codebase, and how to frame maintenance as a prerequisite for speed rather than an obstacle to it. If you can show them that a week of refactoring today prevents a month of firefighting tomorrow, you’ve already won half the battle. It’s about moving from a defensive posture to one of strategic stewardship.

I spent twenty years fixing things that were broken because someone, somewhere, decided that the “happy path” was the only path that mattered. Don’t let that be your legacy. It is exhausting to constantly fight for the integrity of your systems, but that fight is exactly what keeps the lights on. You aren’t just a ticket-taker; you are the one responsible for the structural soundness of the machine. Hold your ground, keep your data precise, and remember that building things to last is the only way we actually get to do the work we love.

Frequently Asked Questions

How do I handle a product owner who views every refactoring task as a direct delay to a revenue-generating feature?

Stop talking about “clean code” or “elegance.” To a Product Owner, those are luxuries they can’t afford. You have to frame refactoring as risk management. Instead of saying “this module is messy,” say “this specific debt increases the lead time for Feature X by 30% and carries a high risk of regression in the checkout flow.” You aren’t asking for permission to tidy up; you’re negotiating the speed of their future delivery.

What do I do when the "technical debt" I'm trying to fix is buried in a legacy module that no one—including management—actually understands?

Stop calling it “technical debt.” To a manager, that sounds like a choice you made. Call it “operational risk.”

Is there a way to track the cost of "doing nothing" without spending more time on spreadsheets than on actual engineering?

Stop trying to build a perfect financial model. You aren’t an accountant, and your PM doesn’t want a spreadsheet; they want to know why the sprint velocity is tanking. Instead, track “friction metrics.” Log how many hours your senior devs spend fighting legacy deployment scripts or manual data fixes instead of shipping features. When you can show that 30% of every sprint is just paying interest on old decisions, the cost of doing nothing becomes impossible to ignore.

About Pernille Askeland

I write the part the tutorial skipped: what it looks like when it breaks.

Scroll to Top