There's two schools of thinking about this problem:
Some say that it will be easier to wire the entire planet than to make everything work offline. There is much evidence that ubiquitous online access may become reality: You can check your e-mail from everywhere in Europe these days and can also surf the web while on a plane. Google is deploying Wi-Fi in its home town.
Joel once wrote that Excel sales really took off when version 4.0 made it easy for people to save files back to Lotus 1-2-3. In the same way, I believe that online apps will really take off when it's possible to go back to viewing stuff offline.
Let's start by thinking about what we'd need to implement (Adam Bosworth also has some good thoughts on this topic):
- Caching: this amounts to keeping a copy of your online data locally - either all of it or just some fragment.
- Presentation: When you click around in web app interfaces, this generates requests to the server. You'd want to reproduce the online UI reasonably well, possibly by pretending there's a server that doesn't even exist.
- Synchronizing offline and online data: When you modify data offline, you'll need to store these operations until the next time you can "call home" and talk to the server. For example, in GMail, this would amount to having "Unsent Messages" stowed away somewhere.
- Through a browser plug-in mechanism, control the application or simulate the presence of a server. This is a better choice, but requires a separate solution for each kind of browser.
- Install a local server on the system that serves up the UI. This may be the easiest option. I'm sure you could even train users to go to "www.kiko.com" when they have an online connection, but click on "Start Kiko server" first when they don't. Downside: Installing software? Isn't that the opposite of what you want to achieve with a web app?