Truth, Justice, and the American way. TRUTH: Helping to correct people's misconceptions about history, science, and the state of the world. JUSTICE: Meant in the biblical sense. Fair treatment of other people, rational laws, and assisting the disadvantaged. THE AMERICAN WAY: A classless society where everybody has an opportunity to meet their potential and for economic advancement, regardless of race, ancestry, religion, gender, or sexual orientation.

Friday, April 24, 2015

How to design a good User Interface

Just like when improving a relationship, there are general rules to follow for good User Experience (UX) design. These have not changed since I started teaching them in the 1980's. They are roughly in order of importance. A lot of the following can be found in Ben Shneiderman's books (search an on-line bookstore for "designing the user interface" and related books).

1) The customer is always right. (Many of the comments contradict this, but reality supports it.) When a user input does not match what any of the expected inputs, then the User Interface (UI) should make reasonable suggestions and provide an Introduction and Detailed help (usually as a moderated wiki). If the program was not prepared for a user response, it is the developer's fault, not the user's fault. Search engine spelling suggestions are one step toward this.
1a) Provide prompt about how to get started/continue if the user makes no input for a fairly long time (such as 60 seconds). Never assume that the user has abandoned the product.

2) The UX must always remain friendly. It is not the user's fault that a step was skipped (such as saving a file in the example in the main article) or that an extra step was added. The file saving example should have been worded more like "Would you like to save this file (name) now?".

3) Make it hard to cause a catastrophe. Deleted files and partial edits should be stored for later in a background (invisible to normal users) version control system (with self cleaning when there is a lack of space).

4) Show results as the user enters changes or commands. Provide for almost infinite ability go back (undo). Only request confirmation of a change when the change cannot be undone.

5) Treat users as individuals. Provide for multiple user experience levels (at least, beginner, experienced, and advanced). Experience levels include experience with the technology, experience with the application area, and experience with the product.
5a) When a user first uses any product, begin with reasonable defaults and assume that the user needs prompts to get started. Each prompt should have a "skip this next time" option.
5b) All commands should be available via an easy to use menu system (Microsoft still hasn't gotten this right). This is required for both new users and those who have disabilities. When a keyboard is available, always make pointing available from the keyboard.
5c) As the user becomes more experienced, suggestion prompts could automatically be suppressed.
5d) Provide keyboard shortcuts, movement triggered commands, and advanced menus (Advanced commands and Options) for more advanced users.

6) Minimize modality. Very few commands (like reset this device to factory settings and delete all user data) are "system modal": it does not make sense to do anything else until the user replies to this prompt. Only commands that cannot be backed-out should have a modal confirmation prompt. The rest of the time, users should be able to ignore the prompts and just keep working.

7) Use direct entry whenever possible. The spread sheet and the fill-able form are the most successful software interface styles.

8) Use breadcrumbs. Use a small part of the screen to provide a way to move between active tasks. Remember that the top level active task is selecting a task (the home screen). An analogue of this is (unless the user requests it) never blank the screen completely or turn off the device, just because the user hasn't made an entry.

9) Separate UI testing from UX testing. Test the user interface by both scripted and random inputs from an automatic testing system. Test the user experience by observing (and getting feedback from) users of various experience levels.

About Me

My photo
Canoga Park, California, United States
Software Engineer with Ph.D. in Computer Science. I have a deep background in the sciences and in computer-human interaction. I was a college professor for 11 years, followed by over a decade of work in industry.