Collaborative web applications

This week, I'm going to step back from AGCA and start venturing into some higher level topics.  This week, let's talk about web applications.  

Not just any web applications mind you, let's talk about collaborative web applications.  The term is new, but the idea isn't.  You've probably heard of at least a few of the following: Google Docs (aka, Google Drive now), Google Wave, Office 365, Dropbox... 

These applications are pretty nifty.  They allow you to log in from wherever, and edit/view documents.  But not only that, they also allow you to interact with other users of the same system.  If someone else opens up the same document, they see any changes that you make as soon as you make them.  In other words, the state of the application is mirrored in realtime across all the browsers in which the application is running.

Building these applications in a web-browser also forces you to rely heavily on the browser metaphor, HTML5 functionality, and on HTTP.  Integrating an application's design with this ecosystem is often kludgy, but can bring several extremely nice benefits:

Applications like this are incredibly cool, and incredibly useful.  So why don't we see more of them?

The short answer is that the infrastructure isn't there.  And it's hard.  Ask any first-year distributed systems student -- they'll tell you that state replication isn't easy, even when your data is only coming from one source.  Web developers are used to dealing with nice, simple, standardized backend infrastructures.  Apache, MySQL/Postgres, and maybe some sort of CMS like Django are reasonable expectations... but none of these support the sort of scalable realtime state replication required to implement a collaborative web application.

Just a thought.