Field apps should never wait for a signal.
On an oil-palm estate or in a basement car park, the signal goes first. Here's how we build apps that keep working without it.
A harvest clerk on an oil-palm estate records bunches at the roadside, on one bar of signal or none. A traveller opens a currency app on hotel Wi-Fi that won't load. Neither cares why the number isn't there. They stop trusting the app.
We build for both. Kyupisi+ records a whole day of field work with no connection. Matawang shows exchange rates in a basement car park. Different apps, same rules.
Assume the phone is alone.
Most apps are a window onto a server. Every screen asks it a question and waits. In the field, the answer often doesn't come.
We flip it. The phone keeps its own copy of what it needs, and every screen works from that copy. Recording a harvest, adding a transport trip, converting 250 dollars: none of it waits for a network.
Sync when you can, and be honest.
When a connection appears, the app sends what it has and fetches what it missed, on its own. There's also a button, because people in the field like to see it happen.
Matawang shows how old its rates are. Kyupisi+ shows what hasn't synced yet. An app that says "this number is from 40 minutes ago" earns more trust than one that pretends everything is live.
Decide up front whose edit wins.
Sooner or later, two people will edit the same record while one is offline. That isn't a bug to fix later. Write the rule down first: untangling it afterwards costs more. On an estate, the field record is the fact, and the office corrects it openly, with a trail.
Lock the numbers people get paid on.
Kyupisi+ estimates tonnage from bunch counts and each block's average bunch weight, then locks the result on the record. If the average changes next month, a reprint still matches the slip printed on the day. Anything someone might reprint, dispute or get paid on should be frozen the moment it's created.
Offline shapes the whole app.
If your staff work beyond the signal, "works offline" isn't a line item for version two. It decides where the data lives and how every screen works. Build it in from the first week, and the app gets quieter as it grows.
Have a workflow that ends where the signal ends? We'd like to hear about it.
