Never use a warning when you mean undo (2007)
alistapart.com
alistapart.com
This is my problem with SaaS as an end-user.
Imagine one day you leave home to drive to work. You have a coffee in one hand and a briefcase in the other. You have done this a million times before, getting from the front door to your driver's seat, and you can do it blindfolded. So you grab your brief case with your coffee hand and watch so you don't drop either. You extend your hand to open your car door and ...
OUCH!
You stubbed your fingers.
Surprised, you look down and to your horror you see that your car door handle isn't there. You look around and notice that 6 inches away is something that kind of sort of looks like something resembling a car door handle, but it's different and wasn't there before. You try it, and to your relief it opens the door.
You take a seat, turn on the ignition and suddenly your am/fm radio turns on and a strange voice shouts "Welcome to Your Car Version 2.0! Try Our All New Shifter Feature!"
And that's when you look down and realize ... your damned shifter has moved to.
You never asked for this, you are now late for work and are going to take shit from your boss, your life is objectively worse off for the change and you can't, for the life of you, see how any of this is "better."
But that describes pretty much all software in current year.
The changing layout of buttons in Office - yuck - I just want to do it, I don't want to think about where it is.
Fixefox seems to randomly change whether it expands bookmark menus to left or right - yuck - if it's the same bookmark/selection as a moment ago, I expect it to be in the same place!
And while email isn't too bad about this, since it's expected to be asynchronous, there are other contexts where we expect things to be immediate and not suffer an undo-delay. Here's one: broadcasting your webcam or sharing your screen on a video call. In these cases, I am happy that the software warns me ahead of time that my camera is about to be shared, rather than either 1) sharing immediately with an option to undo (oops, now all my co-workers realize that I'm butt-ass naked), or 2) sharing immediately but delaying the feed by 30 seconds to give me time to undo. It's clear in this case that an up-front warning is preferable.
So.. what I went with is a simple "hold-to-activate" button. If you clicked it without activation a few times, a little box would pop up and tell you what to do. Once you held the button down, it would display a counter, and once it reached zero, then it would take the action. We added a short cut where if you held control and alt it would bypass the counter entirely.
At the same time it would add the previous system state to an undo list where you could revert that or any number of previous actions to return to a prior state.
Once we implemented this errors fell off considerably, and errors impacting broadcast almost entirely disappeared and most of our users were very happy with the way it operated.
Any salient state change of important data ought to be reversible in the short term. I'm especially fond of Gmail's Undo Send feature (I think it's a Labs plugin, it's not default iirc). For whatever reason, the brain often finds things it forgot when you actually execute the action.
Related, being able to trace what actions were taken is also super valuable. Often this is baked in to the UI (e.g. outbox/sent items, undo menu).
Inevitably, this results in a lot of state accumulation, thus disk usage, but this can be handled by manual garbage collection (which is the 2nd step in data destruction, so this can't be undone, so use a warning here) or tunable cache/LRU settings.
Hence the scam another comment mentioned, as most people don't know this.
Call up your bank and ask how to get the suggestion to the right people. I made a suggestion to my bank, and they implemented it in their app, so you never know.
Example 1: In better times, dialogs would store the information on ok and discard any changes on cancel. Modern implementations store on change (especially modern web guis). People close dialog windows through the window close button, with no distinction whether this is ok or cancel.
Example 2: Auto-save. Some office document opens in the browser. One wrong swipe with the pointing device, swoosh, change created and logged in the eternal history. No warning "do you want to modify this document?", and no way to turn back.
Bring back an environment where it is possible to lose something, which means one where it is possible to not modify something unintentionally.
I suspect that a simple UI modification which could reduce occurrences of the situation, without being too obtrustive would be to make it a checkbox:
[ ] I agree with unsaved data being discarded [ OK ]
The OK button is ignored unless the box is checked. This is exactly like a Terms-of-Service agreement workflow.Another idea would be to make the UI sensitive to the amount of unsaved content. The software should have an idea of whether the unsaved content represents 57 edit operations, or just two. Or maybe in terms of number of objects or bytes involved or some other specific measure.
If the amount of unsaved material seems significant, then have the checkbox workflow. Otherwise just the [OK] without the checkbox.
This problem was solved in MacOS X Lion 11 years ago. The solution is to get rid of this dialog entirely and to simply auto-save documents by default when quitting and to re-open all documents when the application is started again (persistent state). This feature applies even to new documents which have never been explicitly saved by the user nor even given a name. Only when you attempt to close (or explicitly save) an unnamed document does it ask you to choose a name or delete the document (with an explicit delete button marked in red text).
This also has the added benefit that when you use the save command (command-s) you're actually saving a snapshot of your document which you can recover later with a time-machine like history viewer interface. Otherwise, all other changes to your document since the last snapshot are auto-saved.
Keep the “do you want to save first?” prompts for when closing the file.
Of course for some file types this could use a lot of storage, so it won't be as applicable everywhere.
Again, it's about judgement for the circumstances. We're in agreement here, but your original comment read as if you were taking the discussion here as being about absolutes.
This won't harm unsuspecting users if you need to explicitly request privacy, by for instance opening an incognito window, if you request privacy it is valid to assume you know the potential consequences.
----
[1] Though you shouldn't rely on it not being, never assume there are no idiots around not thinking straight when implementing private functions and things that might interact with them! Trust but verify. Or just verify.
I presume the default action stashes the data somewhere, in which case it's basically the trash bin pattern or tempfile pattern (stored durably, not /tmp), and we can safely go back to a plain dialog like:
You have unsaved changes.
Do you wish to save as a new file,
or discard?
(Unsaved changes can be recovered
for 1 month before permanent deletion)It’s not very difficult to implement the client side code for this, and I think users would appreciate it.
However delaying a “delete” would cause some complications with the local data, where you might want to optimistically render the UI such that the delete went through. That shouldn’t be difficult in any modern state management library though.
with as much time, effort, use, and praise that these get, I would expect every state change / collection to have a corresponding input and action buffer, effectively making all user actions CTRL+Z-able.
It's a bit weird, but I've gotten used to it.
It obviously won't work very well if it's entirely handled by the client, since your battery might die, you might go out of range, etc.
Chrome has responded that it has yet to have been detected and weaponized yet.
Imagine a small game where you must press the [Enter] key rapidly.
Would you, with a few similar boxes in game to detract, notice the Open_Folder_DialogBox for a few frames? Probably not in time to not hit the [Enter] key, giving the webpage's javascript full permissions to everything in the default, selected Folder...which is the C: drive.
This can be a mild irritation in FF. In other contexts it could be very irritating. The problem with blocking user action for the user's safety is that most users don't appreciate it until they do something wrong (by which point I've found the option to turn the protection off!)
A clever bypass would be to have the [Enter] button be pressed when reacting to something on screen, such as an incoming guitar strum or a dinosaur hopping over a cactus, then throw the OpenFileDialog before the goal/expected [Enter] keypress.
The window manager I use doesn't even have the concept of applications taking focus. When they try the window border simply turns red instead. It's great. Now if only they'd have some way to make newly opened windows not entirely clobber your window layout it'd be perfect.
Are you sure you want to delete this draft? [(Yes) Delete Draft] [Cancel (Deletion)]
Are you sure you would like to Exit? [(Yes) Exit ($appname)] [No, Continue]
()*optional extra specificity for clarity
With more sensitive commands with possibly dubious parameters, prompting the user to re-enter the dubious argument can help default mindless clicks or the occasional brain fog or mistype; even translates well onto command line:
>>Are you sure you want to delete 12 folders, totalling 23,401 files? Please confirm the number of files to proceed: >>23401
Not accepting the normal ways of stopping execution, when it's a destructive operation, and not explicitly warning the user that you're going to proceed even on the normal "stop" keystrokes... that's a really bad combination.
`Hit any key to continue or any other key to quit.`
"Wait, which one's the any key?"
"Better question: which one's the other key?"
"Continue" as an answer to "Would you like to exit?" can be interpreted as continuing with the exit or with using the software. And there are plenty of similar examples.
>Would you like to exit?
>[Yes, Exit $appname] [No, continue working]
If one word is a constraint, phrase the question better, or have the alternative be more specific too:
>Are you sure you would like to Exit?
>[Exit] [Cancel]
>You have unsaved changes. Would you like to save the changes before exiting?
>[Save Changes and Exit] [ Exit without Saving] [Cancel]
For example, quitting a game: "Are you sure (Y/N)? (Unsaved progress may be lost)"
Don't tell me that. Tell me whether unsaved progress will be lost and what it consists of.
Likewise, when I'm typing a description in JIRA and want to follow a link "Are you sure you want to navigate away (Y/N)? (Unsaved changes may be lost)"
Wait--do I have unsaved changes? If so, what are they? That's what I should be basing my decision on--what specifically will happen if I click Yea or Nay? Not a general exhortation to be careful because waves hands something bad might happen: YOU get to figure out if it will or not!
I think the overall idea is that smaller dialog in prompt boxes are somehow better to avoid "warning/agree fatigue" but ultimately it worsens the overall clarity of the function and purpose.
But it would still be so much more useful to see "Do you want to navigate away? (580 characters of Description and two other fields will be lost)". Or "Do you want to quit? (0:28 mins of play will be lost)" versus just quitting when nothing will be lost because the auto-save is up to date.
Just warning that something may or may not be destructive and leaving it up to me to guess how things work feels lazy to me, as a user. As a developer, I understand it entirely!
And it would help avoid warning fatigue because the warning only appears when something actually is going to be lost--and then you can decide whether to keep it or not.
For games, you could perhaps even omit the warning entirely if you just saved manually.
"Are you sure you want to quit? Boo will miss you..."
> Are you sure you would like to Exit? [(Yes) Exit ($appname)] [No, Continue]
I see you are starting to discover the GNOME Human Interface Guidelines. Yes/No and OK/Cancel are discouraged, opting for meaningful button names instead.
Do you want to quit?
> No. I'm still working!
> Yes. I'm done for now.
Especially in a mobile interface. The user is physically touching "I'm done for now"; it's a visceral interface; real hard to mess up unless some motility accident happens (like the phone slips)
I meant within the confinements of the reality presented.
I try to reduce the abstractions without breaking conventions so much that it would increase confusion
Do you want to quit? > No. I'm still working! > Yes. I'm done for now.
...until some twunt reverses the order of the answers. And others (about 35%) follow that, as a standard practise.
> It causes us to concentrate on the unhabitual-task at hand and not on whether we want to be throwing away our work
And in fact, I learned this the hard way. One time, while in a rush to meet up with some friends, I tried to sign out of a mobile app. I went to settings and scanned for the logout button, saw some red text, and clicked it. There was a warning, which I quickly clicked through. Then there was a dialog asking me to enter my password to confirm. I thought that was strange, but just then I got a notification that my friends were outside, and I quickly tapped the input box, auto-filled from my password manager, and headed out the door. Later on, I learned that I deleted my account.
I was very lucky that this happened to be an account for a service that I self host and backup regularly. I restored from backup and got my account back. But I shudder to think what would happen if it were my Google or iCloud account.
Honestly I don't know what the app developers could have done differently here. Maybe not put the sign out button next to the delete account button. But it goes to show that impossible-to-ignore warnings are totally possible to ignore
Never Use a Warning When you Mean Undo - https://news.ycombinator.com/item?id=2150361 - Jan 2011 (83 comments)
Never Use a Warning When You Mean Undo - https://news.ycombinator.com/item?id=34746 - July 2007 (10 comments)
I don't know how it works. The pull down is small and vanishes after some seconds. And then? I am still to late and feel even more sorry for myself (double fail)
On my systems I have undo of the file system under control. snapshots. I'm using it since years. Saved me twice! I recommend this all the time ... (I know it's not for everybody)
Setting the timeout lower doesn't seem to help much.
Undo systems can be annoying to create after the fact, but if you use a variation on the command pattern you can often get them "for free" (along with a lot of other useful capabilities). I wish that were more common.
What a Dilbert!
"Okay, provide rotating backups, at least!" I would have said.
Saving is also a destructive operation that can lose data, which brings us back to undo. If you open a document, make an unwanted edit and save, and you have no undo, you can only recover the prior state from the editor backup.
Without automated multiple backups, the user would have to do "save as" regularly, choosing different filenames, rather than just "save".
Multiple backups are easier to
It's important to note that Aza Raskin is the son of Jef Raskin, who wrote a lot about interfaces (including a book called The Humane Interface), and worked on the original Macintosh at Apple, on the interface.
Aza Raskin has continued that work at Mozilla and elsewhere and I'm glad he has. Though I miss the original Songza interface https://signalvnoise.com/posts/1117-fresh-ui-ideas-from-song...
I like this approach, Not sure about accessibility however.
I’m also unsure about an article that claims “to one of the most basic and important mantras of interface design: Never use a warning when you mean undo.” When in the first examples it ignores one of the most basic and important mantras of interface design: use full sentences in your action buttons, not just “Okay”.