On January 20, 1992, Air Inter Flight 148 crashed into the Vosges Mountains while approaching Strasbourg Airport in Strasbourg, France. 87 of the 96 crew and passengers on board were killed. So why am I writing about a horrible accident on my programming blog? Because of the cause of the crash.

Many factors came together to cause Air Inter Flight 148 to hit a mountain. However one of the primary causes should be of concern to anyone developing software or designing the UI over top of it. The Airbus A320 had the most advanced cockpit in the world. The majority of the gauges and instruments in front of the pilots in this machine are digital.

When the captain of the aircraft was approaching the runway through thick clouds, he thought he had set a descent angle of a mild 3.3 degrees for a gentle descent above the Vosges Mountains. However, unbeknownst to him the plane was descending at a rate of 3,300 feet per minute, much faster than the descent would have been at 3.3'. The aircraft struck a mountain top and exploded. Air accident investigators noticed the similarities between those two numbers - the pilot's intended descent rate (3.3') and the actual descent rate (3,300 fpm).

As it turns out, the airbus A320 used a single display for two different descent modes - Vertical Speed (VS) Mode and Flight Path Angle (FPA) mode. The display showed FPA as two digits separated by a decimal point, and VS as just two digits (and both had a minus sign where their values were negatives). To the right is an image of the display showing an FPA of -2.8'. I wasn't able to find a picture of the display in VS mode, but you can see from the pictures in this study how similar the two displays are - nearly impossible to tell apart.

This simple design error led the pilot to believe he was in one mode while he was in another. It was not the only factor in the accident, but the crash almost certainly would not have happened had the aircraft's user interface been more clear. This UI design error is one of a well-known class of errors called mode errors.

Despite the fact that anyone who has taken a semester in HCI knows that modes are a Bad Thing, they are still ubiquitous in today's software, and they're still as annoying as ever. Unfortunately it's simply not easy to find alternatives to mode-based interactions sometimes. On the left is an image of Google Chrome in two different modes - regular and 'private browsing' mode. The difference between these modes is very subtle - a small picture with little contrast in an area of the window I never look. But the implications of this mode are not trivial. If you close a tab in 'private browsing' mode, you can't simply ctrl-shift-T to bring it back from the dead. It's gone forever. The browser will not remember your login details, your Amazon shopping cart or your browsing history. Obviously this is the whole point of private browsing, but it's also significant that this mode is barely distinguishable from regular browsing mode unless you have already made the mistake of closing a tab you still wanted.

I faced my own problems with mode errors when building my university capstone project, a round-trip UML modelling tool. To draw a relationship between two classes, the user selects a relationship type from the palette on the right and then draws the relationship. But how should the tool behave after that? Is it better to immediately jump out of "relationship drawing mode" after the user draws the relationship? Or should the tool remain available for further use? Due to strict time and resource constraints we were never able to perform much usability testing, but from what I saw neither of those answers was correct. They were both awkward and they both led to errors frequently. The modal paradigm is simply broken beyond repair, in my humble opinion.

So I'm not exactly the first one to say it, but I guess the moral of the story is avoid modes whenever possible. Oh, and in case you're wondering, the new Airbus A320 cockpit displays show Flight Path Angle as a two-digit number while Vertical Speed is shown with a 4-digit representation. It's not a perfect fix, but it's a heck of a lot better.