Offline-first is an architecture, not a feature flag
What four years of running ticketing systems across Zambian bus corridors taught us about designing for networks that are not there.
· 3 min
An analysis of nineteen migration programmes, and the three decisions that separated the ones that reduced run cost from the ones that did not.
Tom Nelson Tembo · CTO, Engineering · · 2 min read
We reviewed nineteen migration programmes — some ours, most not — where the organisation had a clear before-and-after cost picture. Eleven ended up spending more than the infrastructure they left. That is not an argument against cloud. It is an argument against the way most migrations are scoped.
Three decisions separated the two groups.
The programmes that reduced cost assessed each application individually and were willing to reach different conclusions. Rehost this one, refactor that one, retire the third, and leave the fourth exactly where it is.
The programmes that increased cost had a mandate — "everything to cloud by Q4" — and lifted workloads whose economics only made sense on owned hardware. A steady-state batch system running at ninety percent utilisation twenty-four hours a day is close to the worst possible cloud candidate, and it is precisely the kind of workload a blanket mandate sweeps up.
Landing zones, identity, network topology, tagging standards and guardrails are unglamorous, and they consume the first months of a programme with nothing visible to show a steering committee. Every successful migration we looked at did them first anyway.
The alternative is retrofitting governance onto an estate that has already grown, and retrofitting cost attribution is brutal. Once resources exist untagged across dozens of accounts, working out who should pay for what is an archaeology project.
In every programme that reduced run cost, a named person was accountable for the cloud bill and had authority to act on it. In every programme that increased cost, the bill was a line item in a budget nobody specifically owned.
This is an organisational fix, not a technical one. Showback dashboards and budget alerts help, but only if someone is expected to respond to them.
A pattern in the overspending group: storage growing continuously because nothing was ever deleted. On-premises, storage is a capital purchase that forces a conversation every few years. In cloud it is a rental that quietly compounds, and the conversation never happens.
Set retention policies during migration, not after. It is the cheapest cost control available and the one most consistently skipped.
The best result we measured was a thirty-eight percent reduction in run cost against the pre-migration estate. That programme migrated sixty percent of its workloads and deliberately left the rest. The organisation described the outcome as a success. A mandate-driven programme would have recorded it as sixty percent complete.
What four years of running ticketing systems across Zambian bus corridors taught us about designing for networks that are not there.
· 3 min
Feature matrices do not predict whether an ERP programme will succeed. These questions, asked before signature, do.
· 3 min
Selective disclosure changes who holds what data. It does not remove your obligations — it changes which ones apply.
· 2 min
Monthly at most. Product releases and writing like this.