Yesterday's Google I/O keynote highlighted the power of HTML 5 to match functionality long experienced in desktop applications. This morning, Google plans to announce an HTML 5-based application - still very much in the early stages of development - that represents a profound advance in the state of the art.
Lars and Jens Rasmussen, the original creators of Google Maps, will take the stage to unveil their latest project, Google Wave. As Lars describes it, "We set out to answer the question: What would email look like if we set out to invent it today?"
That is exactly the right question, and one that every developer should be asking him or herself. The world of computing has changed, profoundly, yet so many of our applications bear the burden of decades of old thinking. We need to challenge our assumptions and re-imagine the tools we take for granted. It's perhaps no accident that this project, carried out secretly at Google's Sydney office over the past two years, had the code name Walkabout. That's the Australian aboriginal tradition of going off for an extended period to retrace the songlines and learn the world anew.
In answering the question, Jens, Lars, and team re-imagined email and instant-messaging in a connected world, a world in which messages no longer need to be sent from one place to another, but could become a conversation in the cloud. Effectively, a message (a wave) is a shared communications space with elements drawn from email, instant messaging, social networking, and even wikis.
It turns out that Jens had the idea back in 2004, when Google first acquired the company that became Google Maps. As Lars tells the story:
We were excited to join Google and help create what would become Google Maps. But we also started thinking about what might come next for us after maps.
As always, Jens came up with the answer: communication. He pointed out that two of the most spectacular successes in digital communication, email and instant messaging, were originally designed in the '60s to imitate analog formats — email mimicked snail mail, and IM mimicked phone calls. Since then, so many different forms of communication had been invented — blogs, wikis, collaborative documents, etc. — and computers and networks had dramatically improved. So Jens proposed a new communications model that presumed all these advances as a starting point....
We started with a set of tough questions:
Why do we have to live with divides between different types of communication — email versus chat, or conversations versus documents?
- Could a single communications model span all or most of the systems in use on the web today, in one smooth continuum? How simple could we make it?
- What if we tried designing a communications system that took advantage of computers' current abilities, rather than imitating non-electronic forms?
Responding in Context
Let's say I want to communicate with someone. I start a wave, just as I might start an email message. The recipient(s) see an incoming wave, just as they see an email today. Where the magic starts is with replies. In email, you have the choice of including no context, only a portion of the message you're replying to, or the whole thing. In the first case, you need to go back to the original message for context; in the second, you have wasted copies going back and forth. Come into the middle of a long thread and you may be replying to a discussion that has already moved on or covered the point you want to express. But what if there were only one message, shared in the cloud? Now, your comment on the second paragraph is attached directly to that point in the conversation. There are no redundant copies of portions of the message, as replies are seen in context.
As you can see in the screenshot below (click to enlarge), a Wave inbox looks much like an email inbox. But look to the right, and you can see how the replies are embedded right into the middle of the original message, so Stephanie's question about what camera Jens used for his photos appears right in context.
Now, you might ask how well this works for long, complex messages rather than the short one shown in the demo. I don't know the answer, but I suspect that Wave will be even stronger in that case. Our experience with collaborative editing of book manuscripts at O'Reilly suggests that the amount and quality of participation goes up radically when comments can be interleaved at a paragraph level.
Is it a particle or a wave? It's both.
First generation email/IM integration let you see when someone was online, and opt to instant message someone rather than send them an email. Wave simply erases the distinction.
If both people are online at the same time, a wave acts just like an instant message -- except that you see each character as it is typed, just like in subethaedit. "In our experience, a lot of time in IM is spent waiting for the other person to press 'Done'," says Lars. (However, it is possible to set Wave to hold your messages till you are done.)
A key point here is that Google's relentless focus on reducing the latency of online actions is bringing the online experience closer and closer to our real world experience of face-to-face communication. When you're talking with someone, you know what someone is saying before they finish their sentence. You can respond, or even finish their sentence for them. So too with Wave.
The real-time connectedness of Wave is truly impressive. Drop photos onto a wave and see the thumbnails appear on the other person's machine before the photos are even finished uploading.
Step by step playback draws a cheer
Let's say you are added to a conversation (a wave) that has been going on for a long time? You can be added at any relevant point, not just the end. But even cooler, you can do a playback of the entire evolution of the conversation.
But wait: there's more! Let's say you want to edit your message (or even a message that was written by another participant in the wave). Yes, you can. The original author is notified, but every participant can see that the message has been modified, and if they want, can replay the changes.
This leads to a change in behavior: conversations become shared documents.
The screenshot below shows a simple example, as Gregory and Casey collaborate to produce a good answer to Dan's question. As Stephanie Hannon, the product manager for Googe Wave, said to me, "In Wave, you don't have to make the choice between discussing and collaborating."
As anyone who's used version control knows, a document with lots of discussion and edits can become pretty messy. No problem. You can export an edited wave as a new wave, and start over. "One of our design principles," says Lars, "is that the product of a wave can be as important as the original wave."
Nor do you need to include everyone in every part of a conversation. Essentially, Lars, says, "waves are tree-shaped sets of messages. You can shape a subtree, or a sub-conversation and limit the set of participants in any way you like."
Wave as a Platform
Wave is more than a product. As Lars explains:
The Google Wave product (available as a developer preview) is the web application people will use to access and edit waves. It's an HTML 5 app, built on Google Web Toolkit. It includes a rich text editor and other functions like desktop drag-and-drop (which, for example, lets you drag a set of photos right into a wave).
Google Wave can also be considered a platform with a rich set of open APIs that allow developers to embed waves in other web services, and to build new extensions that work inside waves.
The Google Wave protocol is the underlying format for storing and the means of sharing waves, and includes the "live" concurrency control, which allows edits to be reflected instantly across users and services. The protocol is designed for open federation, such that anyone's Wave services can interoperate with each other and with the Google Wave service. To encourage adoption of the protocol, we intend to open source the code behind Google Wave.
Anyone who's followed my writing knows that I'm a huge fan of simple systems with extensible architectures. So I was excited to see that the team didn't lard lots of features into the core product, but instead added new features via the Wave APIs, much as they hope third party developers will do.
One useful extension, Polly (Poll-y) lets you incorporate polls into a wave. In the wave shown below, participants are asked whether they can make it to a party. Responses appear immediately in the wave. That's the way these things ought to work! No jumping to a website to see the results of an Evite or a poll.
(I should note that the ever-prescient Jon Udell showed how to hack existing tools to similar effect in his 2001 book Practical Internet Groupware. It was one of the books I'm proudest of publishing, despite its commercial failure. It was just too far ahead of its time.)
The API has been used to build a bunch of cool extensions: Bloggy, a blog client, lets you make a blog post as a wave. When people comment, they join the conversation. Spelly is a spell-checker that uses the entire corpus of the web as its dictionary. Linky is a link-recognition engine that is clever enough to recognize that the link you just entered is a YouTube video, or a link to a photo, and give you the option to embed the target of the link into the wave. There's even a twitter client - you can tweet into and out of a wave! And of course, buggy, a bug-reporting tool that can also be a participant in a wave.
Wave can also be used as the base for interactive games. For example, here's a real-time interactive chess game in Wave:
Open Source, Open Protocol, and Federated Wave Clouds
Google wants other providers to adopt Wave - the protocol allows federation between independent Wave clouds. The team hopes that Wave will become as ubiquitous and interoperable as email and instant messaging, not just a Google product.
I support this vision. The Wave team has done a great job, but for Wave to really succeed, it needs to become a new fundamental service on the net. An open protocol means that anyone can build their own Wave services - everything from Wave servers to Wave extensions. But open source means that people can push the envelope in adapting the service to new environments, devices, and use cases.
I'm hopeful that the industry will take up the challenge, and build on what is being shown at Google I/O this morning. Eric Raymond noted that every open source project begins with a plausible promise. There's no question that the plausible promise is on stage this morning. I hope the folks in the audience at Google I/O, as well as those at Yahoo!, Microsoft, and elsewhere, get on the bandwagon as well. I'm eager to move from email and IM to Wave!
Aside: The fact that this application was built using GWT and HTML 5 really emphasizes Vic Gundotra's points from yesterday, that web applications can not only match, but can even beat the functionality of native apps. It's not just HTML 5, though. It's the commitment to the lightweight nature of the web, to real-time, to lightweight components connected by open protocols rather than to monolithic systems.
Make it New!
Ezra Pound once wrote: ""The artist is always beginning. Any work of art which is not a beginning, an invention, a discovery is of little worth." And elsewhere: "Make it new!"
Even more than the application itself, I love the way Wave doesn't just build on what went before but starts over. In demonstrating the power of the shared, real-time information space, Jens and Lars show a keen understanding of how the cloud changes applications.
When I saw Wave for the first time on Monday, I realized that we're at a kind of DOS/Windows divide in the era of cloud applications. Suddenly, familiar applications look as old-fashioned as DOS applications looked as the GUI era took flight. Now that the web is the platform, it's time to take another look at every application we use today, and ask the same question Lars and Jens asked themselves: "What would this look like if we invented it today instead of twenty-five years ago?"
For more information
The following links may not be live until the end of this morning's keynote at about 10:15 am Pacific time:
wave.google.com: the eventual home for Google Wave. For now a place to learn more and sign up to be notified when we launch
code.google.com/apis/wave: home for the API, documentation and sample code.
waveprotocol.org: home for the protocol specs (draft), whitepapers and a discussion forum about the open google wave protocol
The Google I/O demo of Wave is now available on YouTube. It's embedded below: