Designing Next-gen applications with mobility in mind
As telcos try to build out new data networks, one thing is certain- there will be coverage problems. The question is, how will developers respond? Are they even thinking about how to deal with a device that has an intermittent connection?
I'm running skype on a Nokia N800 (with the n810 firmware) and using wifi. Phone calls work fine but when you hit the edge of wifi coverage, it is a pretty sharp cliff. In my case, in a span of 10 feet you go from talking to nothing to dropped call. If you run back and forth through the edge zone, the call will stay active, but you will lose lots of packets and hence, the audio. Once fully back in coverage, skype has no problem with the intermittent connection and making subsequent calls. Good.
Other apps are no so pleasant. Youtube, for example, does not start downloading/playback again following a loss and subsequent reconnection. Why not? My guess is no one thought of it. I tried revver.com, but it doesn't work on the Nokia tablets. Revver also makes you choose the type of video content you want meaning they don't know what type of device it is that you are using. Device recognition is an important part of context, but is routinely ignored.
Veoh works on the Nokia and uses progressive download. When it loses the connection, the video stops after the cached data is exhausted, as expected. But the player does not go to the "pause" state, judging by the pause button being is playing (meaning it thinks it is still playing). Upon reconnection the download is not resumed and you can't make it. No more (of that) video is playable.To test audio, I went to www.somafm.com and launched an mp3 stream. This launched the nokia media player (Kudos, Nokia!). It buffers and then commences playback. Very small buffer in use, though. Just a few seconds of data. Once the connection is restored, though, the app re-buffers and continues playback. That's the way it should work.
This type of multimedia experience will be very frustrating with new mobile devices operating on the go and in imperfect network conditions. Developers assume perfect network connectivity, but that is going to change and they must change their ways.
What do you do? For apps that update periodically and need a web connection to do so, you have some design choices. You can "look ahead" and cache some additional content while you have a connection. This is what progressive video does (think youtube), but can also apply to a photo slide show or your RSS reader. I would always recommend caching video to support future playback even when disconnected and provide easy ways to re-initialize the video player in case you get stuck with a partial download. Larger buffers are a good idea, too.
I really think the app should control behavior when a connection is lost- maybe even do something as the connection weakens, if possible (yes, developers can read radio performance properties and use them). Think about the natural behavior. Does the user want to see an error message or maybe just keep looking at the last photo of the slide show until the connection is back? Do they want to see the rest of the video they were watching? Maybe the app can resume when re-connected? Let's make it easy.