'User Interface Design for Programmers'

by Joel Spolsky

This is a magnificent book by the iconoclastic Joel Spolsky.

I don't know why it is, but most programmers seem to think that their programs are so good, so fantastic, so special, that they can afford to put massive usability barriers in the way of potential customers and still have a winner on their hands.

It may be that the programmers simply don't know how to make their programs accessible to the masses, though in many cases I suspect it is sheer arrogance on the part of the programmer. This book is about how to make your programs easy for your customers to use - after all, the customers are the ones that pay your wages!

Joel's recipe for user interface design is, at heart, very simple. Make the model you are presenting match the user's mental model of what he or she is doing. If you can succeed in this, your users will not be surprised at what happens when they try to use your program, and things will proceed smoothly. This will allow them to appreciate what a brilliant programmer you are without becoming annoyed at your idiosyncrasies!

To this end Joel offers three key principles you should stick to when designing your user interfaces:

1. Assume that people don't like reading. It's not just that users won't read manuals. Experience and analysis indicates that the more words you put on, for instance, a dialogue box, the less likely people are to read what it says before clicking on a button (any button) to make it go away so they can get back what they were doing before you interrupted them.

For instance an exit confirmation box is much more likely to be read if it says 'Exit now?' than if it says 'Thank you for using our program. We hope you enjoyed the experience, please let us know if you think we can improve it. Are you sure you want to exit?' People have their own work to do and your program is just a tool. Interrupt them while they are working at your peril.

2. Design your interfaces for people who can't use a mouse. You'd be surprised how many people have difficulty with using a mouse. I can tell you, from my own experience while teaching beginners to use a computer, that there is nothing 'natural' about using a mouse. It is a learned skill involving a high degree of motor skills and an ability to make abstract mental connections.

As computing on the move becomes more and more prevalent, even people who use a mouse fluently at home will be navigating your program using devices which are sub-optimal for moving a cursor around. And that doesn't even take in to account people with RSI, visual problems, motor problems and a whole gamut of other issues that can make using a mouse difficult.

3. Design your interfaces so that people don't have to remember things. I'm constantly amazed by the fact that programmers expect their users to remember all sorts of arcane things while sitting in front of a machine one of which's primary functions is to remember things accurately!

Don't ask your user to remember the name they gave the picture of little Johnny playing with rubber duck in the bath when he was five. Show them a set of thumbnails of the pictures in the directory, and let them select by clicking the one they want - then the fact that they named the file 'j_dk_bth_93.jpg' won't be a problem.

Don't ask them to remember remember arcane options (Linux aficionados take note). In fact, don't ask them to make any choices that don't strictly relate to the task for which they are using the program. They're really not interested in how the program runs, they are interested in getting the job done. If they want to search for a file, they just want a report on where the file is, not to have to make decisions about whether the program should be optimised for space or speed (Microsoft take note). Don't lumber the user with decisions that the programmer should have made when writing the program!

The book is easy to read, and well presented (i.e. it has a good user interface!) with plenty of examples of good and bad interfaces and an explanation of why they are good or bad. Giving the user a good interface isn't hard - but it does require some thought and a bit of extra effort. And, of course, a dose of humility. So get to it!

Highly recommended - should be on the bookshelf of everyone who has anything to do with user interfaces.

Alan Lenton
30 July 2006

'User Interface Design for Programmers' by Joel Spolsky
1-893115-94-1
Apress 144pp @ £21.50

Return to the reviews page

Back to the Phlogiston Blue top page


If you have any questions or comments about the articles on my web site, click here to send me email.