User interface design

High-level goal: Usability

A good user interface (UI) enables users to get their job done efficiently, easily, and enjoyably. User interface design focuses on users and their experience of using the system.

Some of the principles that normally apply to software enginering tasks are less central to user interface design. In particular, we have been focusing on the needs of programmers, but for UI design, we worry about users and how they interact with the system. Our focus is therefore not on making the programmer's job easy, although we of course still care about how to deliver a good user interface in a cost-effective way.

We might think that a good user interface is one that provides the largest feature set possible. Sometimes a large feature set is needed, but often it is not what the user needs.

We now take a look at the problem of UI design and try to elucidate some principles that can guide us when designing and implementing user interfaces.

Know your users. Design to them.

“If there is any one secret of success, it lies in the ability to get the other person’s point of view and see things from that person’s angle as well as from your own” — Henry Ford (actually)

The most critical aspect of designing any interface is to understand how it will be used. That is, you need to understand your users.

Different applications have different kinds of users. Your users may be expected to use the software frequently and therefore to be familiar with it, or they may only use the software occasionally. They may be novices to the application domain, or they may be knowledgeable about it. Users may be expected to have some training in the use of the system, or may be expected to learn how to use it without training. Different kinds of users need different kinds of UI designs.

We might think that the way to design a good user interface is to give users what they say they want. But users are not typically good user interface designers, so treating their ideas as prescriptions tends to bad designs. As the (unfortunately apocryphal) quote often attributed to Henry Ford says, “If I had asked people what they wanted, they would have said faster horses.”

Although we don't want users to dictate the design, at the same time, it is crucial to understand your users and the tasks they want to accomplish. Interviewing potential users is an important early step in design. The focus should be, again, not on asking users what specific features they are looking for, but on understanding the tasks they want to carry out. Then you can design while being conscious of how the user experience you are creating meshes with the intended uses.

A common error when designing user interfaces is to think that the user thinks like you do. But most users are not like you. To combat this form of bias, it is critical to interviews users, and to test designs on users.

Infrequent/new users

For users who use the software too infrequently to remember it, or who are encountering it for the first time, the design emphasis should be on providing a gentle learning curve and strong visual, auditory, or even haptic cues.

Intermittent but knowledgeable users

Here the focus is on making features discoverable, and reducing the memory burden for users. The user has an idea what features are available but may not remember how to access them.

Frequent/power users

For users expected to have a lot of experience with the application, and perhaps also training, the design emphasis should be on efficient interactions.

UI as dialogue

  • App needs to be good conversation partner
  • Work out the conversations
  • Choosing the right interaction paradigm: direct manipulation vs. I/O vs. ?
  • GUI helps by restricting the vocabulary
  • Use modes well
  • Interaction time scales
  • Learning and memory

  • Goal: interface that users can learn to use sufficiently quickly and can remember how to use.
  • Context-sensitive help
  • Exploit spatial memory
  • Exploit motor memory (esp. for power users)

    Visual design

    Useful reading