Thursday, January 11, 2007

No More Confirmation, Pt. 1

One major mistake that programmers make when they design user interfaces is to force users to understand the internal workings of their programs. Instead of the programmer adjusting her user interface to the user’s thought processes, she forces the user to adjust to hers. Furthermore, she’ll usually see nothing wrong with that approach. “That’s how my program works,” she’ll say, puzzled that anyone would even ask the question of why her user interface works the way it does.

Here’s an example of what I mean. Open Windows Notepad, or any other type of editor program, and type in any random text. Now select “File – Exit” from the main menu, or click on the X box in the upper right of the title bar. You see the following message box:

What exactly is this box asking us? It seems to be saying that some file changed, but I haven’t seen any file anywhere. What the hell does “save the changes” mean?

The answer is that Notepad usually edits documents, (called “files” by computer geeks) which live on your computer’s hard drive. When you open a document, Notepad copies it from the disk into the computer’s memory. As you add or remove text by typing, the program changes the contents of this memory copy. (In this example, we didn’t open an existing document, but the program created a new one in memory, giving it the name ‘Untitled’.) When you’re finished working on the document, the program has to write the memory copy back to the disk, called “saving the file”. Otherwise the work that you’ve done will disappear, and you’ll get very angry.

The programmer wrote the program this way (copy the document from disk to memory, make changes on the memory copy, write it back to disk) because that was easiest for her. And it’s not a bad way to write a program. Reading or writing characters from the disk (spinning iron platters with moveable parts) is roughly a thousand times slower than doing it in memory (electrons moving at the speed of light), so this probably IS the best way for this simple program to work internally.

