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?

37 thoughts on “Craftmanship in Software

  1. One other note: Craftmanship will rarely win you accolades. Reviewers and users focus on 5-second impressions, bullet-point feature lists, and benchmark results. But at the end of the day it’s craftmanship that truly makes a product good.

    I say this from experience contributing to both Firefox 2 and Google Chrome. Most of my time and effort in each was spent on subtle things that never got called out by anyone. But when a user notices something like “hey, when I close a Chrome tab, the next one slides right under my mouse and doesn’t resize until I move away”, it’s very satisfying.

  2. Craftsmanship isn’t just in UI. Craftsmanship is in good internal structure, it’s in good data layout, it’s in the details. A great app has a great experience but also great flexibility, and maintainability. Making a great craftsman developer a lot like a bass player – you only notice him when he ain’t there.

  3. Excellent article, Ben, and very well said. I’ve just been thinking about craftsmanship myself and trying to find ways to bring it into my own “marketing materials”. Your article sums up most of my thoughts perfectly.

    “… does it matter if our code is crap or our infrastructure isn’t the best?”

    This may be the one area in which I disagree (if I understand you correctly). Kyle mentions this, too. It’s extremely few companies that have the fortune to become wildly successful and therefore have the opportunity — and funds — to clean up a crappy infrastructure.

    Like Kyle says, flexibility and maintainability are absolutely critical. I’ll add that they’re especially important in the early days of a product’s life. I’ve seen it many times before: failure to lay a proper foundation typically means escalating development costs, which can, over time, spell doom — or at least mediocrity — for a product.

    Craftsmanship is needed at all levels and in each line of code.

  4. I have had many discussions about this with my husband, who is a Software Engineer as well, we too agree that Software Engineering should be more of a craftsmanship, where developers not only sit down and do what they are asked to do, they should or we should always look to do things the best we can and keep trying all the time to do things better, with the best quality possible in all areas, not just UI because it is what the user sees, but also our core services, performance, infrastructure, etc. We should also keep learning new things, innovating and improving our techniques. The problem I see though, is that in order to become a craftsman you have to do it on your own time, because companies generally see software craftsmanship as a big cost (at least most companies) and they don’t give their engineers enough time to do things the best quality possible, it is time and cost consuming, if you want to do it you have to do it after hours, like Alex with the Firefox icon, he has to stay late to get the best result possible.

    I am pro software as craftsmanship but we need 48 hour days!! 🙂

  5. @Peter Kasting: Seriously? I asked for (something like) that in Firefox, and would love to see it implemented. So even though I don’t use Chrome, thanks for fighting the good fight.

    @Ben: Having said that, if we as users didn’t have constantly increasing expectations (i.e. we weren’t so demanding) we’d probably be a lot happier. 🙂

  6. Just wanted to say thanks for giving this blog entry in live presentation mode at the JavaOne conference. It was the best session there, wish they had more of these type of topics. If it’s (generalization coming) one thing the Java community needs to do is take ux and experience a lot more seriously. I mean Microsoft has finally gotten religion and of course I need not mention the big A.

  7. I totally agree that software developers should be considered craftsmen. You should read this book:

  8. The Wii doesn’t deliver on gameplay OR graphics for me. I’m a hardcore RPG nerd, and 99% of the games on the Wii are simply too shallow for my tastes. Nintendo lost me after the SNES.

  9. Very good article Ben!
    I wish I could be in that talk. It’s true that Craftsmanship is like ‘art’ – you know when you see it but you can define it.
    When I write code, I try to iterate and improve it every time I see it… so hopefully I’m on the right path.

  10. Ben, I loved this article, and really enjoyed your related technical session at JavaOne this year (TS-5588: Creating a Compelling User Experience). When are you going to post the PDF containing the slides of that presentation? I thought it was by far the best one at the conference.

  11. Great bit, I just reviewed a new app my wife uses to enter her sales orders for a garment company, if requires you to remember their NEW customer id, and to press a search button to find them by name etc. the first page is blank but a small ID number field, would it not be better to assume your salesperson does not know the id and have the fields there? Then don’t even start me on bread crumbs that are not clickable?
    We as software developers need to make software for users and not for us and what is easy or tenured.

  12. @”””the amazingly accurate results we have come to expect.”””—not wanting to rain on your blog, but can you detail a discovery procedure to measure accurateness of google results? very often, it is true, the first 10~…100~ results do not only contain the keywords i asked for, very often the pages referred are also on the subject intended. there remain, however, many difficult searches—’canvas’, when only html5 canvas (no other gui stuff, no sailing canvas) is intended (without filtering out a lot of pages about html5 canvas); ‘word’, ‘excel’, ‘access’, when none of the ms products are intended; and so on. the quality of my personal search results may be related to the many software-related interests i have. come to think of it, i observe that when searching chinese keywords, is often a better choice.

    google *is* amazing, but again, can anyone come up with a formal procedure to measure search engine quality *on a global scale*? (i know about some measures like precision, recall etc, but those only work with controlled smallish datasets, right?) in other words: if i were to claim that baidu is ‘better’ than google on a randomly selected set of a few hundred thousand chinese user queries, then is there anything i can present except polled user satisfaction to substantiate my claim? i’d doubt we’re there, yet.

  13. Great post, Ben. I totally agree with your comments on craftsmanship.

    Hope all is going well in Palo Alto.

  14. Great stuff. I’m often intrigued by sets of developers who either have ongoing nagging issues to try to get things just right, or others who are content with getting something to functional and calling it done. Somewhere in the middle is probably the place to be – especially for web development – because you can both ship early and revise often. And do so based on real-world feedback.

  15. If the thought of servicing your units on a cleaning services 30066 regular basis
    is especially important if you have a clean record. Definitely a machine
    doies not provide propeer service. Do not use acid for too long as porcelain cleaning
    services 30066 enamel surfaces can be damaged by the carelessness of thhe worker, you
    can choose a customized package for yourself.

  16. For a author, for instance, fives show up when it’s time
    to start a new guide or project. These individuals are in a continuous battle for the best
    and are usually extremely analytical. There is a broad variety
    in the tarot deck styles.

  17. Fantastic beat ! I would like to apprentice at the same time as you amend your
    website, how could i subscribe for a blog site? The account aided me a acceptable deal.
    I had been tiny bit acquainted of this your broadcast provided vivid transparent idea

  18. I’m impressed, I have to admit. Seldom do I encounter a blog that’s both educative and interesting,
    and without a doubt, you’ve hit the nail on the head.
    The problem is an issue that not enough folks are speaking intelligently about.

    I am very happy that I came across this during my search for
    something concerning this.

  19. If some one needs expert view regarding blogging and site-building then i recommend him/her to
    visit this web site, Keep up the good work.

  20. Howdy I am so thrilled I found your weblog, I really found you by accident, while I was browsing on Yahoo for something
    else, Anyhow I am here now and would just like to say thanks a lot for a fantastic post
    and a all round interesting blog (I also love the theme/design), I don’t have time to look over
    it all at the moment but I have bookmarked itt and also included your RSS feeds, so when I have time I will be back to
    read a great deal more, Please do keep up the superb work.

  21. I don’t even know the way I finished up here, however I believed this put up was
    once great. I don’t realize who you’re however definitely you are going to a well-known blogger
    if you happen to are not already. Cheers!

  22. When I originally commented I clicked the “Notify me when new comments are added” checkbox and
    now each time a comment is added I get four e-mails with the same comment.
    Is there any way you can remove me from that
    service? Thanks!

  23. Excellent way of telling, and nice piece of writing
    to obtain data about my presentation topic, which i am
    going to convey in academy.

  24. You will mostly find small fish and crab at the bottom,
    if your spear fishing then you will have to work your way
    in a zig zag up and down the rocks from 10ft to 25ft and flush them out of
    the rocks, you should find a lot of crab along the way.

    Diving partners can bond over the experience and
    the common interest in diving. Now you will want to take
    a compass bearing across to the other side of the north
    jetty so your return trip will bring you back to the south jetty rocks.

  25. Write more, thats all I have to say. Practically, it seems as though you relied on the video to make your point.
    You clearly know what you’re talking about, why waste
    your intelligence on just posting videos to your weblog when you could be giving us something
    informative to read?

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s