User-friendly solutions

This post is about how to build user-friendly solutions, while having the lowest effort.
It is explained with a software development example. But you may apply it in every sector, when trying to be user friendly.

Common way

Recently my trainee made a graphical interface, containing some textboxes and other user inputs. After filling these, there is a button to submit the data. He had the idea, to disable the button, as long as not everything is valid or complete.
This is basically not the dumpest behavior of a software. But neither it is the smartest.
Why do I think this is not the smartest way?
There are several reasons (which are also common mistakes, you should try to avoid):

First you have a complex behavior in the manner, that you always need to check the existence of data inside an input and also its validity and you need to enable and disable the button dependent on it. The chance that this will end in bugs therefore increases.

Second it is not user-friendly, as the user does not exactly know, when and why the button is enabled. This could either be solved by applying a red border around the textbox or having a tooltip on the button, when you place the mouse on it. But in the end, it means more work.

Third – and for me the most important thing – you force the user to work with the software in a defined order or way, where it is completely unnecessary. (This is a very big topic so in the near future I will write a post on that)

Bubble boys

This was about what would or wouldn’t be a smart solution in the given example. But why this mistakes could happen in the first place?

Often developers imagine the workflow, the user will follow, when working with the application. So they build the behavior of the software based on this assumption.
But they easily forget, that there might be different ways or that the user might just not know or remember the workflow the developer designed.

user-friendly workflows

Staying user-friendly

How find a user-friendly solution? My methods always leads to simplification, so it does this time.

Start building the application without any validation, nice or fancy things, nothing that helps the user etc. Just a clean and empty application (that in practice never would be accepted).
In our example just an interface that crashes, when pressing the button without the appropriate data.

Then think, what the application absolutely requires, to work properly. And when I say that, I mean what the application requires, not what the developer thinks could be necessary in future or what the salesman says would help the customer.
Lets imagine you have a textbox with a description of whatever. Why would you deny to fill in any chinese letters, when there is no functionality that uses this field? The only reason why you would validate it, is if the text has a maximum size within the database.

Now add this functionality exactly where it is required. That means, when you finish the current process step.
Now you may say “when I have an interface to enter data and somewhere else I start a process, I need to go back to correct it, which is not user-friendly at all.”
That is correct. But the mission of your first interface was to collect data and to save it to the database. Not to start a job based on that data. So when I say “add the functionality where it is required” I mean exactly that point.
The job of this interface is to save valid and correct data and it is therfore required to validate it.
Pressing the button means finishing the process step. But before that point, it doen’t matter if there are any letters in the phone number textbox.

Leave a Reply

Your email address will not be published. Required fields are marked *