Home » Should error messages apologize?

Should error messages apologize?


The reason I believe it is important to have an apologetic tone is to ensure you are communicating to the user that, though a mistake has been made and he is interacting with a machine or application in this case, you still respect his action and are humanizing the mistake.

To quote this article from UXMatters:

“You’re going to display your error message to a person, so write it
in the tone of voice you would use if you were telling the error
message to the person directly.”

I also recommend looking at this excellent article, Are You Saying “No” When You Could Be Saying “Yes” in Your Web Forms?:

Error messages seem like an unimportant and incredibly boring part of
crafting a user experience. But the tonality of error messages can
swing the experience around from an almost certain abandonment to a

The article emphasizes that error messages should carry a positive tone and hence an apologetic response can help users quickly recover and not immediately become defensive about a mistake they might have made.

Writing error messages that carry a positive tone isn’t rocket
science. Just follow a few simple rules:

  1. First, get rid of tech lingo such as “incompatible.” Most users won’t know what this means. Speak to them in their own language and
    not the language of your developers. For example, “incompatible”
    translates to “does not work together” in plain English.

  2. Don’t use negative words

  3. Clearly identify the error so the user knows what to correct.

  4. Give the user a hint of how the problem can be solved.

  5. Put the blame on yourself, not on the user.

I also recommend looking at
The Effect of Apologetic Error Messages and Mood States on Computer Users’ Self-appraisal of Performance for a study which analyzed the impact of using apologetic error messages on user mood states and how human-like apologetic tones are effective in computer interfaces. To quote an extract from the article

In HHI, apologies are generally used to express regret (Leech, 1983;
Schlenker andDarby, 1981) or to alleviate individuals’ anger caused
from their disapproval of others’ action.In other words, apologies
mitigate frustration and anger when attempted interactions
fail.Similarly, Nielsen (1998) argues that error messages responding
to the computer user’s action should include a simple apologetic
statement when the reason for the error is the limitation of the
computer interface to perform the intended task. Tzeng (2006)
conducted a study investigating users’ perceptions of online systems
containing three different error messages,each of which includes
different politeness strategies. In the study, firstly users’
politeness orientations were elicited and then participants were asked
to interact with websites including pre-determined problems. When
users encountered problems, the system provided certain error messages
representing one positive politeness strategy (i.e. joke), one
negative politeness strategy (i.e. a simple apology), and a mechanical
message for the error (i.e. the page is temporarily unavailable). The
findings of the study showed that users who deal with social events
with polite expressions preferred to receive apologetic messages
significantly more than mechanical or joke messages, and they
preferred apologetic messages significantly more than those messages
that are less oriented to polite expressions.

The article also calls out how an apologetic tone as opposed to a negative tone impacts the perception that users of them selves and how a positive apologetic perception can help in enhancing positive performance

De Laere, Lundgren, and Howe(1998) compared human-like versus
machine-like interaction styles of computer interfaces.They did not
observe a significant difference between the different styles in terms
of users’self-appraisals. The findings of the study also demonstrated
that negative feedback affects the self-perceptions of the
participants differently than positive feedback.

Tzeng (2004) examined whether apologetic feedback affects users’
performance perception in the computerized environment. This study
suggested that users may not expect computers to be polite, but
apologetic statements made the subjects feel better about their
interactions with the program.

The research paper Computer Apology: The Effect of the Apologetic Feedback on Users in Computerized Environment also calls out why apologetic negative feedback ties into user experience from a social aspect

The use of apologetic statements with an error message contributes
the human-computer interaction. If we consider that the main aim of
the user centered design is to create an environment for users in
which they feel themselves comfortable, use of apologetic statements
in the user interface design become a very important issue. Moreover,
in human-human interaction, one of the more important, may be the
most, issues is to behave in a respectful manner. In most of the
societies when a person does not behave in a respectful manner or
makes a mistake towards the other person, apologizing is the
traditional and the most effective way in order to overcome the
problem. Similarly, this study shows that most of the subjects
thought that apologetic feedbacks do not seem awkward to them and
95% of them receiving apologetic feedback felt that apologetic
feedback seemed sensitive to them. Here, it seems that subjects find
it interesting to confront with respectful behavior such as
apologizing when they encounter an error caused by computers’
inability as if they encounter a problem in human interaction. The
findings of this study indicate that representing the affective state
of a person in the interface design is very important in
human-computer interaction because people are more sympathetic to see
emotional aspects in the interface such as, sensitivity, respect, and
feeling of humanity. Therefore, these results might be used as
evidence for the claim that computers’ offering apologetic statements
to the users can substantiate the idea of real user centered design.

On the flip side Microsoft recommends using sorry or an apologetic tone only when a serious error has occurred:

Use the word “sorry” only in error messages that result in serious
problems for the user (for example, data loss or inability to use the
computer). Don’t apologize if the issue occurred during the normal
functioning of the program (for example, if the user needs to wait for
a network connection to be found).

While Mervin’s answer is excellent, I would go beyond saying it is “acceptable” or “preferred”. I would say you “must” use an apologetic tone for one very good reason: if the user is making a mistake, it is because the user does not understand the rules or logic of the system. That is not the fault of the user! It is responsibility of the system to accurately explain the logic of the system to users. A user error then is a mismatch between what the user thinks should be done, and what the system allows to be done.

