One recent afternoon, I got drafted into reviewing and editing a bunch of error messages for a product. It was supposed to be a quick one hour work. But these assignments never really turn out be an hour’s job.
All I had was an Excel file with around 20 messages that had the current error message and a description when/how the error message occurs. Feeling it would be a good exercise to spend the afternoon, I made my way towards the product development team. As we started the exercise, I realised that the team had no idea about error messages. They just got in touch with me because I was the technical writer. They had obviously thought that I was there just to correct the grammar and punctuation. I sat down and went through each scenario where the error message occurs and did what was required.
One typical user activity is to create a configuration file into the database by creating one or by importing an existing configuration. The dev team wanted me to look into the errors that occur during the import process. During that process, I identified issues with the sequence of error messages appearing because the inputs were not validated atomically. Rather, they were validated as a batch and you got a bucketful of error messages that should have been caught earlier. Being modal in nature, the user had no choice but to click the Ok or Cancel button to move on, which was too late. And these error messages really weren’t serving any purpose other than the developer’s need to say that the user made a error.
I explained that a good error message consists of three parts: what went wrong (a reason), why it was wrong (the problem), and what to do next (a call for action). Messages that follow this approach help the user move on with their flow with minimal interruptions. I also explained it was better to anticipate possible error scenarios and prevent them from happening rather than display an error message afterwards. As Alan Cooper mentions as a design principle in About Face 3, ‘Error message boxes stop the proceedings with idiocy and should be avoided.’ I suggested some solutions to avoid the error happening in the first place by performing validations then and there, rather than display them as a bunch of dialog boxes that force the user to click a button to get the error message out of the way.
Next up was the language used in the error message, which was the original reason why I was working with them in the first place. A question arose if the word ‘please’ had to be included in the error message like “Please enter an IP address” or should it just read “Enter an IP address”. I felt it was better to go without the word ‘please’ because it felt too patronizing and it did not add any value to the sentence. Finally I had reworded it to read as “The IP address cannot be blank. Enter a valid IP address. The IP address must be of the form of xxx.xxx.xxx.xxx”.
What really irked me was that the developers had no clue to user interface guidelines. They were using a Windows application, but they were not following the Windows User Experience Guidelines, but again even Microsoft doesn’t follow it at times.

Image via Flickr user:twindx
Chip in with your thoughts on error messages and designing for contingencies…

2 Comments
the term ‘please’ should be avoided because it has cultural implications: how will you translate it to other languages? It is a gratuitous word that does not add value to the ‘call to action’ (‘Enter IP address’). Also, when a customer is faced with the error message, which are modal windows quite often, he/she wants to get rid of it quickly. Reminds of a line from ‘As good as it gets’ You are describing the water when I am drowning.
People think adding ‘please’ will please the user and make the application usable