App engineering
Designing offline apps around one complete task
By Technical Dost · Published
How to define offline boundaries, save useful drafts, distinguish local data from backup and test an app with the network disabled.

Define what works without a connection
“Works offline” becomes useful only when it describes an actual task. Can someone open an existing record, create a new one, edit it and produce an output without waiting for a server? Write that sequence down before choosing a storage library.
Separate the core task from connected features. A document utility might let someone prepare and save a draft locally while email delivery still depends on another app and a connection. Those boundaries should be clear in the interface, not discovered at the last step.
Store records, not just a screen
For a browser-based utility, IndexedDB supports structured records, indexes and transactions. Saving a record is different from caching the application files: your design needs to consider both the data and whether the interface can open when the network is unavailable.
Use stable record IDs and a schema version. Keep draft edits separate from a finalized export so a later change does not silently alter what the user already shared. Show a saved state only after the storage operation succeeds, and make failures visible enough to act on.
Sources: MDN: IndexedDB API
Local storage is not a backup plan
Browser storage is best-effort by default and is subject to browser-specific quotas and eviction rules. Clearing site data can remove locally stored work. Do not describe local records as a permanent backup merely because they survive a page reload.
Provide an export path for important work and explain what an export includes. If you introduce account sync, define how conflicts, deletion and failed uploads behave. A local-only application can be a sensible scope; a synchronization promise adds a different set of responsibilities.
Sources: MDN: storage quotas and eviction
Make the task smaller before making it smarter
A focused utility can often remove friction through sensible defaults, reusable details and a clear review step. Ask whether each proposed feature helps someone finish the core task. An optional integration should not become a required login for work that can happen locally.
One example from our catalogue is BillKit GST, an iPhone and iPad utility whose published scope includes offline invoice, quotation and challan creation without an account. Its focused scope illustrates the same principle: finish the document task without making a connection a prerequisite.
Test the whole journey in airplane mode
Test a fresh start and an already-used installation separately. Open a record, create a draft, close the app, reopen it and export the result with the network disabled. Also test a failed save and a long record, rather than relying on a short happy-path demo.
For a browser app, include a first visit without connectivity: unless the application was previously made available on the device, local data alone cannot make an unavailable interface load. Write the limitations in plain language so users can judge whether the tool fits the moment they need it.