Skip to content
Services

Legacy modernisation

Changing a system whose behaviour nobody can fully describe. This is the work that most needs someone inside the team rather than across a contract, because the knowledge that matters is undocumented and lives with your people. We map what the system does, pin that behaviour with tests before touching it, then move it in increments each of which can be reverted on its own.

When teams call us

If more than one of these is true, this is usually the right starting point.

Mapping in the first two or three weeks; migration runs in slices you can stop between.

  • The people who wrote it have left
  • Every change carries a risk nobody can size
  • A rewrite has been proposed more than once and never started

What it covers

  • Behavioural mapping of the existing system
  • Characterisation tests before any change
  • Strangler-fig migration, never a big-bang rewrite
  • Dead-code detection and removal

What you keep

  • A behavioural map of what the system actually does
  • A test suite that pins current behaviour
  • A migration plan with independently revertible steps
How it runs

How we approach it

The sequence this work follows, and why it is in that order.

  1. Map behaviour, not intent

    What the system does in production, traced from real traffic — which is reliably different from what the documentation and the original authors say it does.

  2. Pin it with characterisation tests

    Tests that assert current behaviour, bugs included. They are not there to prove the system is right; they are there to tell you the moment it changes.

  3. Strangle, never rewrite

    A facade routes traffic old-path or new-path per route. Each slice ships and can be reverted alone. Big-bang rewrites fail because the cutover is the only moment you learn anything.

  4. Decommission deliberately

    Old paths are removed once traffic has moved and stayed moved. Leaving both alive "just in case" is how a modernisation ends with two systems instead of one.

What we build with

The stack for this work

Chosen per deployment, not per fashion. If your team already runs something that works, we work in that instead.

  • Analysis

    • Dependency graphing
    • Coverage mapping
    • Traffic tracing
  • Safety net

    • Characterisation tests
    • Contract tests
    • Feature flags
  • Migration

    • Strangler facade
    • Dual-run comparison
    • Shadow traffic
  • Targets

    • TypeScript
    • Node.js
    • PostgreSQL
    • Containerised runtimes
Before you ask

Questions we get about Legacy modernisation

Let’s talk

Need Legacy modernisation?

Talk to an engineer who has done this before — and if this is the wrong place to start, they will say so.