But the programmer’s user interface exposes these workings directly. How can that be bad? She’s forcing you to understand that she’s written the program this way. You shouldn’t have to know or care about her program’s internal workings to use it successfully, as you shouldn’t have to know or care (and you probably don't, either of them) whether your car’s engine uses fuel-injection or a carburetor in order to drive it.

You don’t normally think in the way that this program works. Most people think of editing a computer document as analogous to the paper-and-pencil (remember those?) method. You make marks with the pencil and there they are on the paper. You erase the ones you don’t want. If you don’t want any of them, you crumple up the paper and throw it away. The work that you’ve done is permanent, unless you expend energy to get rid of it. But that’s not the choice that Notepad gives you. Every single new user of computers gets caught on this – selecting No, in which case Notepad discards the work that you’ve done – hopefully not too much of it. Eventually, the user learns to think like a computer program, or more precisely, like the programmer who wrote this mess.

The question and its answer would be much clearer if the message box asked “Throw away everything you’ve just done?” It’s exactly the same question, just asked from the user’s point of view. But the programmer is thinking only of her program’s operation, writing to the disk, and asks you whether to do that. She’s requiring you to wear her shoes; she hasn’t even tried to put herself in yours. If she had, she’d ask the question a different way. She then might see the ridiculousness of asking it at all, and design a better user interface, even if the underlying program worked the same way.

That’s one major reason that programs are hard to use and you feel dumb. You’re being forced to think like a programmer, even though you’re not and don’t want to be. You shouldn’t have to. You don’t have to think like a mechanic to drive a car, you don’t have to think like a doctor to take an aspirin, and you don’t have to think like a butcher to grill a hamburger. You’re paying your hard-earned money for this product. It’s the programmer’s job to adjust to you, not the other way around.

Quicken, the personal finance program, does a better job . Their designers understand that the user’s mental model is a checkbook, and their screen looks like a checkbook register:

It feels familiar and comfortable (well, relatively) to a new user and doesn't hamper an experienced user. The check that you’re currently working on is shown in a different color. You enter the check’s details and press Enter. The check moves up, changes color to look like the rest of them, and a new empty check appears in the work area. If you have sound turned on, you hear a “ka-ching” cash register type of sound. The program doesn’t ask you whether or not to save the check. The act of pressing Enter tells the program that you want to keep that information. If you later change your mind, and want to change the data on a check or delete one entirely, you click on that check in the register and type in the new information. When does Quicken read its data from the disk to memory, and when does it write it back again? I don’t know and I don’t care. And I don’t want to and neither do you. The program’s user interface follows your mental model, instead of forcing you to learn and deal with the internal design choices of its programmers.

Most programs ought to work this way -- save data automatically unless the user says otherwise -- because users save their data much more often than they throw it away. That's one good example of what I mean by Just Working.


hendrixski said...

We are just dealing with a similar design issue in a program right now. Do we make the user click "save" or just assume that their changes are the equivalent of tweaking a knob and leaving it alone. "save can be an intimidating word for a user.

DHofmann said...

> “Throw away everything you’ve just done?”

And use descriptive verbs on the message box's buttons, like "Save" (or "Don't Discard") and "Discard".

Jacques said...

Your criticism in the terminology used by some programs is no doubt warranted. I agree that "document" is a more natural term than "file". A file conjures up the idea of a physical file folder perhaps with several documents in it.

However your use of Notepad as an example is weak. Notepad has been around since Windows 3.1 and appears to have remained pretty much unchanged (it was a simple ASCII text editor and remains one, so no changes were required). I'd be very surprise if most users still use it. Most no doubt use a full fledged word processor, or Wordpad at minimum. I do know that some programmers use it for coding because it generates plain ASCII text. But to them the terminology would not cause any issues. Wordpad uses a more user friendly terminology.

Other programs such as Open Office, and I believe MS Office (don't have it on this computer so can't check) do use the term document instead of file.

I do find "Do you want to save this document?" to be an easily understood question. Haven't you ever scratched some notes on a piece of paper and then have your spouse ask you "Is this any good? Do you want to save this or should I throw it in the garbage?" or similar words? To ask the user “Throw away everything you’ve just done?” as you suggest is more confusing. I open a document I previously created. I hit the space bar by mistake while viewing it. I close out and get the prompt “Throw away everything you’ve just done?”. What does that suggest to you? Disregard the changes made, or trash the entire document? What user would click yes to that question unless they wanted to trash the document completely (yet in this scenario that is not what would happen so the end result would not be what the user expected). Whereas "Do you want to save the changes to insert document name here?" is much more intuitive.

Your comparison with Quicken is flawed. In that example, you've already configured Quicken for your bookkeeping needs (i.e. created the accounts & such) so the program knows where to save that. But for a new document (word process, spreadsheet, presentation, whatever), until you provide a name for the document, and a folder where to save it, the application cannot automatically save it for you. If it did, it would have to automatically assign it a document name and a folder where to save it. That would not serve the needs of the user at all as a user would not know where to go find that document next (unless the application advised the user where it was being saved - but then the name wouldn't necessarily be something meaningful to the user so would still have to be prompted - it can't be avoided for new documents). In a paper world you write up a document on a piece of paper. Your office assistant will ask you where to file it. If the office assistant simply filed it without asking you, you would have no way of knowing where to go get it later. And your office assistant would have no way of knowing where it should be filed without asking you ("This correspondence between Company A and Company B, should it be filed in the file folder for Company A, or Company B?" "Neither. File it under Mr. SMITH - the employee that I'm representing.").

In a case of an existing document being edited, then your argument would have more merit. The application knows the name of the document so could automatically save (and can through setting up automatic saving every x minutes but that doesn't apply to when you are closing the document) instead of prompting you on exit.

But then I've seen your argument about the fact that a user may make some inadvertent changes to a document (hit the space bar, print the document which in some cases may change the metadata in the document) where the user would not want to save those changes. But by prompting the user, he/she not knowing better will save potentially overwritting something good (well that's the crux of one of your arguments I've read on this issue). Personally I disagree with your argument on this as well. Better to err on the side of caution and prompt the user when the application detects that something has changed.

The program cannot guess if that space you added was accidental or intentional. You may have noticed that you omitted a space somewhere in the document and opened it to add that. Or you may have simply opened it to read it and inadvertently pressed the space bar prompting you to save the changes on exit. It is impossible for the program to know if the change was accidental or intentional. So the only safe way to deal with it is to advise the user that it detected a change and prompt the user accordingly.

You can't argue it both ways without creating a lose/lose situation for the application developer.

I did a programming diploma back in the late 80's. Even then they preached to us to use terms familiar to the end user, and layout the information on the screen in the same fashion/order as the user's paper documents (to make it more intuitive/easier to migrate to the electronic verrsion). So this is nothing new. And many programs have improved in this area.

One example that comes to mind is that we used to have files and directories. Now the terminology is documents and folders.

I don't disagree with your argument that some applications need to improve their terminology. But I find you take things in a context to support your argument, with complete disregard to the remainder of the points that do not support your argument.

Al MacDiarmid said...

I use Adobe Photoshop Elements and whether I change the picture I am editing or not it asks if I want to save the changes. I don't know if it has changed something on its own, or whether my saving the file to someplace else has triggered the message or what. I am afraid to save it if I am not the one who has actually done something so I am forced in my paranoia to say NO. It might help if it said what the changes were, but it does not. Bad programming!

Jacques said...

I have to ask you Mr. Platt. Your criticism is with the terminology used when exiting an application. Your negative example is of Notpad, an application developed some 15 or so years ago in the DOS days. If things are as bad as you say, why wouldn't you quote examples from mainstream applications of the past 2-3 years? You can't hold a 15 year old program to today's standards.

Why? Because today's applications don't provide as good an example to support your argument. Which means your argument isn't as deserving as you try to make it.

The point is valid (proper terminology). The criticism is not.

David S Platt said...

I use Notepad as an example because it's an application that all Windows users will have and probably be familiar with. The problem is by no means specific to that application; indeed, almost all programs in use today which operate on documents, for example, the Microsoft Office suite, use the same design -- asking the user at the end whether or not to save changes. The nomenclature in the box is not my primary complaint. My primary complaint is that this design pattern forces the user to understand the program's internal operation, and that this is bad UX design, dated design, at-least-30-years-that-I-can-name-and-probably-more design. Instead, the program should adapt itself to the user's mental model, as do Quicken and MS Money, at least with respect to saving or the lack thereof. You can also see this better design pattern in Microsoft's One Note program, where saving is automatic. The user has to explicitly undo if he wants to throw away his work. Since he most often wants to keep it, this is a big win. The edge case does not complicate the common case. Users love this new pattern even though it differs from earlier ones. More programs should follow this pattern instead of the old one.

Jacques said...

Well take Al's posting here. His concern is that he does not want to save any changes to a document which isn't his. If your suggestion applied, any inadvertent changes a person may make to another person's document would be saved (because by then the program would have learned to save seeing often that is what a user would want to do).

It has happened on occasion where I've opened a document, made changes and ended up screwing things up. So I exit without saving and re-open the document and start back. Most times I want to save so the program would have learned to save all the time, thus causing this messed up document to be saved.

If I make an inadvertent change to a document (mine or someone else's) and am prompted with "Do you want to save the changes?" on exit, I simply say no, knowing I don't want to make any changes to the document. I want it to remain as it was before I opened it. So I don't save anything I may have done.

When it comes to word processor documents, I can't see how it can be any other way but in order to ensure that the action taken is what the user wants (not what the program thinks the user wants).

I would agree with an option where you could configure to always save on exit without prompting. Either through preferences, or also with a check box on exit to remember your choice. But to do something like this automatically through guessing what I want - no.

You can't compare a word processing application to an accounting application.

And in the case of Notepad, I agree that many users are likely aware of it. But other than programmers using it to code, or sysadmins using it to view log files, how many users actually use it? I suspect most use Word or some other similar word processing application typically. Those who do use it are likely savvy enough to deal with the dated terminology consistent with the age of this application.

Doesn't matter what programmers would do, they'd never satisfy everybody. These applications serve a very large market with divers needs and skill levels. The approach they currently use errs on the side of caution where needed by not making certain assumptions.

And your suggestion of "Do you want to throw away everything you've done?" or some such dialog box, well that would cause most users to display great paranoia. Especially when viewing someone else's document as in Al's case and making an inadvertent change and then facing that prompt. "Now what? If I say yes, will I lose John's document?" Whereas "Do you want to save the changes?" is easier to answer for those not as knowledgeable in computers. "Changes? What changes? Whatever they are, no. I don't want to change John's document."

ciotog said...

I agree completely with everything you've said.
And furthermore, when I'm driving, why do I have to turn that big wheel in front of me? The car should just go where I want. I'm not a mechanic!
Also there's a little sticker on my windshield that says I have to keep checking the odometer and take it in for an oil change when it reaches a certain number. Now does the odometer count up, or down? I shouldn't have to know these things!
Oh yeah, I was being sarcastic. Do you know what sarcasm is, even though you're not a linguist? ;)

Jacques said...
This comment has been removed by the author.
Jacques said...

(had to correct a typo so removed and re-posted)


Although we are both on the same side of this argument, I have to admit your posting does nothing to further it. People can be on two different sides of an argument and still do so respectfully. Otherwise we are likely to do more harm than good to our position. There is a fine line between being blunt in stating your position, and just being rude or nasty.

Although I disagree with much of Mr. Platt's positions on these issues, some of his points do have some merit. We must be able to recognize and acknowledge these merits in the other side of the argument. Otherwise we descend into political behaviour where no matter what the other side says or does, it's not good enough - just because our side didn't think of it, suggest it, or implement it.

Please do continue to debate this issue if you wish. But in doing so strive to bring valid supporting arguments to your points and acknowledge opposing points where you feel it warrants it. And do so in the spirit of a good debate so all can benefit from it.

David S Platt said...

Jacques, thank you for your comments about respectful disagreement, and for the civil tone of your writings.

As to the remarks about "that big wheel in front of me" in the car, are you saying that most drivers would not welcome a functional self-driving car? A few would not, but almost everyone drives a car for the purpose of accomplishing some other task, rather than for the sheer pleasure of driving. They would therefore welcome the opportunity to use the time they now spend driving for something else, like watching a movie. It doesn't Just Work yet, but it will some day, and it'll be great. And very few car owners would be sorry if their car could report its own performance to the inspection station so that they didn't have to drive there and wait in line and get a ticket if they forgot. They'd be much happier if it Just Worked.

Very few car owners lament the passing of the hand crank starter. They are happy that starting the car now Just Works, because it didn't in your great grandfather's day. They are happy that they don't have to adjust the spark timing as they drive, as did owners of the classic Ford Model T, because that part of the driving experience now Just Works. Roughly 7 out of 8 car owners in the US choose automatic transmissions. They would rather have their gear shifting Just Work, even though it costs more.

Software should Just Work, and removing the necessity to save documents is just one more milestone on that journey.

Jacques said...

You are welcome Mr. Platt. And good response. I have to agree, I would love to have a car like that so I could read, work on a laptop, listen to podcasts, or grab an extra 20-30 minutes of rest during the commute.

Public transportation is the answer to that one until cars reach that level of sofistication.

Edward said...

As a developer, I am enjoying your insights into how programs should 'just work'. It has been my opinion for some time that software has yet to live up to its potential for accessibility and ease of use. Your 'just works' philosophy is an encouraging ideal to aim for in every design.

johankoopmans said...
This comment has been removed by the author.
johankoopmans said...

I would love to see unified interfaces with a sharp resemblance in the way they look and what they do. In your way of thinking every transportation utility should have bicycle pedals to 'gas'. But when I'm using a segway, a bicycle or a car they have 3 different ways to gas. And to be honest: I think Segway did a good job because once you know the system it's more intuitive than a pedal.

Lately i've been building an application with the looks of a washing machine, with the same yellow knobs and main programs. It 'washes data' and within the 'sewing machine' you can knot the data to a report. With this resemblance it's easier to start with the application.

As you know from HID
the data-flow caused by organisational procedures factually determines the input fields at each screen . So a checkbook layout 'from a data point' of view might not be correct depending on the organisation which uses it. In the long term the professional user gets annoyed with the checkbook layout because it has too much fields or misses the fields to end ones activity.

But unified interface thinking (with standard meanings for the knobs) and offering users the ability to build their own interface attached to their personal profile (with nowadays technology that's possible) could be the best medicine to end the pain. In that way software has far more democratic capabilities than a car or typewriter ;-) It even explains the succes of the spreadsheet because of its interface democracy.

Even with self-interfacing you'll still need to 'learn' how to use a tool, and most people want to use it as long as they can have their benefits by using it

John Hermanson said...

Appears that posting comments to Blogger doesn't 'Just Work' because my first attempt didn't.

I must agree with Jacques, asking 'Throw away everything you've just done' requires a negative response ('NO') to perform a positive action (keeping what you've just done) and would really confuse your average user.

Much better to ask something like 'I see that you have made changes to this document, would you like to keep them?'. But even then there would still be the issue of whether or not to overwrite the existing document, merge the two (and which conflicting changes to keep) or save as a completely new document. And don't forget about keeping old versions just in case!

By the way, how does a visually challenged user know to click the handicapped icon to to get the word verification read to them?

David Platt said...

The computer should just know when I want it to turn off. The power button is difficult to reach. I have to move my fat-harvard ass in order to push it.