While one would never be this wordy, if we spell it all out, your apologetic error message is: “I’m sorry that the user interface of this program, your past experience with it, or experience with other similar programs, have led you to believe that you could take such an action at this time, but you can’t because ….

Specific to the case mentioned: the user thought that access might be available. You are apologizing for the misunderstanding that the user had, because the system had not previously communicated that the permission was not available.

What does it mean to say that an error might be the user’s fault? Users don’t go and do things that they know will not work (that would just waste their own time). The only reason they do something wrong is because they don’t know it won’t work. If the user does not know something, isn’t it really the fault of the system for not making this transparent? Regardless of how obvious a programmer might think it is, the vast majority of the time a mistake is the fault of the system, so write your error messages in accordance, and you will have happier users.

Taking a step back: Why was this feature made available (visible) to the user in the first place?

If it is a feature not available to a specific user (or user class), hide it.

If it is a premium feature that you’d like to upsell – do so.

History export is a great way to backup your data, but is available on premium accounts only. Get in touch with your administrator and ask them to upgrade your account to Premium.

Regarding downtime or errors (when the responsibility falls solely on the application), I feel tone is secondary to knowing that:

The issue has been logged and that a warm body somewhere knows you are having issues.

There is someone available for me to contact.

I can try again.

Something went terribly horribly wrong!
We’ve logged the error.
Please try again or contact help@application.com and we’ll get back to you as soon as possible.

Related Solutions

Calculate the sum with minimum usage of numbers

Here's a hint: 23 : 11 + 11+ 1 ( 3 magic numbers) 120: 110+ 10 (2 magic numbers) The highest digit in the target number is the answer, since you need exactly k magic numbers (all having 1 in the relevant position) in order for the sum to contain the digit k. So...

Why not drop the “auto” keyword? [duplicate]

Your proposal would be rejected on the basis of backward compatibility alone. But let's say for the sake of argument that the standards committee like your idea. You don't take into account the numerous ways you can initialize a variable widget w; // (a) widget...

Recursive to iterative using a systematic method [closed]

So, to restate the question. We have a function f, in our case fac. def fac(n): if n==0: return 1 else: return n*fac(n-1) It is implemented recursively. We want to implement a function facOpt that does the same thing but iteratively. fac is written almost in...

How can I match values in one file to ranges from another?

if the data file sizes are not huge, there is a simpler way $ join input1 input2 | awk '$5<$4 && $3<$5 {print $2, $5-$3+1}' B100002 32 B100043 15 B123465 3 This Perl code seems to solve your problem It is a common idiom: to load the entire...

Javascript difference between “=” and “===” [duplicate]

You need to use == or === for equality checking. = is the assignment operator. You can read about assignment operators here on MDN. As a quick reference as you are learning JS: = assignment operator == equal to === equal value and equal type != not equal !==...

Compiler complains about misplaced else [closed]

Your compiler complains about an misplaced else because, well, there is an else without a preceding if: // ... for (j=1; j<n-i; j++) { if(a[j]<=a[j+1]) { // ... } // END OF IF } // END OF FOR else { continue; } // ... The else in your code does not follow...

Bootstrap – custom alerts with progress bar

/* !important are just used to overide the bootstrap css in the snippet */ .alertContainer { border-radius: 0 !important; border-width: 0 !important; padding: 0 !important; height: auto !important; position: absolute !important; bottom: 15px !important; left:...

How to Garbage Collect an external Javascript load?

Yes, s.onload = null is useful and will garbage collect! As of 2019, it is not possible to explicitly or programmatically trigger garbage collection in JavaScript. That means it collects when it wants. Although there is cases where setting to null may do a GC...

Math programming with python

At first, what you are looking for is the modulo operator and the function math.floor() Modulo from wikipedia: In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus). for example: 12%12=0...

Android slide over letters to create a word [closed]

Here some advice you can use: First for each cell you can create an object that represents the state of that cell: class Cell { char mChar; int row,column; boolean isSelected; } then you can create a 2D array of your cells Cell[][] mTable = ... For views you...

Sum two integers in Java

You reused the x and y variable names (hence the variable x is already defined in method main error), and forgot to assign the ints read from the Scanner to the x and y variables. Besides, there's no need to create two Scanner objects. public static void...

Extend three classes that implements an interface in Java

Using this simplified implementation of the library, using method() instead of M(): interface IFC { void method(); } class A implements IFC { public void method() { System.out.println("method in A"); }; } As akuzminykh mentions in their comment You'd write a...

How to set the stream content in PHPExcel? [closed]

Okey, First thing first PHPExcel_Worksheet_MemoryDrawing() can't solve your problem if you insist to use stream content and pass that to your worksheet your PDF will not render your image. But you can use `PHPExcel_Worksheet_Drawing()' if you want to render...

How to remove all files from a directory?

Linux does not use extensions. It is up to the creator of the file to decide whether the name should have an extension. Linux looks at the first few bytes to figure out what kind of file it is dealing with. To remove all non-hidden files* in a directory use: rm...

Hacker used picture upload to get PHP code into my site

Client side validation The validation code you have provided is in JavaScript. That suggests it is code that you use to do the validation on the client. Rule number one of securing webapps is to never trust the client. The client is under the full control of...