Why we build offline-first
One number quietly decides almost everything about building software in South Sudan. Roughly 84% of the population is offline. Not "underserved." Not "slow connection." Offline.
Build the way the rest of the industry builds, assume a connection and degrade gracefully when it drops, and you have built something for the 16% and called it everyone. We start from the other end.
The model already exists. It is radio.
In a country with low literacy and little internet, the most trusted, most widely used technology is the radio. Eye Radio. Radio Miraya. The Catholic Radio Network. Dozens of local FM stations. They reach people no website reaches, in languages a website usually doesn't. Radio works because it asks almost nothing of the listener: no account, no data bundle, no drain on the battery you were saving for a phone call.
That is the bar. Software that wants to matter here behaves more like a radio and less like a feed.
What "offline-first" actually means for us
- Read and contribute with no signal. The app keeps its content on the device. You can open it, browse, write a post, flag an issue. All on a phone that hasn't seen a tower in days.
- Sync when you can, not when we need you to. When a connection turns up (a town, a hotspot, a relative's phone), the app reconciles quietly in the background. Nobody waits on a spinner to use the thing they came for.
- Small payloads, on principle. Data costs real money against real income. We budget bytes the way you'd budget money. Images are optional and lazy. Updates are deltas.
- Battery is a first-class constraint. Power is intermittent and often a single roof panel. Background work is rare, cheap, batched.
- Feature phones count. Plenty of phones here are not smartphones. SMS and USSD are not a sad fallback. They are a channel we design for on purpose.
The principle under all of it
Build for the worst day, not the demo day. The day there is no signal, the battery is at 9%, the network costs money you'd rather spend on food, and the thing you need the app to do still has to happen.
If it works then, it works.