---
created_at: '2014-11-11T17:40:03.000Z'
title: The Art of Unix Usability (2004)
url: http://www.catb.org/~esr/writings/taouu/html/
author: diggan
points: 128
story_text: ''
comment_text: 
num_comments: 27
story_id: 
story_title: 
story_url: 
parent_id: 
created_at_i: 1415727603
_tags:
- story
- author_diggan
- story_8591072
objectID: '8591072'

---
[Source](http://www.catb.org/~esr/writings/taouu/html/ "Permalink to The Art of Unix Usability")

# The Art of Unix Usability


| ----- |
| The Art of Unix Usability | 
|   |   |  [Next][1] | 

* * *

# The Art of Unix Usability

### Eric Steven Raymond

  
    `<[esr@thyrsus.com][2]>`  
    

### Rob W. Landley

  
    `<[rob@landley.net][3]>`  
    

Copyright © 2004 Eric S. Raymond

This book and its on-line version are distributed under the terms of the Creative Commons Attribution-NoDerivs 1.0 license, with the additional proviso that the right to publish it on paper for sale or other for-profit use is reserved to Pearson Education, Inc. A reference copy of this license may be found at <http://creativecommons.org/licenses/by-nd/1.0/legalcode>. 

| ----- |
| **Revision History** | 
| Revision 0.1 | April 18 2004 | esr | 
|  Start of book  |  | |

* * *

## Dedication

 

**Table of Contents**

[An Invitation to Usability][1]
[1\. Premises: The Rules of Interface Design][4]
: 

[Usability Metrics][5]
[Usability and the Power Curve][6]
[The Rules of Usability][7]
: 

[Rule of Bliss: Allow your users the luxury of ignorance.][8]
[Rule of Distractions: Allow your users the luxury of inattention.][9]
[Rule of Flow: Allow your users the luxury of attention.][10]
[Rule of Documentation: Documentation is an admission of failure.][11]
[Rule of Least Surprise: In interface design, always do the least surprising thing.][12]
[Rule of Transparency: Every bit of program state that the user has to reason about should be manifest in the interface.][13]
[Rule of Modelessness: The interface's response to user actions should be consistent and never depend on hidden state.][14]
[Rule of Seven: Users can hold at most 7±2 things at once in working storage.][15]
[Rule of Reversibility: Every operation without an undo is a horror story waiting to happen.][16]
[Rule of Confirmation: Every confirmation prompt should be a surprise.][17]
[Rule of Failure: All failures should be lessons in how not to fail.][18]
[Rule of Silence: When a program has nothing surprising to say, it should say nothing.][19]
[Rule of Automation: Never ask the user for any information that you can autodetect, copy, or deduce.][20]
[Rule of Defaults: Choose safe defaults, apply them unobtrusively, and let them be overridden if necessary.][21]
[Rule of Respect: Never mistake keeping things simple for dumbing them down, or vice-versa.][22]
[Rule of Predictability: Predictability is more important than prettiness.][23]
[Rule of Reality: The interface isn't finished till the end-user testing is done.][24]

[Comparison with the Nielsen-Molich Evaluation Method][25]
[Identifying with the User Experience][26]

[2\. History: A Brief History of User Interfaces][27]
: 

[Batch Computing][28]
[Command-Line Interfaces][29]
[What's Old is New Again][30]
[Vector Graphics, Video Games, and NLS/Augment][31]
[The first GUIs][32]
[The X Windowing System][33]
[The Color Convergence][34]
[GUIs in the era of commodity hardware][35]
[The Unix resurgence][36]
[Beyond the WIMP?][37]

[3\. Programming: GUI Construction in the Unix Environment][38]
: 

[Overview][39]
[Programming with the X Server][40]
[Toolkit libraries and bindings][41]
[Components of GUI environments][42]
: 

[Higher-Level Widgets with Consistent Policy][43]
[Window Managers][44]
[An interface to ICCCM, and possibly an object broker][45]
[Sound Support][46]
[Other Services for Application Programming][47]

[Choosing a Desktop][48]
[Interface styles and Programming Models][49]
[The X Programming Model][50]
: 

[Events: the Input Side][51]
[Rendering: the Output Side][52]

[X Programming at the Application Level][53]
[Scripting Languages, Code Generators, and GUI Best Practices][54]

[4\. Wetware: The Human Side of Interfaces][55]
: 

[Novelty, Consciousness, and the Single Locus of Attention][56]
[Real Time Costs][57]
[Hick's Law and Fitts's Law][58]
[Habituation, Expertise, and Undo Operations][59]
[Interfaces and Flow][60]
[Buffering and Human Memory][61]
[Designing around Characters and Stories][62]
: 

[Designing With Personas][63]

[5\. Examples: The Good, the Bad, and the Ugly][64]
: 

[Case study: CUPS configuration][65]
[Case study: xmms, xine, and totem][66]

[6\. Reality: Debugging and Testing User Interface Designs][67]
[A. Design Rule Reference][68]
[B. Bibliography][69]
: 

[Bibliography][70]

**List of Figures**

2.1. [IBM 029 card punch.][71]
2.2. [ASR-33 Teletype.][72]
2.3. [VT100 terminal.][73]
2.4. [The Xerox Alto.][74]
2.5. [Alto running the Executive file browser (c.1974).][75]
2.6. [The Xerox Star (1981).][76]
2.7. [Screen shot from a Star (1981).][77]
2.8. [Kickstart on the Amiga 1000 (1985).][78]
2.9. [Early version of the Macintosh Finder (1985).][79]
2.10. [Windows 1.0 (1985).][80]
2.11. [OpenLook (c.1989).][81]
2.12. [NeXTstep (1988).][82]
2.13. [Windows 3.0 and 3.1 (1992).][83]
2.14. [Windows 95 (1995).][84]
2.15. [Microsoft Bob home screen (1995).][85]
3.1. [Comparing the X stack to a monolithic graphics system.][86]
5.1. [CUPS configuration: the saga begins][87]
5.2. [CUPS configuration: the Queue Name panel][88]
5.3. [CUPS configuration: the Queue Type panel][89]
5.4. [CUPS configuration: the stone wall][90]
5.5. [xmms][91]
5.6. [xine-ui][92]
5.7. [gxine][93]

**List of Tables**

3.1. [Summary of X Toolkits.][94]
4.1. [Timings for various interface actions][95]

* * *

| ----- |
|   |   |  [Next][1] | 
|   |   |  An Invitation to Usability | 

[1]: http://www.catb.org/pr01.html
[2]: mailto:esr%40thyrsus.com
[3]: mailto:rob%40landley.net
[4]: http://www.catb.org/premises.html
[5]: http://www.catb.org/ch01s01.html
[6]: http://www.catb.org/ch01s02.html
[7]: http://www.catb.org/ch01s03.html
[8]: http://www.catb.org/ch01s03.html#rule-bliss
[9]: http://www.catb.org/ch01s03.html#rule-distractions
[10]: http://www.catb.org/ch01s03.html#rule-flow
[11]: http://www.catb.org/ch01s03.html#rule-documentation
[12]: http://www.catb.org/ch01s03.html#rule-surprise
[13]: http://www.catb.org/ch01s03.html#rule-transparency
[14]: http://www.catb.org/ch01s03.html#rule-consistency
[15]: http://www.catb.org/ch01s03.html#rule-seven
[16]: http://www.catb.org/ch01s03.html#rule-reversibility
[17]: http://www.catb.org/ch01s03.html#rule-confirmation
[18]: http://www.catb.org/ch01s03.html#rule-failure
[19]: http://www.catb.org/ch01s03.html#rule-silence
[20]: http://www.catb.org/ch01s03.html#rule-automation
[21]: http://www.catb.org/ch01s03.html#rule-defaults
[22]: http://www.catb.org/ch01s03.html#rule-non-condescension
[23]: http://www.catb.org/ch01s03.html#rule-predictability
[24]: http://www.catb.org/ch01s03.html#rule-reality
[25]: http://www.catb.org/ch01s04.html
[26]: http://www.catb.org/ch01s05.html
[27]: http://www.catb.org/ch02.html
[28]: http://www.catb.org/ch02s01.html
[29]: http://www.catb.org/ch02s02.html
[30]: http://www.catb.org/ch02s03.html
[31]: http://www.catb.org/ch02s04.html
[32]: http://www.catb.org/ch02s05.html
[33]: http://www.catb.org/ch02s06.html
[34]: http://www.catb.org/ch02s07.html
[35]: http://www.catb.org/ch02s08.html
[36]: http://www.catb.org/ch02s09.html
[37]: http://www.catb.org/ch02s10.html
[38]: http://www.catb.org/ch03.html
[39]: http://www.catb.org/ch03s01.html
[40]: http://www.catb.org/ch03s02.html
[41]: http://www.catb.org/ch03s03.html
[42]: http://www.catb.org/ch03s04.html
[43]: http://www.catb.org/ch03s04.html#id3384133
[44]: http://www.catb.org/ch03s04.html#id3384142
[45]: http://www.catb.org/ch03s04.html#id3383071
[46]: http://www.catb.org/ch03s04.html#id3383117
[47]: http://www.catb.org/ch03s04.html#id3383134
[48]: http://www.catb.org/ch03s05.html
[49]: http://www.catb.org/ch03s06.html
[50]: http://www.catb.org/ch03s07.html
[51]: http://www.catb.org/ch03s07.html#id3385104
[52]: http://www.catb.org/ch03s07.html#id3384661
[53]: http://www.catb.org/ch03s08.html
[54]: http://www.catb.org/ch03s09.html
[55]: http://www.catb.org/wetware.html
[56]: http://www.catb.org/ch04s01.html
[57]: http://www.catb.org/ch04s02.html
[58]: http://www.catb.org/ch04s03.html
[59]: http://www.catb.org/ch04s04.html
[60]: http://www.catb.org/ch04s05.html
[61]: http://www.catb.org/ch04s06.html
[62]: http://www.catb.org/ch04s07.html
[63]: http://www.catb.org/ch04s07.html#id3389857
[64]: http://www.catb.org/ch05.html
[65]: http://www.catb.org/ch05s01.html
[66]: http://www.catb.org/ch05s02.html
[67]: http://www.catb.org/ch06.html
[68]: http://www.catb.org/apa.html
[69]: http://www.catb.org/apb.html
[70]: http://www.catb.org/apb.html#id3394919
[71]: http://www.catb.org/ch02s01.html#IBM029
[72]: http://www.catb.org/ch02s02.html#ASR33
[73]: http://www.catb.org/ch02s02.html#VT100
[74]: http://www.catb.org/ch02s05.html#Alto
[75]: http://www.catb.org/ch02s05.html#AltoExecutive
[76]: http://www.catb.org/ch02s05.html#Star
[77]: http://www.catb.org/ch02s05.html#StarScreen
[78]: http://www.catb.org/ch02s05.html#Amiga
[79]: http://www.catb.org/ch02s05.html#MacFinder
[80]: http://www.catb.org/ch02s05.html#Windows1
[81]: http://www.catb.org/ch02s06.html#OpenLook
[82]: http://www.catb.org/ch02s07.html#NeXTstep
[83]: http://www.catb.org/ch02s08.html#Windows3
[84]: http://www.catb.org/ch02s08.html#Windows95
[85]: http://www.catb.org/ch02s08.html#Bob
[86]: http://www.catb.org/ch03s01.html#X_layers
[87]: http://www.catb.org/ch05s01.html#CUPS1
[88]: http://www.catb.org/ch05s01.html#CUPS2
[89]: http://www.catb.org/ch05s01.html#CUPS3
[90]: http://www.catb.org/ch05s01.html#CUPS4
[91]: http://www.catb.org/ch05s02.html#xmms
[92]: http://www.catb.org/ch05s02.html#xine
[93]: http://www.catb.org/ch05s02.html#gxine
[94]: http://www.catb.org/ch03s03.html#x_toolkits
[95]: http://www.catb.org/ch04s02.html#timings

