Over the last few days I’ve been trying out quite a bit of new software as part of a couple of new projects. This includes the Vienna RSS client, the WordPress blogging engine, and the PHPMyAdmin web-based interface to MySQL. Along the way I’ve noticed the same repeating problem in each of these products, and it’s one that I’ve seen in numerous other products over the years. Here’s a screenshot from Vienna (an otherwise very nice application) that clearly shows the bug:
Do you see it? Apple fixed this problem way back in MacOS 1.0. Not Mac OS X 1.0, mind you, but the original classic Mac OS from 1984. Sadly most programmers–including most Mac programmers–have not yet learned what Raskin/Jobs/Hertzfeld/Atkinson/et al. knew more than 20 years ago:
Do not confirm user actions!
If the user tells the computer to delete a file/news item/database record/etc., then the program should go ahead and delete it. It should not ask the user if they really meant to delete the item. Even Ken Thompson, S.R. Bourne, and Dennis Ritchie knew this rule when they designed the Unix shell! The rm command deletes a file. It does not ask if the user really meant to do it. However, there is a corollary to this rule:
Let the user undo the change if they change their minds.
This is the part Unix forgot. However, the engineers who designed VMS remembered it, and helpfully provided an undelete command 25 years ago. Have we really forgotten that?
Confirmation is annoying and unhelpful. More importantly, it doesn’t work. Users confirm actions so much more often than they deny them that they develop muscle memory for pressing the OK button. It happens quickly and without conscious thought. More than once I’ve done something stupid, and gone right ahead and confirmed it. Sometimes I’ve even realized my mistake as I was pressing the confirmation button anyway. The hand is faster than the mind. Confirmation is not an adequate substitute for Undo.
Few things a user is likely to do on a computer are really undoable, up to and including shutting it down. Confirmation should be reserved only for extreme cases that are truly undoable: securely deleting a file, for example (and I’m not 100% sure about that one). Even then, many tasks that are not undoable are so trivial that they should not be confirmed (burning a CD, printing a page). The default assumption should almost always be that the user knows what they are doing, and told the computer to do what the user wanted done. The computer should do it without further interruption.