Entrepreneur, executive, and investor; octo-dad; former Googler, now VP Product at

Posts from the Usability Category

Google is Amazing

I find in Google’s search engine significant irony. Let me explain.

Have you considered how they can possibly index so much of the web so often and make it available coherently to the entire world and deliver individual results quickly and consistently? The Google engineering team deserves our immense respect for such an accomplishment. It is truly amazing.

Of course, the “Page Rank” algorithm is an equally amazing feat of engineering–a core idea with millions of tweaks to deliver the amazingly accurate results we have come to expect.

And yet, when you use Google, the interface is amazingly simple and effective. We forget about all of the complexity underneath, and we are compelled to return to Google time and again because we have such a great experience with it.

As a software engineer by background, I’ve spent a great deal of time in my career pondering how to build a scalable infrastructures, considering what languages to use to create my algorithms, and wiring together plumbing. Those are all important, but I’m thrilled that I also have the opportunity to work on the most important aspect of software creation: crafting an amazing user experience.

Does it sound arrogant to say that the user experience is that important? Yes, but when you consider that statement, isn’t it true? We can have amazing code and compelling server infrastructures, but if users don’t enjoy using our software, we’ve failed indeed–but if the users enjoy our software, does it matter if our code is crap or our infrastructure isn’t the best?

How many of the popular web properties and successful businesses of the world were built on famously hackish codebases? Facebook and MySpace, as does the wild popularity of PHP in general.


This reminds me of the Nintendo Wii. I have some friends in the video gaming industry. They can’t stand the Wii. They scoff that some people find it fun. They can’t get past that it doesn’t have the horsepower of some of the other consoles. Its the same as us scoffing at PHP.

Or is it? This is actually a bit different, because the hardware limitations of the Wii bleeds into the interface. Games *are* limited. Cross-console games always look worse on the Wii, and even Wii-specific titles make a point of focusing on the interaction instead of the graphics.

It’s one thing to say that the user interface is more important than the hidden guts of a system, but that internal heart of the system affects the user interface, so the two are obviously quite related. I’m just saying we need to maintain our perspective and remember which is the tail, and which is the dog.

You know, when you start to focus on refining the user interface, you realize that it’s quite a bit of work. GUI interfaces–as distinct from text-based user interfaces–are especially labor-intensive. If you’ve ported an old green-screen app to a GUI technology, you know what I’m talking about.

One of the reasons for the labor-intensiveness is simply because more is possible, and therefore, much more is expected. It’s not that there’s anything particularly complex about asking GUI toolkits like Java Swing and JavaFX, Adobe Flex, the browser, etc. to render a text box as compared to some text-based toolkit, but it can be a lot more complicated to add asynchronous data validation, to deal with concurrency in the interface, progress notification of background asynchronous tasks, creating rich and complex tables to display summary data in, dealing with hundreds more choices for skinning the UI, and so forth.

There are all these details involved in getting it right. I love the term “craftsmanship” for describing a devotion to getting the details right in creative acts.

Alan Cooper, author of “The Inmates are Running the Asylum” and “About Face”, has talked about craftsmanship recently in the excellent talk “An Insurgency of Quality“:

[Craftsmanship] is all about quality–it’s all about getting it right, not to get it fast. It’s measured by quality, not speed. It’s a pure measurement, and a delightful one. Craftsmen do it over and over again until they get it right. In their training, they build things over and over so they get the experience they need to get it right.

But you know what? Most of us in the software industry work in IT departments. Our bosses don’t talk to us in these terms, do they? They usually talk to us in terms of “getting it done”, don’t they?

I think Joel Spolsky captures the way many in IT view craftsmanship:

Craftsmanship is, of course, incredibly expensive. The only way you can afford it is when you 
are developing software for a mass audience. Sorry, but internal HR applications developed at insurance companies are never going to reach this level of craftsmanship because there simply aren't enough users to spread the extra cost out. For a shrink-wrapped software company, though, craftsmanship is precisely what delights users and provides longstanding competitive advantage.

So does that mean those of us in IT are doomed to create crappy software for the rest of our careers? Well, in the same talk, Alan Cooper maintains that Joel is wrong:

[The distinction between commercial and I.T. applications is artificial.] The issue is that there are human beings who are using our products. Some of those human beings pay for the privilege of using our products, and some are paid to use our products. I.T. [workers have] chosen to work in an arena where people are paid to use our products, and it's amazing how that covers up a lot of interaction design sin. While real people will use your really bad product because they are paid to use it, if it is a good product with decent behavior, productivity will climb. You can walk into any organization and spot the SAP users–they are crying in a corner. You can’t tell me that that’s good for business.

