Home A shipping platform, rescued
← Back to site
A rescue story

A shipping platform, rescued

A shipping platform a business had built years earlier to move parcels for a larger warehouse system: several carriers, tracking numbers, package records. It ran, and nobody wanted to be the one to touch it.

Way out 04 · Modernization
01

Before

PHP 5.6. Years past end of life. The host could withdraw it on any date it chose.

One copy of the code. No source control. The version running in production, on the production server, was the only one anywhere.

Pages built by hand. HTML printed from echo statements with jQuery sprinkled on top. Every screen a one-off.

Not one test. Nothing automated. Whether a change had broken something was found out by shipping.

Keys in the code. Carrier credentials hard-coded into the application source.

Two carriers, copied and pasted. No core to speak of: the second carrier was the first one duplicated and edited. A third would have been a third copy.

02

The plan

Read it, then write down what it does. The business and user cases extracted from the code: shipping with several carriers, tracking numbers, storing and updating package records, tracking.

A roadmap in vertical slices. Milestones and phases, each ending in something usable. A backlog of real work items, not a phase called "rewrite".

One-week sprints. Something shipped and shown every week. The old platform kept moving parcels the whole time; nothing switched over on a weekend.

Replace, then extend. First the rework carrying every existing rule; only then the things the old platform could never have done.

one-week sprints → Month 1Month 2Month 3Month 4Month 5Month 6Month 7 Read it, write down what it doesuse cases out of the code The rework, in vertical slicesevery rule, both carriers usable deliveryusable deliveryusable deliveryrework completeOld platform kept runningretired behind the rework retiredNew carriersDHL · Purolator · Nationex three carriers liveRate shoppingacross all five carriers shipped

the rework new carriers rate shopping old platform running something usable delivered

03

After

Four months. A working rework with every business rule, every user case and both carriers, and the old platform retired behind it.

One more month. Three new carriers: DHL, Purolator and Nationex. On the old code, each would have been another copy.

Two more months. Rate shopping across carriers — the feature the business had wanted for years.

The timeline
WhenWhatDelivered
Months 1–4The reworkEvery rule and user case, both carriers, the old platform retired
Month 5New carriersDHL, Purolator, Nationex
Months 6–7Rate shoppingAcross all carriers
04

The verdict

Modernization — the fourth way out — and not by reflex. The code was read first. With no source control, no tests, no core and credentials in the source, there was nothing to stabilise around; the honest answer was to rebuild in slices while the old platform kept running, which is what a rescue plan is for. On a system with a sound core the verdict would have been different, and the report would have said so.

Modernization. Gradually replace pieces of the old system while it keeps running — one module, one integration, one screen at a time. No switchover weekend, no bet-the-company rewrite. The four ways out · what the report that decides between them looks like.

Yours would start the same way. A health check reads the code first and says which way out fits, in a report you keep whether or not you continue.

Book a health check