SIGNAL · 06 7 min read
Human factors ยท Mode errors

Your computer knows something you don't

Mode errors are a design defect no bug tracker will ever record, because every instance looks like user error.

Everyone has done some version of this.

You type your password into a chat window and send it to a colleague. You write a sentence in Arabic and it arrives as Latin nonsense because the layout never switched. You press Enter on a command and only as it executes do you register which terminal you were looking at.

The usual reaction is embarrassment. You were careless. You should have checked.

That reaction is wrong, and it has been known to be wrong for more than forty years.

The failure has a name

Donald Norman called it a mode error, and the definition is precise: the system is in one state, the person believes it is in another, and nothing corrected the gap before they acted. The error is not the keystroke. The error is the invisible distance between the machine's state and the operator's model of it.

Aviation learned this at a cost it could not absorb. Cockpit automation introduced modes, and modes introduced a new class of accident where a competent crew flew a functioning aircraft into terrain because they believed the autopilot was doing something other than what it was doing. The Strasbourg crash in 1992 is the case most often cited, where investigators examined whether the crew set a descent angle in a mode that read the same number as a rate of descent. Whatever the final determination in any single accident, the pattern was clear enough that the industry rebuilt its interfaces around it. Mode annunciation became mandatory. Displays were redesigned so the active mode is unmissable rather than merely available. Cockpit training added mode awareness as a named discipline.

Aviation treated mode confusion as a property of the interface, not a property of the pilot. That single decision is why the accident rate fell.

Software went the other way.

Why the application layer cannot fix this

There is a structural reason mode errors persist in everyday computing, and it is worth stating plainly, because it explains why decades of better app design have not touched the problem.

The state that causes mode errors does not live in your application. Caps Lock, the active keyboard layout, which window has focus, whether a modifier key is stuck down: these are properties of the system, not of the document you are editing. Your word processor cannot see them. Your browser cannot see them. Your terminal cannot see them. Every application sits above the layer where the problem actually lives, which makes every application architecturally incapable of guarding against it.

The operating system can see all of it. It has decided that a small indicator light somewhere on the keyboard, and a two letter abbreviation in a corner of the taskbar, constitute a sufficient answer.

They do not. An indicator answers the question you already thought to ask. Mode errors are, by definition, the moments you did not think to ask.

Three things that actually help

If you take the aviation lesson seriously, the response is not to try harder. It is to change what the machine does. Three moves cover most of it.

Make the state visible where the attention already is. Not in a corner. Not on a keyboard most people never look at. If a person is typing, the state that governs typing belongs near the text, and it belongs there only when it is unusual enough to matter. Persistent indicators become wallpaper within a week.

Make the error reversible after the fact. This is the underrated one. A great many mode errors are perfectly recoverable if the system kept enough information to undo them, and are catastrophic if it did not. Text typed under the wrong keyboard layout is a good example, because the keystrokes were correct and only the interpretation was wrong. The information needed to fix it existed at the moment of the error. Almost every system throws that information away instantly, and then the user retypes the paragraph.

Make destructive actions cost something, in proportion to the damage. Not everything. This is where most attempts fail, because a confirmation dialog in front of every action trains people to dismiss confirmation dialogs. The prompt has to be rare enough to still carry information when it appears, which means it has to be scoped by context. The same keystroke is trivial in a text editor and irreversible in a production terminal. A guard that cannot tell those apart is not a safety feature, it is a tax.

The part that is uncomfortable

There is a reason the industry prefers the blame explanation, and it is not laziness.

Blaming the operator is free. Redesigning the state model is expensive, and it requires admitting that a shipped product has a defect that no bug tracker will ever record, because every individual instance looks like user error. Nobody files a ticket saying the software let them do the wrong thing. They file nothing. They retype the paragraph, or restore from backup, or explain to a colleague that they did not mean to send that.

The cost is real and it is entirely invisible in the metrics. It shows up as minutes, thousands of times a day, across everyone. It shows up occasionally as something much worse than minutes.

Aviation only moved when the cost became impossible to hide. Most software will never have that forcing function, which means the change has to come from people deciding the problem is worth solving before anything forces them to.

What this asks of the people who build things

The next time a user does something obviously wrong, the useful question is not why they were not paying attention. It is what the system knew at that moment that it declined to tell them.

Most of the time the answer is: everything. The machine knew the layout was wrong. It knew Caps Lock was on. It knew the window had changed focus a hundred milliseconds before the typing started. It knew the terminal was connected to production. It held every piece of information required to prevent the error, and it said nothing, because nobody decided that was its job.

That is a design decision. It can be decided differently.

All essays Reply to this