Quick answer: Offline play means the game stays usable with no connection, queues the actions the player takes, and syncs them safely when the connection returns. Test airplane mode and dropped connections during real play, confirm the game does not block on missing network, that queued actions persist across a restart, and that sync resolves conflicts without losing or duplicating progress. Capture the offline duration and queue state with each report.

Players lose connectivity constantly and rarely on purpose: a tunnel, a dead zone, airplane mode on a flight, or simply a phone that toggled off data to save battery. A game that demands a connection for everything becomes a brick the moment that happens, while a game built for offline play keeps going and quietly reconciles when the network returns. Offline support is more than a no-network error screen; it is local-first behavior, a durable action queue, and careful sync. This post covers how to QA offline play: confirming the offline mode is genuinely usable, that queued actions survive, and that syncing on reconnect never loses or duplicates the player's progress.

Confirm the game is genuinely usable offline

The first test is simply whether the game works at all with no connection. Enable airplane mode, launch the game, and play through everything that should be available offline. The bug to find is a feature that silently requires the network and either hangs or fails when it is gone, even though nothing about it conceptually needs a server. A single-player level that blocks on a leaderboard fetch, or a menu that will not open until it has refreshed remote data, turns a playable offline session into a frozen one. Map which features should work offline and verify each does.

Test going offline mid-session, not just launching offline, because that is the common real case. Start online, then drop the connection partway through a level or a menu flow, and confirm the game continues smoothly rather than throwing an error or stalling on the next network call. The transition into offline should be graceful and ideally invisible for features that do not need the network. Anything that genuinely requires a connection should fail clearly and let the player keep using everything else, rather than taking the whole game down with it.

Queue actions durably while offline

When a player takes an action offline that needs to reach the server eventually, completing a quest, spending currency, posting a score, the game must record that action locally so it can be sent later. Test that these actions are queued rather than lost or rejected outright while offline. The player should be able to keep playing and accumulating actions, and the game should reflect them locally with an optimistic update so the experience feels normal rather than blocked on a connection that is not there.

Durability is the critical property: the queue must survive the app being closed or killed while offline, because a player might play offline for a long stretch and then quit before reconnecting. Test by queuing several offline actions, force-quitting the game, relaunching still offline, and confirming the queued actions are still there. A queue held only in memory loses everything on a kill, which means the player's offline progress vanishes silently. Persist the queue to storage and verify it survives a cold start, since an in-memory-only queue is one of the most common and damaging offline bugs.

Sync safely when the connection returns

Reconnection is where offline play gets hard. When the network comes back, the game must flush the queued actions to the server in order, handle partial failures, and confirm each was accepted. Test reconnecting after a queue has built up and verify every action is sent exactly once: not skipped, and not sent twice if the connection flickers mid-sync. Use request ids and server-side deduplication so a retry during a shaky reconnection does not double-apply an action, which would credit or charge the player twice and is a classic offline sync defect.

Test the messy reconnections, not just a clean one. The connection may come back and drop again mid-sync, the app may be backgrounded during sync, or sync may fail partway through the queue. Confirm the game resumes the sync correctly from where it left off without replaying actions it already confirmed. The queue should only remove an action once the server has acknowledged it, so an interrupted sync leaves the unconfirmed actions safely queued for the next attempt rather than losing them or assuming success it never received.

Resolve conflicts without losing progress

The hardest offline problem is conflict: the player changed state offline while the server state also changed, perhaps from the same account on another device. Test the case where local and server state diverge and confirm the game resolves it sensibly rather than blindly overwriting one with the other. A naive last-write-wins that discards the player's offline progress, or one that clobbers a more advanced server state, both lose data the player cares about. Decide on a merge policy per data type and test that it does the right thing.

Make conflicts visible in testing because they are rare in casual use and easy to miss. Deliberately create a conflict: play offline on one device, change the same account online elsewhere, then reconnect the offline device and observe the merge. Confirm currencies, inventory, and progress reconcile according to your policy without silent loss. For anything where automatic merge could destroy value, consider surfacing the conflict to the player rather than guessing. The goal is that no matter how the offline and online states diverged, the player never opens the game to find earned progress quietly gone.

Setting it up with Bugnet

Offline and sync bugs are among the hardest to reproduce because they depend on the exact sequence of offline actions and the timing of reconnection. Bugnet's in-game report button captures the game state, and a custom field recording how long the player was offline, how many actions were queued, and whether a sync had run gives triage the context a player never could. A report of missing progress that arrives showing a long offline period and a queue that never flushed points straight at the sync or persistence path.

Because an offline persistence regression tends to hit many players the same way, often after a build that changed the queue or storage, Bugnet's occurrence grouping folds the lost-progress reports into one issue with a count, and a spike after a release flags the regression fast. Crash reports from a sync exception arrive with stack traces and device context. Filtering by the offline-duration or queue-state custom field lets you separate true sync bugs from players who simply have not reconnected yet, so you fix the defect rather than chase expected behavior.

Make offline a standing scenario

Offline testing is easy to skip because the test environment is always connected, so airplane mode has to be an explicit step in your plan. Build a scenario set: launch offline, go offline mid-session, queue actions and force-quit, reconnect cleanly, reconnect with a flicker, and create a cross-device conflict. Run these on every release that touches networked features or persistence. Each maps to one of the failure surfaces, usability, queue durability, sync, and conflict, and skipping any of them is how a silent progress-loss bug ships unnoticed.

Re-run the offline pass whenever you change the action queue, the storage layer, or the sync protocol, since those own the offline behavior directly. As players increasingly expect apps to work like local-first software, offline support stops being a bonus and becomes an expectation, especially for mobile games played on commutes and flights. A game that keeps working offline and reconciles flawlessly on reconnect feels modern and dependable, while one that loses a session of offline progress feels broken in a way players will not tolerate twice.

Offline play is local-first behavior plus a durable queue plus careful sync. Test airplane mode, persist the queue across a kill, and reconcile conflicts without losing progress.