Nordhaven Freight · 2024
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
Outcomes
- 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.
The challenge
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.
Our approach
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.
- 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.
- 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.
- 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.
- 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.
The results
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 MigrationRecognise 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.