Skip to content
Services

Legacy modernisation

Changing a system whose behaviour nobody can fully describe. We map what it does and 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 takes 2–3 weeks; migration is incremental from there.

  • 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 engagement, not per fashion. If your team already runs something that works, we use 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?

One week, and you keep the baseline and the plan either way.