Skip to content

Application maintenance

Maintaining an app after launch

Launch is where the real cost curve starts. An application that is observed, patched and improved in small increments gets cheaper to change; one left alone until something breaks gets more expensive every quarter until it is rebuilt.

John M Granskou11 min read
Observe → triage → change → verifyObserveTriageChangeVerifyContinuous, not a phaseLaunch is the start of the work
Maintaining an app after launch

The launch date is treated as the end of a project and is in fact the start of the expensive part. Everything after it — the updates, the incidents, the small improvements — determines whether the application stays an asset or quietly becomes a liability the business works around.

The loop, not the phase

The loop runs continuously. Where it stops, technical debt starts accruing interest.

Three kinds of work

Conflating these is why maintenance budgets get cut: someone sees only the first tier and concludes that a working application does not need attention.

Only the third tier is visible to users. The first two are why the third stays possible.

What quietly rots when nobody is watching

NeglectedLooks fine forThen presents as
Dependency updatesMonthsAn unsupported runtime and simultaneous breaking changes
Monitoring and alertingUntil the first failureA customer reporting a broken workflow
Backup restore testingUntil it is neededA backup that exists but does not restore
Performance budgetsA few releasesA steadily slower product nobody can date
Integration credentialsUntil expiryA silent sync failure discovered weeks later
Data qualityGraduallyReporting nobody trusts and decisions made on instinct
Neglect and its arrival time

Release rhythm

Small, frequent, reversible releases are safer than infrequent large ones, because the surface area of any single change is small enough to diagnose. That requires the mundane infrastructure: automated checks, a staging environment with realistic data, and the ability to roll back without ceremony.

Where an application runs scheduled work or exchanges data with other systems, failure handling deserves the same treatment as user-facing errors — the reasoning is set out in error handling in automated workflows.

Budget it deliberately

Maintenance is not overhead on the build; it is what protects the value of the build. Businesses that carry it as a standing commitment keep shipping improvements years in. Those that defer it pay the same money later as a rebuild, and lose the accumulated product knowledge along the way. It is part of how we run application and PWA development.

A maintained application gets cheaper to change every year. An unmaintained one gets more expensive every quarter, until the only option left is to start again.

Frequently asked questions

What does app maintenance actually involve?

Dependency and platform updates, security patching, monitoring and incident response, backups and restore testing, credential and certificate renewals, performance and accessibility checks, data quality, and a steady flow of small product improvements.

How much should maintenance cost?

Planned rather than guessed. It is best treated as an ongoing capacity commitment sized to the application's complexity and integrations, reviewed as those change — not as an occasional emergency spend.

Why do dependency updates matter if nothing is broken?

Because the cost of updating rises with the gap. Small regular upgrades are routine; two years of deferral means simultaneous breaking changes, an unsupported runtime and known vulnerabilities, all at once.

What should be monitored?

Errors with enough context to reproduce them, key workflow completion rates, integration failures, performance on real devices, and background job health. Monitoring should tell you a workflow broke before a customer does.

When is a rebuild justified instead of maintenance?

When the architecture blocks the direction the business needs to go, or when the cost of each change has risen to the point where nothing ships. Rebuilding to escape neglected maintenance simply restarts the same clock.