As I promised, our recent vacation in the Canadian Rockies will inspire a few blog posts and some of those will arise from frustrations encountered on the road. One problem I encountered with many of my apps is what happened to those apps when my phone had no access to data for extended periods of time. Since cell coverage is weak in the Rockies (I’d say it’s a direct relation to the ugliness of antennas? Just a guess) and there was no WiFi at the campsites, I was able to connect only once every 1-2 days when stopping at a cafe. I usually had time to connect for a few minutes during which I synchronized email and two news apps (more about them later.) Every few days I’d also open Twitter, just to see what was new.
My frustration stems from the fact that most apps don’t know how to “behave” when they don’t have connectivity over longer periods of time. Some crash, some repeatedly show blank pages and some keep asking you to connect, even when they could display previously accessed content. My theory about why this happens is that most app developers or product managers live in a state of constant high-speed connectivity and don’t even entertain the option that their user could spend many days without it.
So, how can you prepare your app for the great outdoors?
Step 1: Decide if you really need to. Not every app will need to work everywhere. Examples are urban apps like Uber and Lyft, Tinder or even Jelly are not those I’d use when camping. That said, at least try not to crash upon launch, after realizing that there is no connectivity. Go for kinder options such as a blank page or a view of the most recent content accessed.
Step 2: Decide what level of offline capabilities are needed. At the very minimum this will include viewing the last content accessed. Here’s my guideline:
- Level 1, Basic: View all the content previously accessed without requiring a refresh. Even news apps that usually do need a refresh can ease up on this requirement when there is no connectivity. Twitter works like this, allowing me to access what I had previously synced. My weather app also works like this: if I would access the forecast for different locales, it would remember that forecast, but it would not download the forecast for all locations I had saved.
- Level 2, Basic Plus: Download all content available at the moment of sync, not just content viewed or accessed. The New York Times app and the BBC News app both do this quite well. By pressing the sync button both would update to the latest content in every topic category and allow later viewing of each article. This would allow me enjoy reading material for days with one sync. The New York Times app does have one disadvantage: at some point it tried to verify that I was a subscriber (I am) and because I was not connected it lost all content. Not just new content, all content. The BBC app never tried to do that and thus wins for best news app.
- Level 3: Intermediate: These apps allow some offline functionality with some advance preparation. One example of this trade-off is Google Music. Most music apps require full connectivity for streaming. Google Music allows you to play music that you have previously “pinned” (saved) to your device with the same features available while connected. You can choose specific songs, shuffle, or listen to albums and artists. Google Music will also create playlists based on the music you have pinned. As long as you save some music to your phone when you are connected, Google Music will allow you to listen to that music. Google Maps also work like this, as long as you cache the maps you can access them. What you cannot do is search, even on data you have cached.
- Level 4: Advanced: Every feature is available locally and syncs only when there is connectivity. Gmail does this well, allowing me to read and write email while not connected, retrieving new emails and sending the emails in my Outbox once there is connectivity. Google Drive, Calendar and other Google apps also do this.
Finally, I don’t think every app out there requires my so-called Level 4 offline capability. Many apps will not even require Level 1 functionality. The goal of this post is to get developers and PMs to at least plan and test for an extended periods of no connectivity.