How to make a technical case to a non technical manager.

•

•

Explain the Risk in Money and Time

I once spent three weeks building a slide deck filled with complex architectural diagrams and latency percentiles, thinking I was being thorough. I walked into my director’s office, laid out the “technical necessity” of a database migration, and watched his eyes glaze over within forty seconds. He didn’t care about our read-write throughput; he cared about the quarterly roadmap. I realized then that if you want to learn how to make a technical case to a non technical manager, you have to stop acting like a professor and start acting like a risk manager. Most engineers fail here because they try to win an argument about elegance when they should be discussing stability.

I’m not going to give you a lecture on “stakeholder alignment” or any other corporate buzzwords that mean nothing in a real production environment. Instead, I’m going to share the actual patterns I’ve used to get budget and time approved—the kind of stuff that comes from losing arguments in the past. We’ll look at how to translate technical debt into actual business cost and why your best weapon isn’t a graph, but a clear explanation of what happens when the system inevitably breaks.

Table of Contents

Communicating Complex Concepts Simply Without Losing the Stakes

Communicating Complex Concepts Simply Without Losing the Stakes

The mistake I see most often is trying to explain the “how” when you should be explaining the “what if.” When I’m communicating complex concepts simply, I don’t talk about race conditions or thread pool exhaustion. If I tell a manager that our database connection pool is undersized, I get a blank stare. If I tell them that the current setup means the checkout service will likely hang every Friday during peak traffic, I get a budget. You aren’t teaching them computer science; you are mapping technical failure to operational reality.

This is the core of explaining technical debt to stakeholders. They don’t care that the code is “messy” or “unidiomatic”—those are aesthetic complaints to them. They care about predictability. I’ve learned to frame every technical requirement as a choice between two different types of risk: the known cost of a refactor now, or the unknown, much higher cost of a system outage later. You aren’t asking for permission to clean up your workspace; you are presenting a plan to ensure the business doesn’t grind to a halt because we ignored a foundation that was cracking under load.

Bridging the Technical Gap Before the Next Outage

Bridging the Technical Gap Before the Next Outage

The mistake most of us make is waiting for the fire to start before we try bridging the technical gap. We treat technical debt like a private secret, something we manage in the shadows of our sprints, and then we act surprised when the budget is denied. If you wait until the database is locking up and the dashboard is bleeding red to start explaining technical debt to stakeholders, you’ve already lost. By then, you aren’t presenting a strategic plan; you’re just making excuses for a disaster that was predictable.

Instead, I’ve found that the most effective way to manage this is to treat “stability” as a feature, not a chore. When I sit down with my manager, I don’t talk about refactoring a legacy service or migrating to a new message broker. I talk about predictability. I explain that by investing in this specific piece of infrastructure now, we are essentially buying insurance against the kind of downtime that halts our ability to process payments. It’s about translating technical requirements into business value before the crisis hits. If you can show them that a small, controlled investment today prevents a massive, uncontrolled outage next month, you aren’t just an engineer anymore—you’re a partner in the business’s survival.

Five ways to stop being ignored by the people with the budget

  • Stop talking about technical debt and start talking about “interest.” If we don’t fix this refactor now, every new feature we try to ship next quarter will take twice as long and cost twice as much. Managers understand interest rates; they don’t care about your clean code abstractions.
  • Use the “Blast Radius” metric. When I tell a manager a database is unoptimized, they hear “slow.” When I tell them “if this specific service spikes, it will take down the entire checkout flow and stop us from taking payments,” they listen. Always define the boundaries of the failure.
  • Trade-offs are your best friend. Never present a single solution as a miracle cure. Present two options: Option A is the quick fix that buys us three months but increases our risk of a crash, and Option B is the robust fix that takes longer but stabilizes the platform. Let them choose the risk level.
  • Connect the technical failure to a business metric they actually track. If a memory leak is causing latency, don’t show them a heap dump. Show them the correlation between the leak and the drop in conversion rates on the mobile app. Data is harder to argue with than “it feels slow.”
  • Bring a “Post-Mortem” mentality to your proposals. Instead of saying “we should upgrade our version of Kubernetes,” say “we are currently running on a version that will lose support in six months, which means if it breaks, we won’t have a vendor to call for help.” Frame it as a proactive defense against a known future problem.

