A business called me eighteen months after their site went live, because it had stopped taking payments overnight. I hadn’t built it. An agency had, as a WordPress site, and then that agency had gone quiet and eventually vanished. As far as the owners were concerned there was nothing to worry about, because in their heads it was just a website, and websites don’t break. Nobody had touched the code. No deploy, no config change, nothing. The payment provider had retired the old version of the integration the site relied on, warned about it for a year in emails that went to an inbox nobody read anymore, and then switched it off.
That’s the part almost nobody budgets for. After launching their product a business points its attention where it’s needed next, more customers, the next feature, actually growing, and assumes the software will keep running itself in the background. It won’t.
Software you never touch still rots.

I understand where the myth comes from. Most of what you buy works like a printer. You run it until it breaks, and when it breaks you don’t repair it, you replace it, because the repair costs more than a new one. So you never really maintain a printer. You just replace it on the day it dies, and until then you don’t think about it at all.
Software works more like your grandfather’s classic car. You can’t throw it out and buy an identical fresh one, that’s a bad financial decision, and you won’t get the same exact thing anyway. And waiting for it to break before you spend anything is the most expensive way to own it. Small, steady, boring upkeep costs less than the emergency you get without it.
The reason is that software never sits still, even when you do. It runs on top of other people’s software that keeps shifting underneath it, talks to services run by companies that change their minds, and lives on a network full of people trying to break in. Think of it like a boat in the water: leave it untended and it rots from the waterline down, whether or not anyone is aboard.
This is also the answer to “why don’t we just build everything ourselves and own the whole stack?” You can, but every piece you build is another boat you now have to keep afloat. Owning more software means maintaining more software, forever. It’s one of the arguments for renting the parts that aren’t your core business. I wrote about where owning it is worth it if you want the longer version.
Say you freeze the code completely. Not one line changes for two years. Here’s what happens anyway.
Not one of those is triggered by touching the code. Will someone be there to catch them before your customers do?
A frozen codebase isn’t a stable system. It’s a stable target with an expanding list of ways to knock it over.
“Maintenance” is several different jobs:
So, you might be asking: “what does all of this cost?”
From my own experience: budget somewhere around 15% to 25% per year of the original development cost to keep the system running and healthy. I’d treat it as a sanity check rather than a number set in stone.
Here’s what it looks like on real projects:
A plan with a big number for building it and a zero for keeping it alive is an unfinished plan, and that zero is usually what ends up costing the most.
None of this is money down the drain. Skipping it doesn’t remove the cost, it just delays it, and it comes back larger. Think of the oil changes on a car: unremarkable when you do them on time and unforgettable after two years of neglecting them.
There are three ways to actually structure who does the ongoing work, and the right one depends on your team and how much the system matters.
You pay a fixed monthly amount and the maintainer keeps the system healthy, usually while handling a steady stream of small changes. Predictable cost, a known person who already understands your system, and someone actively watching rather than waiting for you to notice a problem. This is what I usually recommend for a system the business depends on, because the whole point is that it needs doing whether or not anything visibly broke this month.
No monthly fee. You call when something breaks or you need a change, and you pay for the time. It’s cheaper, but the catch is twofold:
I only recommend on demand for genuinely low stakes systems. An internal tool, something with no sensitive data, somewhere a day of downtime or a slow fix costs you nothing you’d actually miss.
You take it in house. Your own developers own it going forward. This is the right long term answer for plenty of companies, especially once the software is central enough to justify a full time person. It only works if the handover is real. Documentation, access to every account and credential, a walkthrough of how the thing is built and deployed, and an overlap period where the person who built it is still reachable. A real handover isn’t just a zip of the code and a “good luck”. I’ve been hired to clean up several that were.
Many businesses move through these over time. Retainer right after launch, when the system is new and the knowledge lives entirely with the builder, then a handover once the software is important enough to justify the cost. The mistake is ending up on “on demand” by accident rather than choosing it. That’s what happens when no maintenance arrangement ever gets signed, or when nobody involved sees software as a thing that needs tending in the first place.
The cheapest time to sort out the maintenance arrangement is before day one, while you still have the developer’s full attention and leverage. By the time something’s broken, you’re negotiating from the weak side.
Launch isn’t the day your software is finished. It’s the day it’s in the best shape it will ever be by accident, fresh and clean because nobody has found the cracks yet. From there the direction is mostly your choice. Left alone, it drifts downhill. But tended properly, it goes the other way. Little by little it becomes a better piece of software than the one you launched, steadier, better fitted to how the business actually works, less likely to surprise you.
Good maintenance isn’t damage control. It’s how software gets better.
Neglect is what turns the thing you built into the thing I get hired to rescue. The businesses that budget for the years after launch, decide who owns the software, and settle these questions before they go live are the ones that never reach out in a panic.
If you’re planning to build something and there’s a confident number next to “development” and a blank next to “everything after,” or you launched a while ago and you’re not sure who’s keeping the thing afloat, this is the conversation worth having before something forces it.