I promise the title will make sense by the time you get to the bottom of the post. (Well, I hope it will.)
Am I the only person who still believes that making a user’s data available when they’re not connected to the internet is important? To be fair, it’s relatively rare that I am on my laptop without net access. Plane trips, my recent trip to southern Italy (“Sorry… the internet in this town has been down for a few days and we don’t know when it will return.” Seriously.), and the 3 day power outage we had a couple of months ago. And yet, I find myself sometimes reluctant to commit to using services where my data will only be available when I’m connected. I think there are several reasons for this:
- Even though it’s a tiny fraction of my computing time, I love to use my laptop on planes. And I hate trying to get things done without access to as much of my data as possible.
- I get nervous committing some of my most critical information to services where I have no local copy (financial information, family photos, etc.).
- For data where I’m going to keep a local copy I hate that the online copy will get value added to it (comments, tags, etc.) that won’t sync to my local copy thereby bifurcating my collection of information.
- Sometimes I don’t want my data up on a server somewhere cause I worry that it will be exposed.
I know that even airplanes are being equipped with net access now, but even if I knew today that every plane trip I would ever take again would have cheap wireless available, I still would be hesitant to commit to an online only world.
In truth, having data reside locally is not just about availability when you have no internet access. There are reasons to keep local copies of information:
- Even as pipes get fatter, there are still hiccups and various latencies in most networks I’ve ever used, and having a layer of buffering between your work and those interruptions can go a long way to keeping you productive.
- We’re still a bit of a distance from net access being as fast as hard drive access. Even with the benefits of AJAX and Flash enabled web UI, web app responsiveness still can’t match the instant response you get when you have local software operating on local data (especially large chunks of data).
- Even my cell phone today is starting to have almost decent amounts of computing resources (CPU, storage, graphics). So my latest desktop and laptop machines have enormous amounts of resources, and it seems a shame to leave them unutilized. There is an immense amount of power at the edge of the network and there’s no reason not to use it.
To me the single best implementation of the model we should be aspiring to is Microsoft Outlook and Microsoft Exchange. (I assume there are others that nail it, though none come to mind immediately.) People may criticize one or the other for various reasons, but their implementation of the user model around data and namespace is pretty close to state-of-the-art in my opinion. Here’s how:
- My data is up on a server and replicated automagically to every client installation I have.
- Syncing is done in the background (no process I have to go through as a user) and since it’s basically a one user namespace (my mail, calendar, contacts, etc.) conflicts are exceedingly rare and handled silently if they show up.
- The client user interface operates on the local copy of the data so the UI is never blocked because of latency in the network or server component.
- This also means I have full access to my data (if not all my functionality) when I’m offline.
- I have one namespace for my data that is location independent. I don’t have part of my mail synced to this machine and part of my contacts to another. Everything is everywhere.
- If I’m on a device that doesn’t have the client bits I can use any browser to access my entire data set off of the server via the HTML UI (Outlook Web Access, which is a crappy pagination model from being quite enjoyable to use).
- If I set up a new device with the client bits, it takes just a little while before my entire namespace (and workspace) is replicated locally and I’m back in my familiar environment.
- Even though replication is not backup, it can come in handy when you need to retrieve data that could have been lost.
Whether you like Outlook/Exchange or not (and I do like Outlook), they got this model right. And it took them many iterations until they realized that sublimating the minutiae of sync was the right way to get the experience right.
And while in the Outlook case you need to install OS specific client bits to get the offline experience, I don’t see any reason why web apps (with an evolved browser platform underneath them) couldn’t replicate this kind of experience in the browser.
So here’s the question… With all of the excellent progress around making rich internet applications have better user interface, why have we not seen any serious progress on making offline work for internet apps? (Perhaps I missed it.) Why can’t I have GMail and Flickr and Spaces offline? At the beach? In Puglia? And even more important than simple offline availability is coherence of my corpus of data. Do you know anyone who uploads their photos to flickr and then deletes their local copies? The online copy is getting tagged and commented. And with flickr you can even make sure it hasn’t been downsampled. Am I the only one not deleting my local copies? Why can’t my local copy and my online copy be one and the same. I tag it locally, it gets tagged online. My friend comments on it online, and the comment gets replicated locally. I want one conceptual copy of my data with many physical copies wherever I see fit. Am I the only one who cares?