Skip to main content

Conceptadvanced

Modernization Drivers

Overview

Modernizing is expensive, slow, and carries risk. The question that precedes any proposal: what exactly can't we do because of this system?

If the answer is "it's old", "the technology is obsolete" or "the code is bad", there is no project — there is discomfort.

A motive that sustains investment has two properties: it describes a concrete limitation, and the cost of living with it is measurable.

Problem

Modernization proposals are usually framed from the technical symptom:

"the technology is out of support"
"the code is hard to maintain"
"it's a monolith"
"nobody wants to work on it"

None of those answers the question whoever decides the budget will ask: what do we gain?

And the result is predictable: the proposal competes with product initiatives that have an articulated return, and loses — year after year, until the system fails or the maintainer leaves.

See business architecture.

Core Concepts

The motives that sustain investment

blocked capability the business wants to do something and the system prevents it
speed changes take months; competitors respond in weeks
people risk one or two maintainers, with no replacement
vendor risk end of support, discontinuation, an imposed deadline
operating cost disproportionate to the value it delivers
compliance a regulatory requirement the system does not meet
security vulnerabilities with no fix available

The first three are the ones that most frequently sustain the decision, and the ones that least often appear articulated.

Note that none of them is "the technology is old". Age is an indicator of risk, not a motive — an old system that is stable, with a team that knows it and that nobody needs to change has no problem.

Translating the technical symptom into a business limitation

The work that turns a rejected proposal into an approved one:

technical symptom → business limitation
quarterly release → we can't respond to a competitor's move
in less than a quarter
business rules in code → each new product costs 3 months of engineering
one maintainer → if they leave, we lose the ability to change
pricing
expensive proprietary DB → $420,000 a year in licensing, for a system
serving 400 users

The right-hand column competes for budget. The left-hand one does not.

See business capabilities — the vocabulary that makes that translation.

The cost of not doing it has to be calculated

A modernization proposal is a comparison between two costs, and the second is usually not presented:

cost of modernizing the project estimate
cost of not modernizing time lost on each change, incidents,
opportunities not served, risk materializing

The second is diffuse and continuous, and therefore invisible. Making it explicit is what balances the comparison.

example: 8 changes a year, each one 6 weeks slower than it should be
→ 48 weeks of engineering a year
→ the cost of not doing it, on that dimension alone, is almost a year of
a team

Not modernizing is a legitimate decision

And it has to be defensible, not an omission.

the system serves, it is stable, and nobody needs to change it
the cost of modernizing exceeds the cost of living with it
the system will be discontinued for another reason soon
there are priorities with a higher return

In those cases, the correct decision is to record it: we decided not to modernize, for these reasons, and we will review in X months.

That is different from not deciding. The absence of a decision produces the system that degrades silently until it becomes a crisis.

Partial modernization is frequently enough

The proposal is usually "replace the system". Frequently the real motive affects one part of it.

motive: new products take 3 months
cause: the product rules are in code
solution: extract the rules, make them configurable
→ doesn't require replacing the system

See incremental modernization.

Identifying the part that causes the problem, and attacking only that, is frequently a fraction of the cost with most of the benefit.

Beware the comfortable motive

A bias worth naming: engineers prefer to work on modern technology, and that influences the assessment of necessity.

That is not dishonesty — it is human, and the motive presented is generally true. But the priority assigned to it may not be.

The test: if the same amount of effort were applied to something else, would the return be greater? If the honest answer is maybe, the proposal deserves more analysis.

And there is a legitimate motive usually omitted for seeming frivolous: retaining people. A system nobody wants to maintain has a real hiring and turnover cost — and it should be presented explicitly, with the number, rather than disguised as a technical argument.

The right moment is before the crisis arrives

A pattern that repeats: modernization is approved after the risk materializes — when the maintainer leaves, when the vendor announces end of support, when the system goes down.

At that point, it happens under pressure, with an imposed deadline and without the conditions that would make it succeed.

anticipated deadline set by the organization, knowledge transfer possible,
scope controlled
under crisis deadline imposed from outside, knowledge already lost, scope defined
by urgency

The difficulty is that the leading indicators are weak: a system that works generates no signal, and the degradation is gradual.

The ones worth tracking:

number of people able to maintain it falls before the crisis arrives
average time to implement a change grows gradually
share of changes that generate an incident
proximity of dependencies' end of support

See application portfolios.

