Google Wave - a developer's eye view
Better than pistol ammunition taste-testing
Last week, Google announced Wave, a new communication tool presumptuously described as "e-mail, if it were invented today." Now, it's a coming of age for technology companies to write a collaboration tool, put a good spit-shine demo on it, and call it a revolution. The idea is nothing new. In the 80s, we called it Lotus Notes. As of recent, we called it Microsoft Sharepoint. Today, I guess, it's Google Wave.
As developers, we've got to roll with it, even though on its face, it may seem as if there's been nothing gained insofar as making peoples' lives better. Management wants Wave. We need to integrate it with existing systems.
It's easy to complain about working with some brain-dead, proprietary API, or interfacing a some server that decided to invent its own protocol, or shape-shift our company's data into the XML Schema from Hell. But at the end of the day, hopefully, everything will work together just as that nice salesman had promised. In this regard, Google shoving its fist into the gooey, caramel-center of the enterprise collaboration market is a good thing, because when it comes to APIs, Google sells to the developer, not the managers.
When it comes time to integrate Wave into your enterprise, the job won't make you want to look for a new career in the pistol ammunition taste-testing industry.
Caught Embed With a Web Page
The easiest way to get started with integrating Google Wave into existing infrastructure is the embed API. At a high level, think of a "wave" as a collaboratively edited document. One of the keys to Google Wave is that you don't have to be running a particular program or be on a particular website to interface with these documents. You can embed the wave into any web page, and visitors can change it or participate in a conversation inside of it. Those changes and conversations are reflected anywhere else the wave is seen.
Go Go Gadget Bourbon
Google Wave provides you with a way to change the look and feel of waves. In an attempt to appear kooky and fun, Google has called these plug-ins "gadgets." This is the same way that you can extend existing Google services. Google Gadgets that run for iGoogle or OpenSocial (evidently still alive) will run in Wave as well. It's important to note that the idiom for a gadget is a small bit of functionality, not a full application. For example, you can write a gadget to pull data from your company's bug tracking system into a wave.
The interesting part of gadget development is the "playback" feature of Wave. Being a collaboration tool, it allows you to view a wave at any point during its history and play that history forward so you can see the evolution of the wave. Since a gadget is a way to extend the functionality of a wave, it needs to support this playback feature. Google makes it easy on you, allowing your gadget to submit state deltas to the server. If you follow this convention, you get playback for free, provided your gadget knows how to render itself given the state data.
My Heart is Human, My Blood is Boiling, My Brain IBM
Since a wave is a collaboratively edited document, it makes sense that programs should be allowed to participate. Google calls this the Wave Robots API, and since the robots are afforded any right that a human has within a wave, it's a really good way for the machines to cooperatively find Sarah Connor and generally plan the uprising. The canonical example Google demoed was a translation bot that translated messages from English to French and back in real-time. (It is unknown if the bot knows the English translation of “aw haw haw”).
In the current preview release, Wave only supports robots written on Google App Engine, which means you're restricted to Java and Python, but future releases will support robots hosted anywhere. The programming model for robots is event driven, which means that your robot cannot contact Wave directly, but only ask to be notified when certain events happen. The wire protocol for these notifications is still in flux, but the Java and Python APIs keep you from having to muck around in that business.
...That Was Hard
When Google said that Wave was e-mail as if it were invented today, they didn't mean it in a just-as-long-as-you-come-to-google.com-and-click-on-ads sense. The network model for Google Wave is similar to SMTP, where individual organizations run their own servers, support their own users, and house their own data. These servers can talk to each other so the user experience is seamless, but you better believe that figuring out how to hook them together was a task completely motivated by coffee and Adderall. Lars Rasmussen, one of the creators of Wave, completely nailed the sentiment in his presentation at the Google I/O conference: "Federation....that was hard."
Wave servers talk to each other using an extension to XMPP, which is the same protocol that powers Jabber and Google Talk. XMPP is easy to parse and create, but the headaches for ops teams are going to come from the security. While you can encrypt XMPP messages at the transport level, Google has built a level of cryptographic signatures into the application layer, so that Wave servers can authenticate messages from one another. Congratulations, systems administrator! You've just won a whole pile of shit that won't work because of certificate problems! Good luck wit that.
The protocol that these servers use to communicate is open, and you can check it out at www.waveprotocol.org. Google is going to open source most of their code for the Wave back-end as a production quality reference implementation.
What Business Plan?
It's good to see a company convincing the developers on the ground that their product is worth using. Something tells me that Google won't need to hand out a "Google Certified Solutions Provider" certificate to any shaved ape that can pass a test. For once, salesmen aren't pitching an enterprise tool to nontechnical managers and leaving it up to the developers to "figure all that hard stuff out." Can the strategy work? Maybe. If Google can figure out how to make any money from it. ®