A few days ago I uttered a rant on user-interface problems in the Common Unix Printing System. I used it to develop the idea that the most valuable gift you can give your users is the luxury of ignorance — software that works so well, and is so discoverable to even novice users, that they don't have to read documentation or spend time and mental effort to learn about it.

This rant made it onto all the major open-source news channels, so I was expecting a fair amount of feedback (and maybe pushback). But the volume of community reaction that thundered into my mailbox far surpassed what I had been expecting — and the dominant theme, too, was a bit of a surprise. Not the hundreds of iterations of "Tell it, brother!", nor the handful of people who excoriated me as an arrogant twerp; those are both normal features of the response when I fire a broadside. No, the really interesting part was how many of the letters said. in effect, "Gee. And all this time I thought it was just me..."

Here are representative excerpts. Hostnames have been removed to guard respondents' privacy. A few typos and punctuation errors have been corrected. As you read these, notice that there are a cluster of themes emerging that bear not just on CUPS but on the wider state of user-interface design under Linux.

>You rock! Amen brother! I got a linux box a year and a half ago. I am
>a dyed in the wool geek, a programmer by trade, assembly, C, C++. I
>should have linux up in no time, with my eyes closed, right? Oh my
>god, what a humbling experience. *Everything* was difficult.  And I
>always had this sense that I was being stupid or lazy, even though I
>swear I'm neither.  This sense radiated out of the mailing lists, my
>friends, some corner of my own mind.  I have taken notes, and I plan
>to write a rant of my own, very much like yours.  Reading yours was
>like visiting a childhood home - around every corner, on every shelf
>in every closet, there was a rush of familiarity, of recognition. [...]
>If Aunt Tillie can't run your software, scolding her for being a
>brainless luser [...] buys you exactly nothing. Nothing but a 0%
>market share. Aunt Tillie is *right*, you are *wrong*.  She votes with
>her feet. [...] Thanks for being a voice, and one with the street cred
>not to be dismissed as a (sneer) newbie.

>I just wanted to say a big thanks for writing your rant.  CUPS has been the
>bane of my existence over the last year.  Despite ~20 years of *nix
>experience, I have found setting up a printer under CUPS to be an exercise
>in frustration, both mine and my wife's.  I seem to never be able to
>configure it successfully on the first N attempts and she can't understand
>why it takes me a blasted week to setup a new printer.
>Heaven forbid, I got a new USB printer and wanted to plug it into my
>Linux desktop for wireless use from our Mac notebooks.  I made the
>mistake of doing this during finals.  Ack!  CUPS, even locally, seems
>to have a theme of swallowing your print jobs without telling you
>where they went, without giving any reasonable errors and without any
>direction whatsoever as to how to correct the problem.  How in the
>world can a program not know that the bytes never reached the LPT

>Somebody pointed me to your essay about configuring CUPS after seeing a
>similar rant I had posted to a company newsgroup.  I've spent most of my
>career working on Unix systems and opposing M$, but lately I've been
>sorely tempted to go over to the dark side after wasting incredible
>amounts of time trying to administer Linux systems.

>Utterly on the money (of course). Since I began using Linux I have been
>extremely pleased with the technical improvements but utterly depressed by the
>inability of Linux builders to understand the mentality of Joe Public. Your
>essay could easily be applied to almost the entire Linux application base.
>I suggest that as programmers or designers, some critical useability tests
>should be mandatory in a given project. Useability is an important criteria
>and until this criteria is  satisfied then a project is incomplete. 
>Functionality without useability is in most cases (when dealing with users)
>totally useless.

>I'm a self-taught Linux user who usally does pretty well with whatever
>I set out on but CUPS was hopeless. I felt all the more terrible about
>my failure after reading all the "CUPS is great" and "CUPS is easy"
>accolates on the web. I feel a bit better after reading that an alpha
>geek of your status had similar difficulties. Thanks for the article
>(I'm keeping it as a HOWTO). I hope it's well received.

>Just the other day, I went into work where I design Windows user
>interfaces (flames to /dev/null I used to code in Motif but it was
>clear MS cared more about UI than Unix, so I left the Unix camp.
>[...] I mean, these [Unix] people worshiped at the sendmail.cf altar, 
>which is NOT cool in 2004.  What I realized is that Linux is not a
>code base.  Or a distro.  Or a kernel.  It's an attitude.  And it's
>not about Open Source.  It's about a bunch of people who still think 
>vi is a good config UI.

>Whoahahah! I nearly laughed myself sick while reading your essay. It is too,
>too true. And I am as guilty as the next d00d at creating just such mishigoz
>in my own GUIs. You should seriously consider emulating J.S. Bach and
>having this one engraved in copper to stand as a warning for all eternity.
>Made my day :-)

>I am trying to cram some knowledge so I can get off of
>MicroSoft's teats, but it's very frustrating to sit at
>a box with a lovely GUI KDE desktop, and try something
>simple like running Mozilla or printing a document,
>and find yourself spending an hour pulling out your
>hair because you didn't grow up running from the
>command line.
>It's reassuring to know that even the wizards can get
>lost, and get just as frustrated. There might be some
>hope for me yet.

>Well, screw!  Your "Luxury of Ignorance" post really struck a chord with
>I did this myself for my first (and so far only) time last summer.  And
>I made *exactly* the same assumptions coming in to every step of the set
>up (this was admittedly on RH9 and not Fedora, but your points still
>seem to apply back there) as I did, along with the same (what eventually
>turned out to be) mistakes...
>Although it did only take an evening to get it figured out, just a
>little bit more clarity on what the vocabulary and semantics of the
>entities in the CUPS printing universe really meant, both in the written
>docs and in the parts that had UI, would have made this the five minute
>job that it should have been...  And one soluble with only the online
>help of the tools involved or their manuals, rather than going to Google
>and playing "Find the last jackass who has this exact problem and
>pattern match..."

>this is your most significant peice since a) Cathedral
>and b) Discovering Python. It is THE central issue for
>Linux adoption.  I hope you can persuade the masses -
>the Linux Masses, that is, to DO SOMETHING ABOUT IT.

