So yesterday was the Google Wave hack-a-thon at the Sydney Google HQ in Pyrmont. 80 developers in one room, all pushing and prodding at Google's newest baby. Overload central. On the up side, the error messages from the wave client are amusing as hell.
At it's simplest, Google Wave is a way of maintaining an XML document, with annotated sections, synchronised in the face of updates from globally distributed clients. On this alone, Google Wave is an amazing piece of technology. The science behind this technological feat goes by the name
Operational Transformation, and appears to be a reasonably active area of scientific inquiry. Google's implementation, understandably, optimises for server load and for the fact that it implicitly rate limits updates from the clients.
There are a number of challenges here for the Google Wave team. Firstly, when, and how, to get buy in from the software development community at large to help drive their vision forward. There was obvious resistance from the Google Wave team to open sourcing their technology at this point, even after repeated comments from
Greg Wilkins. I understand both the Google Wave team's point of view - they know better than anyone that the technology is currently very alpha, and they have a very long list of modifications they want to make before they open the doors.
On the flip side, I understand Greg's point of view. Greg stated that the open source community at large will help drive a project forward, even if it is manifestly unfinished. By the sound of it, the big thing that Greg learned from open sourcing his software is that the open source community at large will pick up good software and run with it, often in directions completely unthought of by the originators of said software. I think this is the lesson that the Google Wave team needs to learn, that what we want out of Google Wave, and what the Google Wave team think we want are very different.
I'm looking forward to the first release of software from the team - the Operation Transform library they are using on both the client and the server to maintain the global document. This release, like AJAX before it, is going to change how we build software.
In the age old CGI days, the unit of computation was the form submission. This meant that documents, and forms full of instructions, were the standard fare on the internet. With the Appearance of AJAX, the unit of submission was suddenly the field modification. This changed the face of web design, now pages could be interactive. Now, the unit of submission for web pages is now the key press.
This is going to change how we interact with websites, and how we build the back end of websites. The current best practice of sharded MySQL instances plus terabytes of memcache won't survive this change, nor will hand crafted javascript. OT requires that the front ends now be engineered with the same level of software engineering as has been the standard in the backends.
Currently we have two front end platforms that this is capable in, the Google Web Toolkit, which the Wave team are using, and Flex/Actionscript. I personally think that Flex + Flash Player 10 is actually a better platform currently. Flash Player 10 has the advantage of a professional text layout engine in the form of FTE, and it has the capability to run constantly open sockets to the backend server farm.
Flash's greatest weakness, however, is that the tooling to use Flex/AS4 is non free, and thus not well understood by the very java engineers that are building out this revolution in back end infrastructure. This is GWT's strength - as it is aimed squarely at he Eclipse wielding Java engineers. However, GWT's weakness is that this new realm requires a much more solid foundation than the currently underspecified ContentEditable area that forms the basis of all current web page rich text editors.
I think in the short term that flash will take the lead, but the long game will again be dominated by the web browsers, as they again successfully play catch up with flash, just as they are currently attempting to do with the HTML5 canvas and video tags.