In mobile application development, many interfaces that are ultimately displaying remote data need to provide an offline mode. This usually implies said data is cached locally on the device at some point, and a protocol is in place to update that data and refresh the view.
I think there’s a pattern here, though I can’t find much evidence on the internets of people discussing it. This leaves me thinking that one of the following is true:
- I’m not searching for the “Right Thing™.”
- The concept is too obvious to warrant discussion.
- Everyone working on mobile apps is too busy to give a shit.
I’d like to hear from anyone who has observed instances of this pattern, implemented it in an app, or heard of any good resources related to it.
Here are some of the pieces I see in this pattern:
- A view representing remote data.
- Locally-cached data is displayed when offline.
- Data (and view) are synced periodically or whenever possible.
- Interactions with data on the device are queued for remote sync when offline.
- Some indication to a user that the data being displayed may be out of date (device offline).
- A way to manually attempt to update the data being displayed.
- Device storage may be limited, forcing locally cached data to be purged.
The applications that would use this pattern most heavily would be in the middle of a spectrum where, on one end, there are apps that require constant connectivity to function (e.g. a banking app), and on the other there are apps which require no connection (e.g. a calculator.) Most native mobile applications live between those two extremes.
Straddling that gap is difficult to do well. When do you communicate directly to a user about the state of their data’s staleness or their device’s connectivity? When does it make more sense to make the transition between connected and offline states invisble and seamless to the user? What are the key components to these experiences, and how can we start capturing and reusing them throughout an application to provide a consistent user experience?