March 1, 2004

The luxury of ignorance: A follow-up

Author: Eric S. Raymond

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. 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.

johnrgregg:
>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.

rdparker:
>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
>port?

wmb:
>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.

howe.david.act:
>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.

jecoleman
>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.

matt:
>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.

leue:
>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 :-)

housepig:
>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.

jerryk:
>Well, screw!  Your "Luxury of Ignorance" post really struck a chord with
>me...
>
>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..."

neil:
>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.

Judah:
>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.

abacaxi:
>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.

bill:
>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:

  • If the machine doesn't have an active LAN interface, gray out all
    the "Networked" entries.
  • If the machine has no device connected to the parallel port and
    no USB printers attached, gray out the "Locally connected" entry.
  • If probing the hosts accessible on the LAN (say, with an
    appropriately-crafted Christmas-tree packet) doesn't reveal a Windows
    TCP/IP stack, gray out the SMB entry.

If probing the hosts accessible on the LAN doesn't reveal a
Novell Netware TCP/IP stack, gray out the NCP entry.

If probing the hosts accessible on the LAN doesn't reveal a
Jet-Direct firmware TCP/IP stack, gray out the JetDirect entry.

If all Unix hosts on the LAN have CUPS daemons running, gray out
the LPD entry.If the preceding rules leave just one choice, so inform the user
and go straight to the form for that queue type.If the preceding rules leave no choices, complain and display the
entire menu.

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.

Click Here!