Six deployment targets to one
A supply-chain platform consolidating Cloud Functions, on-prem servers, and three cloud services into a unified GKE + Cloud Run footprint.
What changed, plainly.
How it actually went.
The problem
The client married physical warehousing to a software platform that helped brands sell more with data. The software story was less coherent: some cloud, some on-prem, some Cloud Functions, some Pub/Sub workflows, all of it stitched into one fragile pipeline that needed a dedicated team to keep moving.
Their ask was simple. One cloud, one deployment story.
Approach
There are three migration paths: lift-and-shift, full modernization, or hybrid. Lift-and-shift gets you to the cloud but rarely to its benefits. Full modernization on day one is a nine-month project people lose patience for.
We do hybrid. Move what's easy, modernize what pays back, ship on schedule.
What we did
Some of their software was already container-friendly — those moved first and immediately stopped costing what raw compute had been costing.
Their Cloud Functions + Pub/Sub workflows were the right idea but the wrong tool at scale. Developers couldn't reproduce the system locally. Testing meant emulators that didn't match production.
We migrated those workflows to GKE and Cloud Run. Same event-driven shape, but now developers run a representative stack against real services instead of fighting the simulator.
Throughput controls came along for the ride: queue-depth-based scaling for Pub/Sub workers, with hard ceilings so cost grew sub-linearly with traffic.
What you take away
Cloud-native partway is sometimes worse than not at all. Pick targets that let your engineers reproduce production locally. Cap scaling before billing surprises you.