Creating useful software – improve UX

When making software, one will automatically want to believe in the result being useful. Why wouldn't it be? After all, the software product is built to solve a task, so it should be useful for the task, right? This is not necessarily the case. Nielsen defines usefulness of software by two key terms: utility and usability. In this post, I am going to walk you through these concepts. 🚶🏼


Utility is a simple thing to define. A software product is utile if it has the needed functionality and information content (see missing information content). From the point of view of utility, we don't care about usability. A pair of left-handed scissors is just as utile for a right-handed person as it is for a left-handed individual – it provides the needed cutting functionality.

Utility might sound a bit too obvious. Of course a computer program has the needed functionality to complete the task it was built for, you might think. But this is not necessarily the case. If part of the task has to be completed outside of the program itself, only because it doesn't support direct interaction, we are facing an inutile program for the task we are trying to solve. If you are doing accounting for example, and find yourself using a calculator because the accounting program doesn't support foreign tax percentages, you are definitely using an inutile program. 😮


Usability is defined by five different aspects: efficiency, learnability, memorability, errors and satisfaction.


Efficiency means less mechanical and cognitive work. In practice, this means as few unnecessary steps in completing the task as possible. But also as few things the user has to memorize as possible. If, for example, Google required you to specify whether you are searching the web, images, news or videos every time you wanted to google something, we would be dealing with an inefficient user interface.


This aspect is all about coming up with the correct path to complete a given task. If the icons in the user interface look confusing or words of similar meaning are used for different tasks, we are dealing with a learnability issue. For example, in older versions of Ubuntu, there used to be two menu items administration and system preferences. The contents of these two items were rather similar and so was their semantic meaning. This made it extra difficult to find the needed settings.🤔


Once the user has finally figured out the correct path to complete his task, is it easy for him to remember the path in the future? The old Ubuntu menu not only had a learnability issue, but also a memorability issue. Once you have found where the correct setting is, you might easily forget how you got there. And the next time it's needed, you will have to search for it again. You might be able to remember the correct path to complete the task if you need it frequently, but a month-long break from the system will already make you forget where the setting was located. 🤷🏼‍♂️


How easy is it to make an error with the user interface? Some user interfaces have preselected settings. These might be a great source of error, especially if the preselection is not justified. In a web search engine, it might be justified that you are by default searching for text. But in a registration form, it's not justified that male or female is a preselected gender. It doesn't make any sense to preselect something half of the users have alter anyways. And if they miss it, they will have made an error.

One part is an interface that lures users into making errors. Errors happen regardless of the user interface. It's also vital to provide a way of recovering from an error. The user should always be given a chance to fix a possible mistake. Finnish ATMs are notoriously bad at this. If you enter the wrong PIN, you will only get an error message just before the ATM would issue your money. What is worse, is that it will spit your card out and the only way of recovering from the error is to start all over again. 😕


All the above mentioned aspects contribute to the overall satisfaction of the user. A satisfied user has successfully completed an interaction with the system in such a way that it hasn't required too much of extra effort. 😊


These are the building blocks of a useful software product. I hope you have enjoyed reading this and maybe learned something new too. ☺️