CMCarl MannSolutions Architect
Engagement · 03

Legacy modernization.

The careful kind. Hardening, not the rewrite that takes the business down with it.

Classic ASP, old PHP, mid-2000s .NET, the SQL Server that's been running since the office still had a fax machine. Systems that earn their keep but scare the next contractor away. The work is unglamorous, incremental, and respectful of the business that lives on top of the codebase.

12-24wk typicalASP / PHP / SQLfluent0big-bang rewrites
What you get

Hardened, not rewritten.

The big-bang rewrite is the riskiest move a working business can make. The alternative is rarely glamorous -- it's a series of small, deliberate cuts that leave the system running every Monday morning even after a Friday-night migration.

01

Read the whole codebase

Every modernization starts with reading. A documented map of the system -- modules, dependencies, dead code, the "do not touch" corner -- delivered before a single line is changed.

02

Strangle, don't detonate

Incremental hardening: a strangler fig pattern, a new endpoint alongside the old one, a feature flag for the cutover. The legacy keeps running while the new pieces prove themselves on real traffic.

03

A system someone else can keep

Tests where there were none. A README the next engineer can read. A deployment that doesn't require three people on a call at 2 a.m. The outcome isn't shiny -- it's habitable.

Engagement model

Small cuts,
running system.

Modernization engagements are typically longer than greenfield -- months instead of weeks -- but each milestone is small enough that a rollback is a non-event, not an incident.

  1. 01

    Read + map

    Two to three weeks of reading, running the system locally, and producing a written architecture map. No code changes until the map is on paper -- and signed off by someone who remembers why it's that way.

  2. 02

    Pick the seam

    Modernization works at boundaries: an HTTP layer, a database edge, a batch job. The first cut is at the seam with the highest pain-to-risk ratio.

  3. 03

    Strangle in production

    New code lives next to old. Feature flags route a slice of traffic. Behaviour compared, regressions caught, then traffic widened. The legacy is retired one piece at a time, not in a Saturday-night cliff edge.

  4. 04

    Leave it habitable

    Tests where it matters, a README the next engineer can read in an afternoon, and a deployment that survives a holiday. Not pristine -- habitable.

Scope notes

A good fit, and a not-quite-fit.

Good fit

A working system that's outlived its tooling.

  • Classic ASP, PHP 5.x, mid-2000s .NET, ColdFusion, perl-CGI, Access front-ends -- the systems other developers won't quote on.
  • A business that depends on the system being up and would prefer not to find out what happens otherwise.
  • A patient stakeholder. Modernization is months of small wins, not a launch event.
  • Documentation lives in someone's head -- and that someone is still around to answer questions for two hours a week.

Less of a fit

The cliff-edge rewrite, please.

  • A predetermined "burn it down and start over" mandate -- the practice is the opposite shape.
  • Mainframes, COBOL, AS/400 -- there are specialists for that, and this isn't one of them.
  • A system nobody can demonstrate to me. If no one will run it in front of me, I can't underwrite the work.
  • Six-month deadline imposed by an unrelated funding cycle -- modernization timelines come from the codebase, not the calendar.

The careful kind
of modernization.

Describe the system, the year it was built, and the part that keeps you up at night. A reply lands inside 24 hours on weekdays.

Start a Project Booking Q3 2026
© 2026 Carl Mann · All rights reserved · Made by hand on the open web~ delegate the technical ~Set in Instrument Serif, Manrope & JetBrains Mono