Overview
A national transportation group needed to modernise its core shipment-tracking platform — a decade-old Java monolith that was becoming a bottleneck for both operational scale and developer productivity.
Challenge
The system processed millions of shipment events per year and was deeply coupled: the tracking, billing, and notification domains all lived in a single deployable. Any change required a full regression cycle and a multi-hour maintenance window.
Solution
We adopted the strangler-fig pattern to incrementally extract services without big-bang rewrites or downtime:
- Event backbone first — deployed Apache Kafka and established the domain event schema for shipment state changes.
- Tracking service extracted — new microservice consumed events from Kafka and replaced the monolith’s read path, running in parallel before the old path was decommissioned.
- Billing and notification followed — same pattern, extracting one bounded context at a time over six months.
Outcome
- End-to-end throughput tripled under peak load
- Teams could deploy independently, cutting release cycles from days to hours
- Full observability stack (Prometheus + Grafana) gave the operations team real-time insight for the first time