The first is the most predictive and the easiest to obtain — and it is usually known informally by several people without ever becoming a number in a prioritization discussion.

Mental Model

"It's legacy" is not a motive. The motive is the concrete limitation it imposes, with the cost of living with it.

When to Use

  • Before any modernization proposal.
  • When prioritizing among candidate systems.
  • To defend the decision not to modernize.
  • In budget discussions with the business.

When Not to Use

Proposing from the technical symptom. "The code is bad" is not an investment motive for whoever approves budgets; the business consequence is.

Without calculating the cost of not doing it. The relevant comparison is not with the ideal, it is with carrying on as is — and that cost is usually the strongest argument.

Assuming the whole system has to change. The motive normally points at a specific part, and modernizing only that is a fraction of the cost.

Without checking whether the motive justifies the priority. A real motive is not the same as an urgent one; competing for budget requires showing why now.

Omitting legitimate motives for seeming frivolous. Difficulty hiring for an obsolete technology is concrete continuity risk, and it tends to be silenced for seeming less serious than technical ones.

Alternatives

  • Don't modernize, with a recorded decision and a review deadline.
  • Partial modernization — attack the part that causes the problem.
  • Containment — isolate the system so it does not limit the rest. See anti-corruption layer.
  • Reduce the dependency — instead of modernizing, reduce what depends on it.

The third is underrated: a well-isolated legacy system can go on operating for years without limiting the evolution around it.

Trade-offs

ModernizeLive with it
Removes the limitationIt stays
High, concentrated costDiffuse and continuous
Execution riskDegradation risk
Capacity freed laterCapacity consumed now
Complete replacementPartial
Solves everythingSolves what matters
Full costA fraction
High riskLower

Failure Modes

A proposal with no concrete motive. Rejected year after year.

Cost of not doing it not calculated. The comparison stays unbalanced.

Scope larger than the motive. Replacing the system when one part would do.

Priority with no analysis. The motive is real and is not the most urgent.

Absence of decision. Neither modernizing nor recording that you won't.

The motive presented is not the real one. The discussion happens about the wrong reason.

Common Mistakes

Arguing from obsolescence.

Not translating into a business limitation.

Not presenting the cost of living with it.

Proposing complete replacement by reflex.

Not recording the decision not to do it.

Hiding the retention motive behind a technical argument.

Real-World Example

A logistics company had a proposal to replace its routing system rejected in three consecutive budget cycles.

The justification presented: "2009 technology, code hard to maintain, a single maintainer".

On the fourth attempt, the proposal was reframed from the real motive, investigated with the operations areas:

limitation we can't offer same-day delivery
cause the routing algorithm recalculates routes overnight;
it doesn't support reoptimization during the day
cost of not a competitor offers it; we lost 3 large contracts in 18 months,
doing it estimated at $2.8 million a year
risk the sole maintainer is expected to retire in 2 years

The comparison:

cost of modernizing $840,000, 16 months
cost of not modernizing $2.8 million a year in revenue not captured,
plus the risk of losing the capability entirely

Approved in the following cycle, with no discussion.

And the scope analysis revealed that replacing the whole system was not necessary:

what caused the limitation the optimization engine, monolithic and batch
what did not vehicle and driver records, integrations, telemetry

The project as executed extracted the optimization engine and replaced it with a service that supports continuous reoptimization. The rest of the system stayed.

Real cost: $360,000, 9 months — less than half the budget, because the scope was reduced to what solved the motive.

Same-day delivery launched 11 months later.

And the people risk was addressed in parallel, with knowledge transfer from the maintainer to three people — treated as its own project, and not as a consequence of the modernization.

What the team learned: the three previous rejections were correct. The proposal asked for $840,000 to solve a technical discomfort, and the business had no way to assess it.

Practical Exercise

Take a system your team considers legacy and answer: what exactly can't we do because of it, and how much does that cost per year?

If there is no concrete answer, the proposal to modernize it will not be approved — and probably shouldn't be.

Interview Questions

  • Why is "it's legacy" not a motive?
  • How do you calculate the cost of not modernizing?
  • Why is the scope frequently larger than the motive?

Further Reading

  • Feathers, Michael. Working Effectively with Legacy Code. Prentice Hall, 2004.
  • Newman, Sam. Monolith to Microservices. O'Reilly, 2019.
  • Fowler, Martin. Technical Debt, 2003.
Finished reading this document?Your progress is saved in this browser only.