Skip to main content

Off ageing hardware, onto a bill the board approved in advance

Twelve years of co-located hardware moved to AWS in five waves, with a 38 minute cutover and a monthly bill 41 percent below the run rate it replaced.

Industry
Logistics software
Location
Rotterdam, Netherlands
Engagement
17 weeks
Team
2 NordsCode engineers, 4 client engineers
41%Lower monthly infrastructure cost
EUR 31,400 per month across hardware, hosting and support became EUR 18,500 per month in cloud spend, measured across the first two full billing cycles after decommissioning.
38 minTotal cutover downtime
Against a four hour window announced to customers. The rehearsal two weeks earlier had completed in 44 minutes, so the announced window carried real margin.
99.98%Uptime over the following year
Measured against the availability objective agreed during the migration, across twelve months and two regional provider incidents.

What we found when we arrived.

Nordhaven Freight runs shipment tracking and customs documentation for mid-sized freight forwarders across northern Europe. The platform ran on eleven physical servers in a Rotterdam colocation facility, bought in three batches between 2012 and 2019. Two of those batches were past vendor support, and the replacement quote for the oldest rack alone was EUR 140,000.

The engineering team of six had no infrastructure specialist. Environment changes were made by hand and recorded in a shared document that had last been updated eight months earlier. A previous migration attempt with a different supplier had stalled after four months, leaving a half-configured cloud account that was still being billed, and understandable scepticism inside the company about trying again.

What we did, in the order we did it.

Sequence matters more than tooling on engagements like this one. Each step below existed because the previous one produced something the next one needed.

  1. 01

    Inventory before architecture

    Three weeks establishing what was actually running. Two of the eleven servers turned out to be serving nothing but a reporting job that had been superseded in 2021, and one customs integration nobody could account for was still processing live traffic for a single customer.

  2. 02

    A costed target, agreed before any build

    A per-workload cost model with three options at different price and resilience points. The board approved a projected EUR 19,200 monthly bill before we built anything, which meant the migration was never a leap of faith financially.

  3. 03

    Landing zone and pilot

    Accounts, networking, identity and backup built as Terraform modules, then the reporting service migrated first as a low-risk proof. That pilot exposed a database character set problem that would have been considerably more expensive to discover during the main cutover.

  4. 04

    Five waves and a rehearsed cutover

    Workloads grouped by dependency and moved in five scheduled waves. The final cutover was rehearsed end to end against a full production data copy, including the rollback, before a date was announced to customers.

What changed, and how we know.

The final cutover ran on a Sunday morning in 38 minutes against an announced four hour window. No rollback was needed and no customer-reported incident followed in the two weeks afterwards. The old estate ran in parallel for thirty days, then was decommissioned on a written schedule with backups verified before anything was powered down.

The cost result held. Across the first two full billing cycles after decommissioning, infrastructure spend averaged EUR 18,500 per month against a previous run rate of EUR 31,400 including hardware amortisation, hosting and vendor support. The EUR 140,000 rack replacement was avoided entirely. Nordhaven's own engineers now make environment changes through pull requests, and the shared document that used to be the system of record has been deleted.

What it was built on

  • AWS
  • Terraform
  • PostgreSQL
  • AWS DMS
  • Amazon ECS
  • GitHub Actions

Engagement type

Cloud Migration

Recognise any of this?

Most engagements start with a call describing a situation that sounds a lot like one of these. Tell us yours and we will say plainly whether we can help.