>http://www.catb.org/~esr/writings/cups-horror.html was a WONDERFUL piece.
>I relate to this piece very much because I have periodically tried *nix
>OSs at home (solaris, Linux) and each time discover that for the kidns of
>things your home PC needs to do, it just 'aint worth it'. Despite a degree
>in CS and spending my days at IBM Research, getting simple things done in
>Linux are just too time consuming to bother.

>Thanks.   Every time I mention - and I did so publically on Linux World
>last spring -  that  those who merely want to USE Linux should not be flamed
>for their reluctance to delve into the innards of the config  files ... I
>get flamed for wanting a user friendly setup.  I'm glad to see that it's not
>just me who sees room for improvement.

>Thanks for writing about CUPS, and its soul-stealing, mind-eating,
>designed-by-a-crack-fiend-on-acid gui.
>All this time, I thought it was me.

And, for those of you who thought it was all Red Hat or Fedora'a fault and I was being too hard on the CUPS developers, here's what the lead guy on CUPS had to say:

Michael Sweet:
>Overall, I really liked your piece about the problems you've had with
>CUPS.  It underscores several things in CUPS that we were not aware
>of (you're the first to say them), but also a lot of things that Red
>Hat might want to address in future Fedora releases.

I am informed that an RFE covering the issues I raised has been registered on Red Hat Bugzilla. But quibbles over who is responsible for which piece of the CUPS-configuration mess are, as the letters above reinforce, not merely beside the point but evasions of the actual problem, which is a systemic one that affects thousands of other projects and our entire community.

Up to now, we haven't been willing to do the real work of making our software usable. It doesn't matter whether the the failure of the browsing defaults in CUPS to match the documentation was a CUPS-team screwup or a Fedora screwup — Aunt Tillie doesn't care which direction that finger points, and I don't either. No, the real problem is that whoever changed the default didn't immediately fix the documentation to match it as a matter of spinal reflex.

It also doesn't matter a damn whether the shoddy and unhelpful design of the printer-configuration tool came out of a CUPS brainpan or a Fedora brainpan. What matters is that whoever was responsible never audited the interface for usability with a real user.

The CUPS mess is not a failure of one development team, or of one distribution integrator. In fact, it makes a better example because the CUPS guys and the Fedora guys are both well above the median in both general technical chops, design smarts, and attention to usability. The fact that this mess is an example of our best in action, rather than our worst, just highlights how appallingly low our standards have been.

It's time for that to change. And the really heartening thing I got from the community response is that maybe we're ready for it to change. "I thought it was just me" — many, many of you out there are already dissatisfied with the poor quality of open-source UIs. but each of you has tended to think you were alone. No longer. It's time for each and every one of you out there to become public champions for the luxury of ignorance.

Good UI design is not a result of black magic, it just requires paying attention. Being task-oriented rather than feature-oriented. Recognizing that every time you force a user to learn something, you have fallen down on your job. And that when Aunt Tillie doesn't understand your software, the fault — and the responsibility to fix it — lies not with her but with you.

Let's go back to the queue type selection screen. Remember that one? It looks like this:

        Locally connected
	Networked CUPS (IPP)
	Networked Unix (LPD)
	Networked Windows (SMB)
	Networked Novell (NCP)
	Networked JetDirect

This is a feature-oriented menu, not a task-oriented one. The attitude it exhales is Oooh! Look how cool it is that we support all these printer types! But you know what? Aunt Tillie doesn't care. She doesn't want to know about all the world's printer types, she just wants to make her printer work.

A task-oriented configurator would have logic in it like this:

The technical details of these tests aren't important, and anybody who writes me arguing for a different set will have fixated on the wrong level of the problem. The point is that, unlike a command tool for techies that should give them lots of choices, the goal of a GUI is to present the user with as few decision points as possible. Remember the Macintosh dictum that the user should never have to tell the machine anything that it knows or can deduce for itself.

As few as possible decision points is another way of stating the guiding principle of good UI design for end-users: Allow the user the luxury of ignorance. This does not mean that you can't reward acquired knowledge with more choices and more power; you can and should do that. But the user should also be able to choose to remain ignorant and still get all their basic tasks done. The more thoroughly software developers internalize the truth that real users have better things to do with their time and attention than worship at the shrine of geek technical prowess, the better off everyone will be.

One respondent to my earlier essay observed, perceptively, that I seemed to be trying to raise the reputation value of being good at UI design. That's quite right; I think we should make a conscious effort to raise the standards of quality we demand from each other, so that blunders like the CUPS configuration mess become deeply embarrassing to all involved and are less and less often permitted to persist.

It's been twenty years since the GNU Manifesto and nearly seven since The Cathedral and the Bazaar. I think it's time we stopped congratulating ourselves quite so much on our dedication to freedom and our ability to write technically superior code, and began more often to ask What are we doing to serve the real users? Good UI design, and doing the right thing by Aunt Tillie, ought to be a matter of gut-level pride of craftsmanship.

But if that's too abstract and idealistic for you, think of this. No matter how skilled you are, there are many times when you will be the end user. By learning to demand good UI from others, the time and sanity you save will ultimately be your own.

July 2006 postscript: One Joseph Betz has written a hilarious screed about his adventures with Ubuntu, the current darling of Linux geeks who have some dim clue there's a usability problem. He wrote this before learning of the existence of The Luxury of Ignorance, so it's kind of eerie how parallel they are.

Some resources for learning about good UI design: