CodeCrafting All articles
Engineering Culture

Make Dull Work Visible: The Case for a Maintenance Budget

CodeCrafting
Make Dull Work Visible: The Case for a Maintenance Budget

Photo: Acabashi, CC BY-SA 4.0, via Wikimedia Commons

Every sprint has a leaderboard. There is the feature work that gets demoed on Friday, the bug fixes that get a mention in retro, and then there is the quiet pile of work that keeps the product from falling over. Dependency bumps. Certificate renewals. Test suite repairs. A database upgrade that has been 'next sprint' since the last time someone had a free afternoon. None of it looks like progress on a roadmap, which is exactly why it keeps losing to whatever shiny thing arrived in the team chat.

That is the case for a maintenance budget: a protected slice of sprint capacity, agreed in advance, for the unglamorous work that keeps existing systems healthy. Not a vague promise to 'make time'. Not a heroic Friday afternoon. A line item. In UK teams, where delivery pressure is real and headcount is rarely generous, making that work visible is less about process and more about honesty.

The invisible queue

Maintenance is invisible because it succeeds quietly. Nobody notices the patched library, the renewed certificate or the flaky test that was fixed before it became a three-day investigation. They notice the outage. They notice the security finding. They notice the release that slipped because a framework upgrade turned into a fortnight of surprise archaeology.

When maintenance has no budget, it becomes a series of tiny loans against future delivery. A developer skips the dependency update to finish a ticket. A team defers the observability work because the dashboard is 'good enough'. Someone adds a note to the backlog: 'revisit after launch'. The note ages badly. The cost does not disappear; it moves to the least convenient moment, usually a Friday afternoon before a bank holiday.

What novelty costs

I have watched teams switch from a stable, well-understood stack to a newer one because the conference talks were better. Sometimes that is the right call. Often it is not. One team I worked with moved a perfectly ordinary web application onto a more fashionable framework and spent two quarters rebuilding basic things they already had: authentication, permissions, deployment scripts, accessibility fixes. The old system was not beautiful, but it was understood. The new one was exciting, and it was late.

Another common pattern is replacing a boring but reliable tool with a more complex one because the team wanted to feel modern. The result is not always a disaster, but it is almost always a new maintenance bill: more moving parts, more dashboards, more things that need upgrading on a schedule nobody owns. Proven technology is not automatically good technology. But 'proven' is a feature, and it deserves a budget line just as much as 'new' does.

The pitch: insurance, not nostalgia

The trick to pitching a maintenance budget is to avoid sounding like the person who wants to ban all change. You are not arguing against innovation. You are arguing for the capacity to adopt new things deliberately and retire old things safely. Frame it as risk management and delivery predictability, not as a plea for quieter times.

A simple proposal for a stakeholder conversation:

The language matters. 'We want to spend 15% of our time on maintenance' can sound like a luxury. 'We want to reserve 15% of capacity to reduce release risk and keep our security posture current' sounds like management. Both describe the same work. One is easier to approve.

What goes in the budget

The contents will vary by team, but a useful starting list looks like this:

That list is not glamorous. It is also not optional. A boring technology budget is simply the cost of keeping your innovation from becoming someone else's legacy. The alternative is a team that ships quickly for a while and then spends months paying interest on the shortcuts.

Keeping it honest

A maintenance budget can become a slush fund if nobody watches it. Publish the list. Review it in the same way you review feature work. Ask whether the work actually reduced risk, or whether it was just comfortable tinkering. If the same upgrade appears for three sprints running, that is not maintenance; that is a project that needs its own plan.

There is also a cultural benefit. When dull work is budgeted, it stops being invisible labour. The person who updates the dependencies is not interrupting the 'real' work; they are doing the real work. In UK engineering teams, where we often talk about craftsmanship and sustainability, that distinction matters. Clean builds are not just about tidy code. They are about giving the unglamorous parts of the job a proper seat at the table.

All Articles

Related Articles

Pull Requests Without the Mumbling: How to Review Code Honestly and Kindly

Pull Requests Without the Mumbling: How to Review Code Honestly and Kindly

The Repair Café Mindset: Keeping Legacy Systems Alive Without the Grand Rewrite

The Repair Café Mindset: Keeping Legacy Systems Alive Without the Grand Rewrite

Error Messages That Help: Writing Copy People Can Act On

Error Messages That Help: Writing Copy People Can Act On