Skip to content
Mayrian

Legacy software modernization

Replace or renew ageing systems piece by piece, while the business keeps running on them.

1-       CALC-DISCOUNT.2-           IF CUST-TYPE = 'G'3-              COMPUTE WS-DISC = ORDER-TOTAL * 0.104-           ELSE5-              MOVE 0 TO WS-DISC6-           END-IF.7+// Characterized by tests before the rewrite8+export function discount(order: Order): number {9+  return order.customer.tier === "gold"10+    ? order.total * 0.111+    : 012+}
Same behaviour, proven by characterization tests14 tests pass on both

What we build

Systems we modernize

We move business-critical software off outdated technology part by part, while the business keeps running on it.

  • Unsupported technology

    Move off end-of-life frameworks, languages or databases before they become a security risk.

  • Monolith to modular

    Split a tangled codebase into well-defined modules or services that teams can change safely.

  • On-premises to cloud

    Move applications to managed cloud services to cut infrastructure work.

  • Desktop to web

    Replace desktop or terminal applications with browser-based ones.

  • Database migration

    Move from unsupported databases to current versions or managed services, reconciled at every step.

  • Interface modernization

    A new interface on top of existing business logic, so users benefit first.

mayrian.com/team
A person working at an early desktop computer

How to get started

Three steps to a plan for legacy software modernization

  1. 1Tell us what you needUse the project form or book a call. A few sentences about the goal is enough to start.
  2. 2Free technical consultationWe go through your goals, users, existing systems and constraints with you.
  3. 3Your planA detailed plan covering the right tech stack, architecture, timeline and budget. Then you decide.

How it works

Where the legacy code hurts

Our hotspot analysis sizes each module by lines of code and colours it by how often it changes. Choose a module to see its route among the 7 Rs.

hotspots · last 12 months of commits

Billing

48k lines92 commits

Refactor

Large and changed constantly: the hotspot. Rewrite it first, behind the facade.

Hotspot analysis: code that is both large and frequently changed is where modernization pays back first.

Replacing a system in slices

A facade sends each route to the old system or the new one. Move routes across one at a time; any can be switched back.

facade · routing table
  • /customers→ new service
  • /appointments→ legacy
  • /invoices→ legacy
  • /reports→ legacy

25% of routes on the new system. Users see one application throughout, and any route can be switched back instantly.

Services

Legacy modernization services

Take one on its own, or combine them in one engagement with one team.

  • Code and architecture assessment

    A system map, code analysis and a modernization route for each component.

  • Re-engineering and re-architecting

    Modules or services replaced slice by slice behind a routing layer.

  • Data migration

    Data moved with reconciliation reports that prove nothing was lost.

  • Cloud migration

    Applications moved to managed cloud services, with the old infrastructure retired.

Our approach

How the work runs

Each stage hands its output to the next, like the stages of a delivery pipeline.

  1. Stage 1

    Understand

    Map what the system does, who uses it, its data and its integrations, including the undocumented parts.

  2. Stage 2

    Decide the route

    Rehost, replatform, refactor, rebuild or replace, per component.

  3. Stage 3

    Safety net

    Characterization tests that capture current behaviour before anything changes.

  4. Stage 4

    Replace in slices

    New components take over one slice of traffic at a time behind a routing layer.

  5. Stage 5

    Retire

    Migrate the remaining data, switch off the old system and archive what's needed.

What we'll need from you

Having these ready keeps the work moving.

  • System access

    Source code, databases and environments for the current system.

  • Knowledge holders

    Users and support staff who know how it's really used.

  • A decision owner

    Someone to agree the route and priorities for each part.

  • Change windows

    Agreed times for data migration and switchovers.

Who's on the project

Our team, working with knowledge holders from yours.

⇄ pairing

Solution architect: Assesses the system and designs the modernization route.

Deliverables

What you receive

Everything is handed over in your name: code, accounts and documentation.

