Should software be native or web-based?
Had you asked me this question a few years ago, I would have vehemently denied that the future of development is on the web. As much as I could see and understand the value of a ubiquitously available web-based application, there's just no way to approach the level of power and integration (not to mention the ability to be always-available) that is possible with well conceived and developed desktop software.
Of course, back then I didn't imagine that web applications could become as useful as Google Calendar or Remember the Milk. I also didn't imagine that light - yet still useful - versions of these apps would be available from my mobile phone almost wherever I was.
In fact, and much to my surprise, today most of my personal data today is tied up in online services: Gmail, Google Calendar, Google Docs, Backpack, Remember the Milk, Facebook, Newsgator, and Evernote to name just a few.
Most of these are probably pretty familiar names, but one is a newcomer in the web space: Evernote. Still in beta, the new version of Evernote contains a full-featured web version, but synchronizes seamlessly with desktop software on either Windows or Mac platforms. And it's a breath of fresh air.
In fact, there are currently four distinct ways of accessing your Evernote data: Windows client, Mac client, Web, and mobile web versions. Instead of falling into the trap of trying to make four interfaces that look alike, and therefore compromising on the strengths of each one's platform, Evernote took the more challenging route of building distinct versions for each platform that play to the strengths of the platform. And it works. Boy, does it work.
This got me to thinking - what other software do I use that has the satisfying element of great natively installed local software that integrates with an online system offering its own interface? I came up with only three: my email, my blog composition tool, and my RSS reader. On the other side of the break, I'll explain what they are, and what I think all this means with respect to the future of software.
For email, I use Gmail's IMAP feature to allow me to use my Mac's Mail application to interact with my email in a local native way. This means that I can use hooks from other programs that tie into Mail, yet still take advantage of Gmail's many attractive features. Plus, if I'm ever not at my computer, I can use Gmail's superb web and mobile interfaces to access my email. There's even a native application that installs on my mobile phone to make using Gmail on a mobile device more pleasant. For me, this combination simply rocks.
Composing blog posts
I have a number of personal blogs on various platforms, and while all of them have web-based composition interfaces, they all basically suck. There's nothing like losing your internet connection in the middle of an 800 word essay and having your work disappear to make you wary about trusting your work to an online tool. While some blog platforms have introduced the ability to automatically save drafts, there is a better way.
I use MarsEdit to edit my blogs, and the beauty of it is that it performs a form of synchronization that allows me to go back and edit published posts from the comfort of my native application. It handles multimedia gracefully whereas the web interfaces uniformly stink at multimedia. Yet, if I'm stuck at another machine, I can still have access to what I need through the web interfaces. There are other great offline blog editors like Ecto, ScribeFire, and Microsoft Windows Live Writer. If you're frustrated with your blog writing experience, I suggest giving one of these a try.
My RSS reader of choice is NetNewsWire. Not only is it a best-of-breed news reader on the Mac (and recently made free, as in beer), but it is owned by NewsGator, a company that offers a full online back-end. NetNewsWire synchronizes my feed subscriptions and read-states seamlessly back to my NewsGator account, which means that I can use their NewsGator Online web interface, mobile web interface, or even native mobile applications on either my Pocket PC or Blackberry mobile phone - and it all stays in sync. In fact, I can even use FeedDemon (in my opinion the best-of-breed Windows feed reader, also free) on a Windows machine, and it also synchronizes to my account.
While it might sound fantastic or over-the-top, these experiences are what I expect from modern software. In all cases I have access to my data locally in an application that integrates with the other software on my computer, and I can get to it even if I don't have a network connection. At the same time, if I don't happen to be at my own computer (or it unceremoniously dies), I have access to all of my data from web interfaces.
For some of the other web services that I use (for example, Google Calendar) there are no natively-built synchronization tools available. In some cases this can be worked around by using 3rd party tools such as Plaxo to synchronize to a local application like iCal. Unfortunately, in my experience keeping things synchronized using a 3rd party tool is a recipe for heartache. Building solid synchronization is not an easy task, and when you don't control both ends of the equation the level of difficulty approaches infinity.
One common thread links all of the applications discussed here: for me, they represent personal productivity applications. Email, calendaring, blogging, feed-reading - all of these are things that I need to work right, and need available at all times. So what's missing? For me, it's task management.
My two absolute favorite current task management tools are OmniFocus, and Remember the Milk. OmniFocus is an incredibly well done native Mac application, and Remember the Milk is an incredibly well done web app. Right now I'm using both of them, and it's driving me crazy.
I can't seem to let go of OmniFocus because it feels like it belongs as part of my Mac's operating system. It integrates seamlessly with Mail, is so fast as to be essentially instantaneous when making edits, and the native user interface allows for some pretty fantastic on-the-fly sorting and filtering functionality.
Remember the Milk has none of these features. But, I can't let go of it either. What RTM has going for it is ubiquitous accessibility; if I have a web connection of any kind, I can get to it. It has a mobile version, and from what I understand a beautiful enhanced mobile version if you are an iPhone user. It even has a Firefox extension that allows you to put your RTM task list in the sidebar of your Gmail account. Some will argue that it also has an offline interface, since it uses Google Gears to allow you to continue to access it if you are not online.
While I love the concept behind Google Gears, it has two very big strikes against it at this stage. First is that in testing, I've yet to have it perform correctly with Google Reader. That scares me, since Gears is a Google product that was initially developed with Reader. My second beef with Gears is that it requires Firefox, and as much as I love Firefox, it's a bit of a pig on the Mac. (I'm hoping of course that Firefox 3.0 rectifies this situation when it is released).
Right now, RTM and OmniFocus are in a dead heat. So what's it going to take to break the tie? One of them will decide to branch out into new territory. If OmniFocus seamlessly synchronized my tasks to an online equivalent with mobile access, the game would be over. Unfortunately, building a web service to support an application is arguably more complicated than building a desktop client to integrate with an existing service, so my money is on Remember the Milk to win this race. If they were to build native Mac and Windows clients, and make sure to take full advantage of each platform's strengths, they could take over the world, or at least win a lot of mindshare.
The future of offline access to web services is not in the browser, it's in fully functional local applications. Imagine having a client as powerful as Microsoft Word to edit your documents, but have them seamlessly synchronized to an online account like Google Documents, which has an online editor that is still useful, but has less features. Now imagine that for every web application you use, or an online service for every local application you use.
That's the computing future I want to see.