Skip to content
ALL SYSTEMS

MIGRATION

DELIVERED

Monolith to microservices

Client deployments moved off a single monolithic codebase into independently deployable, containerised services — including a dedicated routing engine — so high-complexity workflows could be changed without redeploying everything.

  • Node.js
  • Docker
  • Kubernetes
  • Traefik
Deploy units
Independent

Deploy units

Delivery
Containerised

Delivery

The constraint

A monolith is not wrong because it is one deployable. It is wrong when unrelated things are forced to move together — when a routing change cannot ship without redeploying billing, and a fault in one workflow takes the rest down with it. The question is never “should this be split” but “which seams are real.”

The migration

PATH TAKEN

One codebase carrying every capability, where a change to one workflow meant redeploying all of them.

ISOLATION WHERE IT MATTERED
The most complex workflows — routing and optimisation — became their own services, so their failure modes and release cadence stopped being everyone else's problem.
MAINTAINABILITY
Independently managed services meant a change could be reasoned about within one boundary instead of across the whole platform.
THE FRONTEND TOO
The same argument applied to the UI: Angular v5 through v18 restructured into scalable microfrontends rather than one monolithic app.
PORTABLE RUNTIME
Containerised services behave the same in every environment, which removes a whole category of works-on-that-host incidents.