To do 2

In progress 2

Done 2

What the documentation looks like

Every project ends with documents your team can run with. Here is an excerpt of one of them.

docs/modernization-plan.mdPreview

Route for each component

From the assessment · ordered by value and risk

ComponentRouteWhy
Order entryRefactorCore process, changes often
ReportingRetireReplaced by the data warehouse
Pricing engineReplatformSound logic, unsupported runtime
HR leave trackerRepurchaseCovered by the HR system
File transfersRehostStable, low change

Measuring success

How success is measured

What we report on in legacy software modernization projects. Which measures apply, and their targets, are agreed with you at the start.

Proving the data moved

Each migration run is reconciled table by table. Run it, fix what doesn't match and run it again.

reconcile.sql · results

Press Run to compare row counts and checksums between the legacy and new databases.

Readiness check

Are you ready for
legacy software modernization?

Five questions, about a minute. You'll see what to settle first and a sensible starting point.

npx mayrian readiness --for "Legacy software modernization"

? Is the system's business value and risk understood? (y / n / ?)

How to start

From first call to production

Start where you are. Each step ends with a decision, so you commit to the next one only when it makes sense.

git log --oneline --decorate

git show v0.1

Free technical consultation

Talk through the goal, the users, the systems involved and any deadlines.

  • + A clear view of scope and priorities
  • + A recommended next step
  • + A plan covering stack, architecture, timeline and budget
Book the consultation

Estimate the value

What it could be worth to you

Enter your own figures. The formula is shown, and the estimate can go with your enquiry.

estimate.yaml

# Legacy run cost removed

# formula: (Licences and support + infrastructure) × share saved

$ mayrian estimate

Run cost saved

$120,000

a year

1# => $120,000 a year
Add to my enquiry

Build or buy

When you don't need
a custom build

Part of the free technical consultation: when an existing product covers the need, we recommend it instead of a custom build. These are the options we weigh, alongside the tools you already have.

  1. Does the system encode processes that set you apart?

  2. Is there a SaaS product that fits without heavy customization?

  3. Can the system keep running while it's replaced?

Answer the questions to see whether to modernize or replace.

Technologies and standards

Chosen for your project

Each cloud has its own migration tooling. Choose a cloud to see the services for each step.

AssessAWS Migration Hub, AWS Application Discovery Service
Rehost serversAWS Application Migration Service
Move databasesAWS Database Migration Service
Code analysisCAST Highlight, SonarQube, CodeScene

Our technology radar for legacy software modernization

Adopt Trial Assess Caution
AdoptTrialAssessCautionTechniquesPlatformsToolsLanguages & frameworks

techniques / adopt

Architecture decision records

A short record of each significant decision, its context and its consequences, kept in the repository.

Our default. We use it on client projects unless there's a reason not to.

Our recommendations. Updated September 2026.

Patterns

  • Strangler fig
  • Anti-corruption layer
  • Branch by abstraction
  • Change data capture

Targets

  • .NET
  • Java
  • Node.js
  • Containers
  • Managed databases

Analysis

  • SonarQube
  • CAST Highlight
  • Dependency analysis

Assessment

  • The 7 Rs of migration
  • TIME model

Questions

Common questions
about legacy software modernization

Rewrite or refactor?

We usually recommend replacing the system part by part. A full rewrite must reproduce years of behaviour before it delivers anything; incremental replacement delivers value sooner, with less risk.

Can the old and new systems run side by side?

Yes. A routing layer sends each request to the old or new component, so slices move over one at a time and can be switched back if needed.

What if nobody understands the old code?

We analyse the code and data, interview users and write characterization tests that record what the system actually does today.

How is a project priced?

Well-defined scopes are delivered as fixed-price engagements; when requirements are still evolving, we provide a dedicated team instead. Either way, the free technical consultation ends with a plan covering tech stack, architecture, timeline and budget, so you know the cost before work starts.