Design Wisdom

We mentioned before that users aren't always available to give us feedback. We also talked about doing design rationales and using them as collective wisdom where we can accumulate our design knowledge over time. In fact, the HCI research community and industry practitioners have been doing this for decades. If you remember from the first lecture, we said that one of the goals of HCI is:

To understand factors that determine how people interact with technology

And another goal is:

To develop general guidelines to enable building usable systems.

Over the years, HCI researchers and practitioners have developed principles of usability that tries to explain how people prefer to interact with technology so that we can better understand general user behaviour. As a result, they have developed design guidelines that provide suggestions and directions for us to build better systems. Overall, there has been multiple sets of such principles and guidelines proposed. We will discuss 3 most well-known ones and show examples of each.

Principles of Usability

First, we will review principles of usability because they were developed to help explain how people prefer to interact with technology. These principles will help us understand user behaviour so that we can design technology that conforms with user expectations. Overall, there are three major usability principles: learnability, flexibility, and robustness. Each of these will be described in more details below.

1. Learnability

How easy is the software to learn, even for novice users? The factors that determine how easy is it for a new user to learn to interact with the software correctly include: predictability, synthesizability, familiarity, generalizability, and consistency.

Software can be made more predictable if we can show the user what the system is doing and making system operations more transparent. Operation visibility will also improve the user's ability to synthesize and assess what happened in the past actions that led to the system to behave in a certain way. Designing a system so to make use of the familiar concepts in the knowledge a user already has from using other technologies or interacting with the environment's surroundings. If there is new information presented to the user, it is better that the new information is easily extended and generalized to new situations so that the user does not have to learn new rules each time. Lastly, content and layouts should be presented as consistently as possible with similar objects or in similar situations.

2. Flexibility

How flexible is the software in accommodating the user in achieving a goal via different ways? The different aspects that determine a system's flexibility includes: dialogue initiative, task migratability, multitasking, substitutivity, and customizability.

In addition to letting the user specify what needs to be done and how it should be carried out, the system should also be able to initiate certain actions that help achieve the user's goal. Related to that, the responsibility to execute tasks can move between the user or the system. Also, the system should support the user doing multiple actions/goals at a time. To support flexibility, the system recognize that multiple inputs and outputs can be used interchangeably. Moreover, the user should be able to manually customize the software or have the system be able to automatically adapt to how the user wants to use it.

3. Robustness

How well does the software adapt to different scenarios, so that it can support the user appropriately even in unanticipated situations? The factors that determine a system's robustness include: observability, recoverability, responsiveness, and task conformance.

Related to operation visibility, a system needs to allow the user to observe its internal state so the user knows what the system is doing. When something goes wrong with the software, the user should be able to take corrective action once an error has been recognized. The system needs to be stable and be responsive to the user under different circumstances. Finally, the system should support all the tasks a user wants to do in a sufficient manner.