There’s a lot more to say on this topic, but let’s suffice for now with agreeing that whoever you are wherever you’re working, you can make the decision now to care about the quality of what you do. Various cultures will tolerate various degrees of craftsmanship, and that’s okay. Do the best you can within your own constraints.

Firefox Logos

Four snapshots of the Firefox logo revision effort

By the way, one of the things I love about Mozilla is the level of craftsmanship that goes on there. For example, Alex Faaborg, one of our UI designers, has recently been driving a revision of the Firefox icon. He’s gone through fourteen iterations and still isn’t done, all for a bit of polish that isn’t immediately obvious. I can’t tell you the number of times I seen him here at the office past midnight working away on this and other details out of his love for the craft.

Going back to the Wii thing. It’s a great example of expectations. If you expect video games to look like this:

Crysis Screenshot

…then the Wii is going to let you down. On the other hand, if you expect people who play video games to look like this:

Video Gamers

…you may find your enjoyment of the Wii a pleasant surprise indeed.

It’s funny–my friends who hold the Wii in such contempt, even when they have fun playing the Wii (usually with family), they still proclaim such hatred for it. They expect their video games to have amazing graphics, and even when such games deliver a valuable service–entertainment–the disappointment of missed expectations detracts from the experience. (Whereas those whose expectations are exceeded by the Wii, they just love it!)

The comedian Louis C. K. explores this area of our psychology in a popular video clip that’s gone viral on YouTube, Hulu, and others. It’s hilarious but it demonstrates something very true: our expectations for our life’s interactions are constantly on the rise–and we get very annoyed when our expectations are not met.

I think the first key of creating a compelling experience for your users–of practicing effective craftmanship in software–is to understand what their expectations are, and to meet or exceed them as often as possible.

What do you think?

The Power of Lowered Expectations!

Recently Dion and I gave a talk at O’Reilly’s well-produced Web 2.0 Expo conference.

We messed up. Let me explain.

Last fall, on a lark, we wrote a quick program that would buzz at random intervals. We finished it right before walking on-stage to give a keynote at The Ajax Experience and ran it with the rule that whenever the buzzer sounded, we had to instantly switch speakers. Folks loved it, so on occasion we’ve been repeating the buzzer thing.

We did it at Web 2.0 Expo, but this time, the crowd was not amused. A sampling of the feedback on the conference site:

Thought [the talk] was great…except…hated the random buzzer bit. I can appreciate adding some fun…but…a little silly at first and eventually really irritating.

The the random buzzer was really terrible, distracting and loud. It was funny for about 1 minute. Doing it for the whole presentation just didn’t make sense.

Maybe the volume was higher than it has been in times past? Maybe we had the maximum interval set too high? In any event, I went to apologize in the comment thread when I was presented with… the dreaded login:


Time to create my 501st Internet credential; but wait! They support OpenID!


I’ve been hearing lots about how I can use my existing Google credentials to login to websites that support OpenID. I couldn’t wait to take advantage of that here. So I click on the “Use an OpenID to sign up” link and with the magic of a cross-fade technique, I see this:

OpenID Login

I’ve no idea how this stuff works, so I clicked on the “Read more about OpenID” link; a pop-up window opened:


First thing I did was click on “Check against this list” to see if I already had an OpenID as I thought I might. Doh! Error:


No problem, URLs get mangled from time to time. This one seems to have an obvious problem:

I removed the extra forward-flash after “” and then got this page:

Login to Login

That’s right; to find out how to avoid creating a login for the O’Reilly site, I have to create a login for the OpenID wiki site. Of course.

The other links on the pop-up were equally useless and/or broken.

At this point I just went ahead and tried my Google login id:

Another error

Rats. I googled around a bit and found this page:

You Have OpenID!

Sweet! I have a account, so I tried that:

You are not you

OpenID, I hate you! Still, perhaps there’s light at the end of the tunnel.

I think we all have experience with this little gem: the handy JavaScript-based field focus advancer which when poorly coded merrily forces you on to the subsequent field, even when you actually do want to go back and make changes. Observe in this video, embedded below for those whose feed readers don’t omit it:

But even better. After filling out the entire “Register Now” Comcast form to sign up for an account, I’m given this little bit of news:


No warning before-hand that if I didn’t have this code I was wasting my time. Nice.

Since May of this year, I’ve been trying to snap screenshots and videos of those special moments when my software (or hardware) interactions have been… less than stellar.

Would you believe Microsoft bits have accounted for more than a few of these? Sure, but you have to go way back in time to find them. All the way back to Excel 2008 for the Mac, in fact.

I opened a spreadsheet and was treated to this modal dialog:

Excel File Error