Skip to content
[ Engineering ] 22 Jul 2026 3 min read

Offline-first: building an app for places with terrible signal

Sports halls eat phone signal. Building a club night app that could not rely on the internet changed how we think about every system since.

There is a moment every app developer should experience at least once. You are standing in a leisure centre sports hall, holding your phone, watching your app try to talk to a server. The hall is a big metal box. The signal indicator shows one bar, then none, then one again. Wifi exists somewhere in the building, allegedly.

Forty people are waiting to play badminton, and the app deciding who plays next has stopped deciding anything.

We built our court manager app for exactly this environment, and it taught us more about engineering than any project before it. Not because the features were complicated, but because we could not lean on the one thing almost every modern app leans on: a reliable connection.

The assumption baked into everything

Most software is built connection-first. Tap a button, a request goes to a server, the server answers, the screen updates. It is a sensible default, because it means there is one source of truth and it lives somewhere safe.

But watch what happens when the connection wobbles. Spinners. Frozen buttons. That message everyone has seen: something went wrong, try again. In an office on fibre broadband you barely notice. In a sports hall on a Tuesday night, connection-first software is simply broken software.

The places where work actually happens are full of these dead zones. Warehouses. Building sites. Hospital basements. Trains. Rural anywhere. If your users live in those places, the connection is not a detail - it is the design problem.

Turning the assumption around

Offline-first means the app treats its own device as the source of truth, and the network as a bonus that comes and goes. Every action - marking a player in, starting a game, rotating the queue - happens instantly against data stored on the phone itself. Nothing waits for a server. The whole club night can run, start to finish, with the phone in flight mode.

When a connection does appear, the app quietly syncs what happened. When it disappears again, nothing changes for the person using it. The organiser should never be able to tell the difference, and that is the entire point.

It sounds like a small change of emphasis. It is actually a different way of building.

What it costs you

Honesty section: offline-first is more work, and anyone who tells you otherwise has not done it.

The hard part is not storing data locally - phones are good at that. The hard part is that truth now exists in more than one place. If two devices both worked offline and both come back online, whose version wins? What if they edited the same thing? Sync and conflict handling is genuinely difficult engineering, and it is why most apps quietly choose connection-first and hope for the best.

You also lose the comfort of fixing things in one place. When your logic lives on a server, a bug fix ships instantly to everyone. When it lives in an app on someone's phone, it ships through a store review and waits for people to update.

So we do not recommend offline-first for everything. It earns its cost when the app's job must survive a dead zone. It is wasted on an app people use on their sofa.

What it gives you, beyond the dead zones

Here is what we did not expect: offline-first apps feel better even with perfect signal. Because nothing waits for the network, every tap lands instantly. No spinners, no optimistic-update tricks, no jank. The app feels the way people vaguely remember software feeling before everything became a website in a costume.

It also forces a discipline that improves the whole system. When you must define exactly what happens if two versions of the truth collide, you end up understanding your own data far better than a connection-first build ever requires. That understanding pays off everywhere - in the sync engine, in the reports, in every future feature.

The Tuesday night test

Our rule since: design for the worst realistic Tuesday, not the demo. The demo happens on office wifi with three test records. Tuesday happens in a metal box with no signal, forty impatient users and a battery at 30 percent.

Whether or not your project needs offline-first, it deserves the Tuesday night test. Where will this actually be used? What is the signal really like there? What must keep working when the answer is "there is no signal"? Ask those three questions before a line of code exists, because retrofitting offline onto a connection-first app is close to a rebuild.

The peg board our app replaced never crashed and never lost connection. Software that replaces something reliable has to clear the bar the old thing set. In a sports hall, that bar is a piece of wood - and clearing it took real engineering.

G

Written by Graeyna

The team that designs, builds and runs the software we write about. Engineers, not marketers.

Share

Sound like your situation?

We write the way we work: straight. Tell us what you're weighing up and you'll get an honest read on it - no pitch, no pressure.