Case study · Backend & APIs

Rescuing a legacy PHP monolith without stopping the business

Ordana's twelve-year-old PHP monolith processed millions in orders but broke weekly. We stabilized it first, then carved out services one by one, and now they ship every Friday.

Client

Ordana

Industry

B2B commerce

Timeline

16 weeks

Year

2025

0%

fewer production incidents

0

deploys per year, up from 4

0

minutes of migration downtime

01 · The challenge

Where things stood

Ordana's platform processed serious order volume on a twelve-year-old PHP codebase with no tests, no documentation, and two departed authors. Deploys happened quarterly because every release broke something, and two other agencies had already given up on it.

A big-bang rewrite was off the table. The business runs on this system every hour of every day, and rewrites of systems this size fail more often than they succeed.

02 · The solution

What we built

We started with an honest three-week audit: mapping the codebase, adding monitoring, and writing characterization tests around the money paths. Stabilize first, modernize second.

Then we applied the strangler pattern: the riskiest domains, orders, inventory, and notifications, were carved out into typed Node.js services one at a time, each cutover gated by the test suite and running in parallel before switching.

03 · The approach

How we did it

01

Audit honestly

Three weeks of mapping, monitoring, and characterization tests before changing a single line, so risk was known and visible.

02

Stabilize the monolith

Crash fixes, slow-query surgery, and error tracking cut incident volume 80% before any architecture work began.

03

Strangle, do not rewrite

High-risk domains extracted into typed services one at a time, each running in parallel with the legacy path before cutover.

04

Make Fridays boring

CI with the growing test suite, one-click deploys, and rollbacks in seconds, turning quarterly releases into weekly ones.

04 · The stack

Built with

Chosen for this project, not from a default template. Every build gets the stack its problem deserves.

PHPLaravelNode.jsNestJSTypeScriptMySQLRedisDocker
They rescued a codebase two other teams gave up on. Honest audit first, stabilized in three weeks, and now we ship every Friday without fear.
Mia TurnerCTO, Ordana

Want results like this?

Tell us what you are building. We will reply within one business day with an honest take on scope, timeline, and cost.