Tuesday, December 21, 2010

Four reasons Google is still Awesome

My recent predictions about which Google products will succeed (and which won't) are causing people to think that I'm anti-Google, which makes me sad since Google is probably still the best company of its size, and I really enjoyed my time there. 

Unfortunately, positive stories are never as popular as negative ones, but regardless, it's worth highlighting some of the things that continue to differentiate Google as one of the best companies in tech.

1 - They take big risks. People often point to projects such as Wave as evidence that Google has "lost its magic" or something. To me, it's evidence that they are still willing to take risks on new ideas and new ways of doing things (Wave was run as a completely autonomous project in Australia). If everything you do works, then you're not taking many risks and probably aren't innovating either. Obviously, if everything you do fails, that's not good either, but there's a sweet-spot somewhere in the middle. Google has enough big successes, such as Chrome and Android, to show that they are somewhere near that sweet-spot.

2 - They are willing to build new technology seemingly unrelated to the core business. When we started work on Gmail, many people said it was a distraction and that Google should focus on web search. Now nobody questions email, but they wonder why Google is developing self-driving cars. From a market perspective, this looks like a lack of focus, but that's a rather narrow way of viewing things. From a broader perspective, it can be seen as a focus on using technology to improve the world. Did people criticize Edison or Tesla for inventing too many different things?

From an employee perspective these non-core projects are also an opportunity for greater autonomy. Part of what made the Gmail project so fun was that we had a lot of independence and could pursue ideas that other people inside Google thought were "the wrong way to do it". Most other tech companies do not offer that kind of freedom.

3 - They compete in positive ways. Many companies compete in ways that actually destroy value, such as using patent lawsuits to slow down or kill competitors. Google's weapon of choice is more often open source and open standards. There's no question that projects such as Android and Chrome have strategic value and work to weaken Microsoft and others, but they also happen to be good for the world. Google has managed to keep their interests surprisingly well aligned with the interests of their users.

4 - They don't seem to mind honest criticism. I'm currently reading a draft of a forthcoming Google book, and was amused to find that it includes an email that I sent back in 2000 trashing our then most recent product launch. It's painful for me to not tell people what I think, so for the most part I try to find people who don't mind hearing the truth (or my take on it, rather). Much of my interaction with startups consists of me telling them everything that I don't like about their product (and then they thank me!). I've worked for a lot of different companies, and Google was the only one where me speaking my mind never seemed to cause a problem. I'm not claiming that I'm always right, because obviously I'm not, but systems (or individuals) that don't welcome negative feedback are doomed. Cultures that don't laugh at themselves are cults.

Talking about Google is always a little tricky for me given my background, but they continue to be a fascinating company and a great source interesting lessons, so I'm going to keep trying. Hopefully I don't come off as a hater or a fan boy, but simply an honest observer.

Saturday, December 18, 2010

The Cloud OS

My recent remark about the future of ChromeOS generated a surprisingly passionate response. Some said that my prediction was obvious and boring, but others disagreed, arguing instead that I am ugly and "don't get it". I won't disagree with either side, but I also noticed that my prediction was sometimes inaccurately characterized as me "hating" ChromeOS, Google, or The Cloud, all of which is false. Since there seems to be so much interest in this topic, and because people keep emailing me about it, I should probably explain my actual thoughts a little better.

First, what is a "cloud OS" and why should I want one? Actually, I don't even know if anyone calls it a "cloud OS", but I couldn't find a better generic term for something like ChromeOS. The basic idea is that apps and data all live on the Internet, which is has been renamed "The Cloud" since that sounds cooler, and your laptop or whatever is basically just a window into that cloud. If your laptop is stolen or catches fire or something, it's not a big deal, because you can just buy another one and nothing has been lost (except your money). Many people characterize this approach as using a "dumb terminal", but that's wrong. Your local computer can still do all kinds of smart computation and data manipulation -- it's just no longer the single point of failure.

To me, the defining characteristic of cloud based apps is "information without location". For example, in the bad old days, you would install a copy Outlook or other email software on your PC, it would download all of your email to your computer, and then the email would live on that computer until Outlook corrupted its PST file and everything was lost. If you accidentally left your computer at home, or it was stolen, then you simply couldn't get to your email. Information behaved much like a physical object -- it was always in one place. That's an unnecessary and annoying limitation. By moving my email into "the cloud", I can escape the limitations of physical location and am able to reach it from any number of computers, phones, televisions, or whatever else connects to the Internet. For performance and coverage reasons, those devices will usually cache some of my email, but the canonical version always lives online. The Gmail client on Android phones provides a great example of this. It stores copies of recent messages so that I can access them even when there is no Internet access, and also saves any recent changes (such as new messages or changes to read state), but as soon as possible it sends those changes to the Gmail servers so that they can be reflected everywhere else (such as my home computer). To the greatest extent possible, the information all "lives" in the cloud, and all other copies are simply caches which may be discarded at any time. (BTW, Apple is lame for not allowing a native Gmail app on the iPhone -- email is the one place where Android really outshines the iPhone for me)

Continuing with the Gmail example, it's not just your data that resides in the cloud -- the entire application lives there. This is the part that causes people to erroneously describe cloud based apps as a "return to dumb terminals". Just because an application "lives" in the cloud doesn't mean that your local computer isn't still doing work. When you use Gmail from your web browser, it downloads large chunks of Javascript code to run on your computer doing things such as rendering your inbox, handling keyboard and mouse events, pre-fetching messages, etc. The advantage of having this code run on your computer is that it can respond to your actions within a few milliseconds instead of the hundreds of milliseconds it could take to reach Google's servers (thanks to the relatively low speed of light). Which parts of the application run on your computer and which run on Google's computers? Ultimately, it does not matter, and can change over time (and in fact the split is different for different interfaces -- the basic html interface does not need any Javascript) As an end-user, you simply use the app, and let Google worry about making it all work, keeping it up to date, etc.

Because we're now treating the executable code and system configuration as data that lives in the cloud and is only cached locally, it also makes sense to do away with the old notions of installing and administering applications on your computer. And of course we also need a security and sandboxing system that prevents the code from breaking your computer (as is so common in the Windows world). In the web/Javascript world, this happened somewhat automatically because web apps evolved from simple web pages, and obviously you don't have to install or uninstall web pages -- your browser simply fetches what it needs to display, optionally caches parts of it for improved performance, and discards resources that it no longer needs (since it can always re-fetch them later on).

Cloud-based apps don't necessarily have to be written in Javascript and run in your web browser however. iPhone and Android apps behave in much the same way. Although they can be "installed" or "uninstalled", from a user perspective, that process isn't substantially different from adding or removing a bookmark, and in fact many of those apps are little more than a thin wrapper around an embedded web browser. A combination of technical and review policies prevent those apps from doing anything dangerous to your computer (unlike a Windows app, which could install a new device driver, replace a core system library, install a root-kit, etc). 

One way of understanding this new architecture is to view the entire Internet as a single computer. This computer is a massively distributed system with billions of processors, billions of displays, exabytes of storage, and it's spread across the entire planet. Your phone or laptop is just one part of this global computer, and its primarily purpose is to provide a convenient interface. The actual computation and data storage is distributed in surprisingly complex and dynamic ways, but that complexity is mostly hidden from the end user. For example, interacting with my FriendFeed page involves the coordination of thousands of individual processors and disks owned by a dozen different entities, including you, Facebook, Amazon, Google, your ISP, and many intermediate ISPs. The same is true of the services provided by thousands of other web apps.

This global super-computer enables us to do things that would have been impossible not long ago, such as instantly search billions of documents, access our email and other info from almost anywhere, easily share ideas with thousands or millions of people, collaboratively edit documents with people spread around the world, leak embarrassing diplomatic cables, etc. It also makes it easy to launch new services and applications with almost zero money, which has created a new generation of low-budget startups and expanded the world of high-tech entrepreneurship to many more people.

Inevitable, some curmudgeonly types will say this is all bad, and indeed it is not without some downsides and complications, but overall I believe the development of this global super-computer is one of the most important technological advances in history.

And what about ChromeOS? If my laptop is just one part of a much larger computer, what is the ideal design for my local node? It should be relatively cheap and reliable, secure (no viruses or anything), zero-administration (I don't want to be a sys-admin), easy to use, and fast. I believe this is roughly the design target of ChromeOS. They are building laptops that run the Chrome web browser and approximately nothing else.

I actually like the idea of ChromeOS, so why did I predict its demise? The answer is that we already have millions of devices that almost meet the same ideal, and they are running iOS and Android. In the 1.5 years since ChromeOS was announced, Apple launched the iPad, which quickly became one of the fastest selling new devices ever. Google will necessarily respond by building Android tablets, which means Android will be running on larger, more powerful devices. All of the benefits of ChromeOS (security, instant-on, etc) should apply to Android as well, and I expect that any new Chrome features (mostly under the umbrella of HTML5, but perhaps Native Client as well) will also be added to the Android browser, since platforms succeed by being as large as possible. Once Android has all the benefits of ChromeOS, the most obvious difference will be that ChromeOS lacks the thousands of native apps which are popular on Android. Android apps are closer to web apps than Windows apps in terms of security and manageability, so eliminating them doesn't seem like much of an advantage for ChromeOS. 

The other obvious difference between ChromeOS and Android is that ChromeOS assumes a mouse/track-pad while Android currently assumes a touch interface (many Android devices already have a keyboard). If my prediction is wrong and both OSs stick around, this will probably be the reason. However, I doubt that's enough of a difference to justify maintaining two separate OSs, and ultimately everything may end up with a touch screen anyway. Perhaps the tablet / laptop convertible will make a comeback.

Put another way, the ChromeOS laptops are awkwardly positioned between the established Mac/Windows laptop market, which isn't going away anytime soon, and the rapidly growing Tablet market, and it has approximately zero users. That's not a great place for a new platform to get traction and establish itself. But if it does, I will be happy for it. And even if it doesn't, it may still be a worthwhile experiment.