Software Maintenance and Support: Scope, Cost and Ownership

Avtar by Nazrina Sohal

Software rarely breaks on launch day. It breaks months later, when something it depends on quietly changes.

A runtime reaches end of life. A payment provider retires an API. The one engineer who understood the reporting module moves to another team. None of it appears in the launch plan, and all of it lands on someone.

Software maintenance and support is the plan for that day. It covers two jobs that look alike and aren't: keeping the software working, and keeping the people who use it working.

This article is for the technology or operations leader who owns a custom system and has to plan, budget and staff its upkeep.

Key Takeaways

  • Maintenance changes the software, and support helps people use it. They need different skills, response times and budgets.
  • Maintenance comes in four types: fixes, updates for new environments, improvements and preventive work. Budget for all four, not just fixes.
  • Runtimes and libraries reach end of life on fixed dates, so a launched system needs scheduled upgrades even when nothing is broken.
  • Plan support by severity and response time, and keep a named owner for each system, its dependencies and its documentation.
  • Budget a share of the build cost every year. Plans fail through no owner, skipped upgrades and knowledge that leaves with people.

What Are Software Maintenance and Support?

Software maintenance is the work of changing a system after launch, and support is the work of helping people use it.

  • Maintenance fixes defects, keeps the system compatible with its environment, and improves it. Engineers do this work, and it changes the code or its setup.

  • Support answers questions, investigates reported problems and restores service. It's the front line users talk to, and it may not change the code at all.

Software support and maintenance is often sold as one package, and application maintenance and support is the same idea under another name. Software maintenance, on its own, usually means the engineering half.

In practice the two connect. A support ticket often becomes a maintenance task, and maintenance work changes what support has to know.

The next question is why a system needs either when nothing looks broken.

Why Does Software Need Maintenance When Nothing Is Broken?

Software that nobody touches still gets older.

The platform under it keeps moving. Runtimes, libraries, browsers and operating systems all have release and support schedules, and the system you launched depends on every one of them.

Python's developer guide lists each version's end-of-life date. Python 3.10 reached end of life on October 1, 2026. Microsoft's .NET support policy shows that support for .NET 8 and .NET 9 ends on November 10, 2026.

Runtime Status End of support
Python 3.9 End of life October 31, 2025
Python 3.10 End of life October 1, 2026
Python 3.11 Security fixes only October 2027
.NET 8 (LTS) Maintenance November 10, 2026
.NET 9 (STS) Maintenance November 10, 2026
.NET 10 (LTS) Active November 14, 2028

Note: dates follow each project's published support pages as of October 2026. Check the versions your own system runs on.

When a runtime reaches end of life, it stops getting security fixes. The system keeps running, and the risk grows quietly.

Security is the sharpest edge. CISA keeps a Known Exploited Vulnerabilities catalog, a list of flaws attackers are already using, and patching those first is a sensible rule for any system with internet exposure.

Outside services change too. Payment providers, identity services and other APIs revise their rules, and your system has to follow.

Some teams leave working systems alone. That holds for an isolated system with no internet exposure and no changing dependencies. It stops holding the moment the system touches the internet, an outside API or customer data.

Not all maintenance is the same work, and a plan that covers only one kind leaves gaps.

What Types of Maintenance Does a System Need?

Maintenance comes in four types, and a plan that funds only fixes leaves the other three to chance.

The types of software maintenance are corrective, adaptive, perfective and preventive.

Corrective Maintenance

  • What it is: Fixing defects found after launch.

  • Typical trigger: A bug report, an error in the logs or a failed process.

  • If you skip it: Workarounds pile up, and users stop trusting the system.

  • Budget signal: If a steady stream of defects arrives each month, reserve capacity for fixes. If defects are rare, a small buffer is enough.

Adaptive Maintenance

  • What it is: Changing the system so it keeps working as its environment changes, such as a runtime upgrade, a new browser version or a changed outside API.

  • Typical trigger: An end-of-life notice, an operating system update or a provider's announcement.

  • If you skip it: Security fixes stop and compatibility breaks, usually at a bad time.

  • Budget signal: If your system depends on several runtimes and outside APIs, schedule upgrade windows through the year. If it depends on few, one a year can do.

Perfective Maintenance

  • What it is: Improving the system, such as speeding up a slow report, simplifying a screen or adding a small feature.

  • Typical trigger: User feedback and measured pain.

  • If you skip it: The system works but gets slowly worse to use, and users go back to workarounds.

  • Budget signal: If support tickets cluster around the same screens, fund improvements there. If tickets are scattered, hold.

Preventive Maintenance

  • What it is: Work that prevents future problems, such as cleaning up code, adding tests, tuning performance and removing unused parts.

  • Typical trigger: Each change costs more than the last, or releases slow down.

  • If you skip it: Every change takes longer and breaks more, until upkeep costs more than the system is worth.

  • Budget signal: If every change touches fragile code, set aside regular time for cleanup. If changes are quick and safe, a small allowance works.

Maintenance changes the software. Support is how people reach it, and it needs its own plan.

What Should Support Cover?

Good support is defined by how fast each kind of problem gets a response.

Software support services usually split into tiers. The first tier takes questions and known issues. The second investigates reported problems. The third is the engineers who change the code.

Application support services work the same way, with one addition. Someone has to watch the system, so problems are found before users report them.

Severity What it looks like Typical first response Typical fix target
Critical System down or data at risk Within an hour, around the clock Hours, with a workaround first
High A main function fails for many users Within a few hours in working time A day or two
Medium A function fails for a few users, or has a workaround Same or next working day The next planned release
Low A question or a small annoyance Within a few working days When convenient

Note: these are Classic Informatics starting points for typical business systems. Agree figures that match your own risk.

Software maintenance and support services should also say who works when. A system used across time zones needs different cover from an internal tool used in one office.

Custom software support differs from support for a packaged product. There's no product help desk to call, so the people who support it need to know how it was built.

Some teams prefer to pay only when something breaks, by the hour. That suits a rarely used internal tool. For a system that customers or staff depend on daily, waiting for a call means slower responses and no one who knows the system.

How much of this you fund shapes the budget.

What Do Maintenance and Support Cost?

Plan for maintenance as a yearly share of the build cost, not as a surprise.

Build budgets get most of the attention in custom software development, and upkeep is the half that's easiest to forget.

In our experience, a common planning range is 15 to 20 percent of the original build cost per year. Simple systems with few integrations sit below that, and heavily integrated or regulated systems sit above it.

System type Typical yearly share of build cost Why
Simple internal tool Below 15% Few users, few integrations and little change
Standard business application 15 to 20% A steady mix of fixes, upgrades and small improvements
Heavily integrated or regulated system 20% or more Many dependencies, audits and strict response times

Note: these shares are Classic Informatics planning observations, not sourced figures. A firm number needs a review of the system.

Four things move the number: how many systems it connects to, how many users it has, how often it changes, and how regulated it is.

A software maintenance plan should list what the yearly share covers: upgrades, fixes, support hours and monitoring.

Software maintenance cost usually rises when upgrades are skipped, because each skipped year makes the next upgrade bigger.

Cost is partly a result of how the system was built.

What Makes a System Easy to Maintain?

Systems are maintained the way they were built.

Automated tests. Tests tell you whether an upgrade broke something. Without them, every change is a guess, and upgrades get postponed.

Documentation that stays current. Record how the system works, how it's deployed and how to recover it. Keep it next to the code so it changes with it.

Monitoring and logs. Alerts tell you about problems before users do, and logs tell you where to look.

Dependency hygiene. Keep a list of runtimes and libraries and their support dates. Software update management is easier when you know what will expire next.

Clear ownership. Name one owner per system, with a backup.

A software maintenance process is just these habits made routine: triage, fix, test, release and review.

Most of this is ordinary good engineering, which is why coding best practices pay back for years after launch.

Long partnerships show how this plays out. Classic Informatics has worked with First American Title on its closing cost platform, which covers 28 US states and more than 650 counties, across a partnership of 14 to 15 years.

The InterDent partnership has run for 20 years, spanning three generations of data warehouse and more than 40 custom applications. A platform that stays in use that long has to be maintained on purpose, and the habits above are what make that possible.

Large organizations add rules of their own.

What Changes on Enterprise Maintenance?

Four things add calendar time that has nothing to do with writing code.

The habits in how to build enterprise software carry past launch, because change approval, access control and audit work the same way on day 500 as on day one.

Change windows and freezes

Large organizations restrict changes around peak periods and reporting dates, so upgrades have to fit the allowed windows.

If you have blackout periods, schedule upgrades well ahead of them. If you don't, plan routine windows.

Security and audit reviews

Patches and upgrades may need security review or change-board approval before they reach production, which adds days to every fix. In our experience this is the biggest gap between "we can fix it" and "it's fixed".

If changes need approval, agree a fast lane for urgent security fixes. If they don't, a standard release works.

Several environments

Test, staging and production environments need to stay alike, and every upgrade runs through them in order.

If you run more than one environment, automate promotion between them. If you run one, add a second before the next big upgrade.

Handovers and cover

People move on, and support runs across shifts and time zones, so each handover loses context unless it's written down.

If support spans time zones, keep runbooks and incident notes current. If one team covers all hours, informal notes may do.

Most trouble comes from three gaps.

Where Do Maintenance Plans Go Wrong?

Three gaps cause most post-launch trouble, and each one is about people, not code.

No Owner

Nobody is named as responsible for the system. Issues bounce between teams, and small problems sit until they become big ones.

Name one owner per system, with a backup, before launch.

Skipped Upgrades

Upgrades are postponed because nothing is visibly wrong. Then a runtime reaches end of life and the upgrade becomes urgent and large.

Keep a calendar of support dates, and upgrade a little at a time.

Lost Knowledge

The people who built the system move on, and the documentation is thin. Every fix starts with weeks of rediscovery.

Keep documentation, tests and runbooks current, and plan handovers well before people leave.

Each gap is cheap to close before launch and expensive after it.

Choosing a Software Maintenance and Support Partner

Ask a partner how they handled the last runtime that reached end of life.

A response-time promise is easy to write. An upgrade story shows how the partner plans, tests and communicates when someone else fixes the deadline.

Beyond that, screen for four things: people who know your system or can learn it quickly, response times set by severity, a habit of tracking support dates, and written handover notes.

Treat the handover from the build team as the extra test on top of choosing a custom software company. A partner who can't describe how they'd take over your system hasn't planned for it.

Software maintenance services and software support services look alike on paper, so upgrade history is the tiebreaker.

We support and extend the systems we build for years at a time, and our custom software development services cover the full life of a system, not just the launch.

Let's Sum Up!

Software maintenance and support comes down to ownership. Name an owner for every system. Plan for four types of maintenance and for support by severity. And budget a share of the build cost every year, before launch.

Classic Informatics has spent more than 23 years building enterprise software. If you're planning the upkeep of a system, we're glad to talk through its dependencies, its support needs and your timeline.

FAQS

Frequently Asked Questions