Usability – Description Errors

A description error is when the intended action is done on the wrong object. This can occur when two actions are very similar. The classic example of a description error is pouring orange juice in a bowl of  cereal in the morning. The user has performed all of the correct actions. They opened the fridge, removed the container from the fridge, and pour the liquid into their bowl. However, all of these actions have been performed on the wrong object, the orange juice in this case.

How to help users avoid description errors:

  • If icons are used, make sure the icons are easily distinguished from each other.
  • Use location to help distinguish right and wrong choices - Don’t put these choices right next to each other.
  • Give the user lots of feedback.
  • Provide an undo feature for when this error occurs

Why are User Interfaces difficult to design and develop?

  • You are NOT the user: You know how the application is built, so you know more than the user does.  Most of development process and structure is centered around communicating with other developers. The documentation we write is for other programmers to understand our code. We write specifications to keep programmers on the same page.  However, few programmers actually ARE the users they are developing for, so it’s hard to imagine and forget what you already know.
  • Usability problems often go undetected. Microsoft has ways for users to send “error reports” to them whenever an application crashes, but how many companies actually have reports on usability problems…let alone how many users actually acknowledge that there is a usability problem with their system and not with their fall for the user interface failing.
  • Users often do not know what they want, which can be difficult to predict by the programmers.
  • People are diverse and have unique backgrounds and life experiences. So designing an interface to fit across a group of diverse people can be challenging.
  • Poor user interfaces are easy to spot, whereas great user interfaces often can go unnoticed.
  • There are many aspects to creating a solid system besides usability: functionality, security, cost, performance etc. Trying to find a balance for the different aspects to the system can be difficult for the already time crunched developer.

Why is Usability important?

  • Although people are told “not judge a book by it’s cover”, many users will judge software by it’s user interface. Software is remembered by the user interface. If the interace works WITH the user to accomplish their goals, the user can place more  trust in the software.
  • If an application’s user interface is too difficult for the user, they often will find a better way and abandon the un-usable interface.
  • An usable interface can save time, money, and even lives. A user’s time is valuable. If a user interface is costing an employee in a company a large amount of time, this cost will add up to a large hidden cost for the company.  As technology becomes more prevalent in across many fields, the cost of a mistake can be very expensive. If a medical device is so difficult to use, this may even cost lives as seen in the Therac -25 Accidents.

5 reasons why programming for mobile devices is hard

5. The huge range of capabilities of the device – basic phone calls, text messages,  to email, web surfing, watching tv channels and even GPS navigation ….and those actually used

4. Testing is a pain- either on the device or using simulators

3. The huge range of  display output sizes and types

2. The what seems like millions of user input styles : pens, styluses, keypads, keyboards, touch screens, voice commands

1. The always evolving and growing of the insanely diverse set of users – people with different technical backgrounds  across different ages, cultures, and environments ….

Usability – Talking about Consistency

One great tool you can leverage to improve the usability of your system is consistency.

  • Consistency with yourself (internal)
    • Consistent Language- For example, if a user is trying to complete an order through a website, the website should pick “Buy”, “Purchase”, or “Complete Order,” not a mixture of different words. This is similar in a cell phone website when referring to a mobile phone, is it a mobile phone, mobile, cell phone, cell, or just phone?
    • Consistent Layout – The navigation in websites should be consistent, such as Home Page link, or the search bar should be in one place as the user flows through the website. Another example is the tabbed pane widget:

    If a tab is selected that is not on the front row, the tabs reorganize themselves to bring the tab to the front row.

While the tabs bring the active tab to the front, the orientation changes drastically which can result in disorientation for the user.

  • Consistency with Representation - In different players on the internet, after pausing the player, a pause symbol will appear on the screen to show the state that the video is paused…while in other video players a play button will appear to show the action that will happen by selecting this button. An Switching tabs, hard to find
  • Consistency with the environment (external) - Keep in mind the platform your application is developed for. Follow the standards for that platform, such as having a “File” menu with an “Exit” option on the windows platform.
  • Consistency with previous experience – Make sure your consistent with the users experience whether in applications or in real life. If the user presses a button with a right facing arrow, make sure the button indicates a “play” action to mimic the playing that occurs in real life. An example of a violation of being consistent with the experience is using words such as “Okay” to mean canceling an action and “Cancel ” meaning to continue on with the action as seen here.

If a user already has some familiarity to your system because of consistency, your interface is easier to learn!

Usability – Thinking about User Tasks

A good start to analyzing the flow of your program is to think about the tasks that your users are trying to accomplish with your application.

  • Identify the individual tasks the user is trying to solve – This is WHAT the user is trying to do, not HOW the user is doing this. You can start off by thinking about the overall goal of the system and then by breaking it up into smaller subtasks.
  • Are there any preconditions or dependencies that need to be figured out to make this task possible? -This can be information that the user needs to supply, or it can also be other tasks (recursion!) that need to be done before this one can be accomplished. One example is that a user must first create an account before they can use their account to log into a website.
  • A couple of other things to know about tasks: How often is this task being done? What are the errors that can happen? Or how can it go wrong? Are there any constraints on the task?   And so on..