The Summary for When They Only Have Five Minutes

Stop translating code into business jargon; translate technical debt into the specific risk of a service outage. If you can’t explain how a refactor prevents a Tuesday morning meltdown, you haven’t identified the real problem yet.

Always lead with the trade-off. Managers don’t need to know how the new database works, they need to know that choosing Option A gives us speed now but will cost us three weeks of maintenance later.

Document the “why” as much as the “what.” When you finally get the approval to fix something, write down the decision so that six months from now, when someone asks why we didn’t just use the cheaper tool, you aren’t stuck re-litigating the same argument.

The Bottom Line

The Bottom Line: risk and reliability.

At the end of the day, making a case to management isn’t about proving how smart you are or how much you know about distributed systems. It’s about translating technical debt into the only language that actually moves the needle: risk and reliability. If you can stop talking about microservices and start talking about the probability of a service outage during a peak sales window, you’ve already won half the battle. You aren’t asking for permission to play with new tools; you are presenting a roadmap to keep the lights on and the business running predictably.

I’ve spent enough time in the trenches to know that the most elegant code in the world doesn’t matter if nobody understands why it needs to exist. Don’t get frustrated when they don’t care about your refactoring efforts; instead, take it as a signal to change your perspective. Build that bridge between the terminal and the boardroom. If you do this well, you won’t just be the person who fixes things when they break at 2:00 AM—you’ll be the person who prevented them from breaking in the first place.

Frequently Asked Questions

What do I do when the manager responds to my risk assessment by just saying "we don't have the budget for this right now"?

When they say “no budget,” they aren’t rejecting your technical logic; they’re rejecting your cost-benefit calculation. You’ve likely presented it as a technical necessity rather than a financial one. Stop talking about refactoring or technical debt—those are invisible costs to them. Start talking about the cost of downtime. If the system goes down, what is the literal dollar amount lost per minute? Give them a number they can actually put in a spreadsheet.

How do I handle a situation where the manager is technically literate enough to argue with me, but still makes decisions based purely on feature velocity?

This is the hardest one. When they know enough to push back, they’ll frame your technical debt as “gold plating.” Don’t fight them on the elegance of the code; fight them on the math of the slowdown. I’ve learned to stop saying “this is messy” and start saying “this approach adds a 20% tax to every feature we ship next quarter.” If they want velocity, show them how the current path is actually a brake.

Is there a way to track these technical debt conversations so I can point back to them when the inevitable outage happens?

Don’t just let these conversations die in a Slack thread or a fleeting meeting. I keep a “Risk Log”—it’s basically a glorified spreadsheet of technical debt, the specific trade-offs we made, and the estimated cost of ignoring them. When the system eventually buckles, I don’t argue; I just pull up the log and say, “We talked about this in October. Here is the exact thing that broke.” It turns a blame game into a data point.

How much detail is too much? I don't want to sound like I'm hiding behind jargon, but I also don't want to oversimplify to the point where I'm being dishonest about the complexity.

The sweet spot is explaining the consequences, not the mechanics. If you start explaining how a distributed lock works, you’ve already lost them. Instead, tell them that without it, two different processes will try to charge the same customer twice. You aren’t being dishonest by skipping the implementation details; you’re being respectful of their time. If they need the math, they’ll ask. Otherwise, focus on the risk, not the syntax.

Tomasz Wierzbicki

About Tomasz Wierzbicki

I am not interested in arguing about frameworks. I am interested in why the thing broke at two in the morning and what would have prevented it. Most of what I know came from being wrong in production and writing it down afterwards.