Software Maintenance Never Ends: It’s Like Adopting a Puppy

    Matt Watson
    By Matt Watson · CEO of Full Scale, 4x Founder, Author of Product Driven
    11 min read

    Picking out a puppy is the fun part. You bring it home, everybody crowds around, and for one afternoon it feels like all you signed up for. Then comes the food, the vet bills, the chewed-up shoes, and the early mornings, every day, for years. The cute part lasts an afternoon, and then you’re in it for the next decade.

    Buying or building software works the same way. Launch day is the puppy. Everyone celebrates the new app, the new feature, the thing you spent months building. Then the real bill starts showing up: a bug here, an operating system update that breaks something there, a library that quietly stops getting patched, a customer who wants a change. None of it ends, because the software keeps running and people keep using it.

    I’ve spent more than 20 years shipping software and then living with it. I co-founded VinSolutions, grew it into the number one customer relationship management (CRM) product in the auto industry, and sold it for $147 million, and that software needed care every single day it ran. I founded Stackify, a developer tools company with live customers who noticed the second anything went down. At Full Scale, we run software maintenance for clients as a core part of what we do. So I can tell you the thing nobody puts in the project budget.

    Software is never finished, it’s just running.

    What is software maintenance?

    Software maintenance is everything you do to a product after it ships to keep it working and keep it useful. That covers fixing bugs, patching security holes, updating the code to match new operating systems and devices, keeping it fast, and adding the small improvements users ask for over time. It’s the whole second life of the product, the part that starts the day you launch and runs until you turn the software off for good.

    Most people think of the build as the expensive part. It isn’t. Maintenance is roughly 60 to 80 percent of the total cost of a piece of software over its lifetime, a pattern so consistent it has its own name in project management, the 60/60 rule. The build is the down payment. Maintenance is the mortgage you pay for as long as you own the place.

    That reframe matters because of how teams plan. They budget for the project, ship it, and move the engineers to the next thing, as if the puppy raised itself. The bill still comes. It just shows up later, and usually at a worse time.

    The four types of software maintenance

    Maintenance work falls into four buckets. These four categories are the standard classification in software engineering, going back to the IEEE’s maintenance standards. Knowing which kind you’re doing helps you plan for it instead of reacting to it.

    TypeWhat it isReal example
    CorrectiveFixing bugs and errors after they show upPatching a checkout that crashes on one type of credit card
    AdaptiveKeeping software working as its environment changesUpdating an app so it still runs on the latest iOS release
    PerfectiveImproving features and speed based on real useCutting a report’s load time after users complain it’s slow
    PreventiveReducing future risk before it bitesReplacing a library that’s about to lose security support

    Corrective maintenance is fixing what’s broken. A user reports a crash, a calculation comes out wrong, or a button just does nothing. This is the maintenance everyone pictures, and it’s the most urgent, because a broken feature is costing you customers right now. At Stackify, a corrective fix meant a customer couldn’t see why their production system was failing, so it jumped the line ahead of everything else.

    Adaptive maintenance is keeping the software compatible with the world around it. Operating systems update, browsers change, payment providers swap out their interfaces, and tax rules shift. Your code didn’t break on its own, the ground moved under it. A tax app that worked perfectly last year has to change the moment the tax code does, or it’s useless to the people who depend on it.

    Perfective maintenance is making good software better. Customers use the product, they ask for new features, and they tell you which parts are slow or clumsy. This is where a lot of your roadmap actually comes from, and it’s how a product stays competitive instead of getting passed by something newer. A screen that takes 30 seconds to load isn’t broken, but speeding it up is the kind of work that keeps people from leaving.

    Preventive maintenance is the work you do now so you don’t get burned later. Cleaning up messy code, updating aging libraries before they go unsupported, and writing down how things work so the knowledge doesn’t live in one person’s head. It’s the least urgent and the easiest to skip, which is exactly why so many teams skip it until it hurts.

    Most teams handle corrective and adaptive work because they have to. The perfective and preventive work is where the discipline shows, and where software reengineering eventually becomes necessary if you let it slide too long.

    Why software maintenance never ends

    Here’s the part that surprises people. Software decays even when you don’t touch it.

    You can ship a product, freeze the code, and walk away, and it will still break. The operating system it runs on gets an update. Browsers change how they render your pages, and a service you depend on retires the old version of its interface. Then a security researcher finds a hole in a library you used three years ago and publishes it, and now every attacker knows about it too. These are called common vulnerabilities and exposures (CVEs), and a new batch lands every week. The world keeps moving, and software that stands still falls behind by doing nothing at all.

    At Stackify, our customers ran our tools to watch their own systems. If our product hiccuped, they knew before we finished our coffee, because the whole point of the product was to catch problems. You don’t get to stop feeding that puppy. There is no version of “we’ll get to it next quarter” when real people depend on the thing working today.

    This is also why I tell engineers to keep the stack boring. A simple, well-understood codebase is far cheaper to maintain than a clever one. Every bit of complexity you add at build time is complexity someone has to feed for the life of the product.

    What it costs to skip maintenance

    Skipping maintenance feels free, right up until it isn’t.

    When you defer the work, the cost doesn’t disappear, it compounds. Small problems pile into technical debt that makes every future change slower and riskier. The codebase falls further behind the tools and versions everyone else is using, so each update gets harder than the last. And the knowledge of how it all works concentrates in one or two people, which means the day they leave, you’re in real trouble.

    Then there’s security. Unpatched software is the front door attackers walk through, and a breach costs you far more than the maintenance you skipped to save a few dollars. The math almost never works in favor of waiting.

    Building a development team?

    See how Full Scale can help you hire senior engineers in days, not months.

    You pay for maintenance either way. You can pay a steady, predictable amount now, or you can pay a big, ugly amount later when something finally falls over and you’re rebuilding under pressure. The bill is the same puppy, just older and angrier.

    Who should own maintenance? The hidden tax on your best engineers

    Now the leadership question, the one that actually decides how much maintenance costs you.

    Most companies put maintenance on the same engineers who built the product. It makes sense on paper. They know the code, so let them keep it running. But those are usually your most senior, most expensive, most capable people, and you’ve just assigned them to patch old features instead of building new ones.

    Every hour your best engineers spend keeping old software alive is an hour they’re not building the thing that grows your business.

    That’s the hidden tax. It rarely shows up as a line item, but you feel it in how slowly the new stuff ships. Your strongest people get bogged down in a queue of bug fixes and dependency updates, the work that has to get done but doesn’t move the company forward. Good engineers also hate it, and the ones who can leave for a job with more interesting problems often do. So you lose the work and the person.

    The fix isn’t to ignore maintenance, because we just covered what that costs. The fix is to stop spending your scarcest, priciest talent on it.

    We ran exactly this split at VinSolutions. One team owned all the escalated support issues and bug fixes, while our primary team stayed focused on building new features. The maintenance work still got handled, and handled well, but it stopped pulling down the engineers we needed shipping the next thing. That’s the whole idea: keep maintenance and feature work on separate tracks so neither one starves the other.

    Why offshore staff augmentation is built for maintenance

    This is where a dedicated offshore team earns its place. That separate maintenance team doesn’t have to sit in-house, and for most companies it shouldn’t. Maintenance is steady, ongoing work that never really stops, which makes it the wrong fit for a quick scoped project and the right fit for a team that sticks around. You bring on a dedicated team through staff augmentation to own the maintenance, and your internal engineers go back to building what’s next.

    The cost difference is hard to argue with. A senior software developer in the US runs a base salary of roughly $150,000 to $185,000, and once you add benefits, taxes, equipment, and overhead, the real loaded cost lands north of $200,000 a year. That’s a lot to pay someone to apply security patches and chase dependency updates. A senior engineer in the Philippines doing the same work bills a fraction of that. Maintenance is the last thing you want to pay top US rates for.

    Maintenance is the perfect job for a dedicated team that costs a fraction of what you’d pay to keep a senior US engineer doing it.

    There’s a catch, and I want to be honest about it. If your only reason for going offshore is to spend as little as possible, you’ll end up hiring the cheapest freelancer you can find, and they’ll vanish in the middle of a sprint. I call that cheapshoring, and it’s how people get burned and swear off offshore forever. Maintenance especially needs a stable team, because the value is in the knowledge they build up about your codebase over time. That’s why our developer retention runs over 93 percent. The team that learns your software this year is the same team running it next year, so the knowledge stays put instead of walking out the door.

    The model only works when the offshore team is treated as part of your team rather than a vendor on the far side of a wall. Derrick Leggett, the CIO of AMC Theatres, put it best when describing his Full Scale engineers: “It’s a fully integrated team. It’s just some of the people happen to be living in the Philippines.” His developers join the same standups, use the same tools, and follow the same standards as everyone else. That’s what makes offshore development actually work, and it’s the difference between a team that maintains your product like they own it and a project shop that hands you back a pile of code.

    If you want to dig into how this works, we break down what staff augmentation is, how the dedicated team model is structured, and where staff augmentation and outsourcing part ways.

    Frequently asked questions

    How much should I budget for software maintenance?

    A common industry rule of thumb, often traced back to Gartner, is 15 to 20 percent of the original build cost per year, and it climbs higher as the software ages or if the system is complex or business-critical. The more useful way to think about it is that maintenance is the majority of what the software costs you over its life, so plan for it as an ongoing line item from day one rather than treating it as a surprise.

    What are the four types of software maintenance?

    The four types are corrective (fixing bugs and errors), adaptive (keeping the software compatible with new systems, devices, and rules), perfective (improving features and performance based on user feedback), and preventive (cleaning up code and updating dependencies before they cause problems). Most teams cover corrective and adaptive work by necessity, while perfective and preventive work is where strong teams pull ahead.

    Should my original developers handle maintenance, or a separate team?

    For most companies, a separate dedicated team is the better long-term answer. Your original developers are usually your most senior and expensive engineers, and keeping them on maintenance means they aren’t building the new features that grow the business. A dedicated maintenance team frees your core engineers for high-value work while still giving the software the steady care it needs.

    Can you outsource software maintenance to an offshore team?

    Yes, and maintenance is one of the best fits for an offshore team because the work is ongoing and predictable rather than a one-time project. The key is hiring a stable, dedicated team that stays with your codebase long enough to build deep knowledge of it, rather than chasing the cheapest freelancer you can find. Treated as a real extension of your team, an offshore group can run maintenance reliably at a fraction of US cost.

    Don’t adopt the puppy and forget to feed it

    Every piece of software you ship is a commitment, not a finish line. The build gets the applause, but the years of quiet care are what decide whether the product is still alive and worth using down the road. The smart move isn’t to dread that work, it’s to staff it the right way: a dedicated team that owns the maintenance, so your best people stay free to build what’s next.

    If you’re carrying software that needs steady care and you’d rather not tie up your senior engineers doing it, let’s talk about building you a dedicated maintenance team.

    Get Product-Driven Insights

    Weekly insights on building better software teams, scaling products, and the future of offshore development.

    Subscribe on Substack

    Ready to add senior engineers to your team?

    Have questions about how our dedicated engineers can accelerate your roadmap? Book a 15-minute call to discuss your technical needs.