For a site about usability, I was going to gripe about the tiny font, low contrast, and unresponsive layout until I saw that. It does look more suitable at 1024x768.
Rip John C. Dvorak, writer of the Abort/Retry/Fail column from PC Magazine.
On a different note, never underestimate the value of a modal dialog that gives you a chance to retry an IO operation that failed. Loose USB cables and network shares over Wifi can make those happen a lot more often.
Keeping one of the disks from the pile was peak bff/sibling rivalry antics. It's like keeping out one of the pieces of the puzzle so nobody can finish it but you.
What always got me at the time was retry is understandable, but what the heck is the difference between abort and fail? I don't want to complain too much it was probably in the manual, but as a young teen during my DOS days (there are manuals? read?) The distinction was lost on me.
My understanding today is that one of them(fail?) gives the application a chance to do something clever. Did any application actually handle this gracefully? Something like, Disk 11/15 error(fail) Please put in recovery parity disk.
One of the most influential books I ever read was About Face by Alan Cooper. What he said about this bad modal dialogue is that you should simply not ask the user, and let them undo later.
This was heresy at the time, but turned out to be the native user flow for iOS later on. And now it's common in web apps.
I once heard Cooper talk at a conference. He said that he was indeed the father of Visual Basic, in the sense that he had a little participation at the inception but most of the work was done by someone else. I think you can draw a line between that kind of self deprecation and the ego level required to look through someone else's eyes and design good UI.
In general, I hate undo. I'd almost always rather confirm/decline. Undo is ephemeral, if I even notice it, and is a recovery from an accidental action (that I may or may not even know would have happened depending on the UI). Declining is a deliberate action.
Sydney Padua's awesome, mostly true, steampunk graphic novel "The Thrilling Adventures of Lovelace and Babbage" jokes about the error messages that might have produced by the difference engine. One example occurs when a character tries to stop a sequence that may or may not destroy a precious manuscript:
Annulation lever activated!
Do you wish to continue?
Engage STOP lever to continue. Engage CONTINUE lever to stop.
“Maybe later” and variants annoyed me to no end until I realized that the implication is that you’re not making an indelible choice. As with anything, it can be overused, but I personally enjoy not having to think about whether I can change my mind later.
Well the same update (Lion?) ruined saving overall. Apple has insisted that apps should never have a "save as." You can hold opt to do it anyway, but it silently overwrites the original too. Wtf bro.
You could make the case that the user could just do a different flow of duplicating the file first, but this is entirely different from how both Mac and Windows have worked for decades, and even the Mac apps by third parties don't do it this way.
I think you’re technically correct but that “delete” gets the right thought across to someone who doesn’t understand how files work. You’re deleting whatever you have in front of you.
I agree about Save As…
Maybe that could have just been updated to “Save a Copy” or something like that. I don’t really understand why it’s a hidden option.
On the subject of being slightly too pedantic for my own good, using "disk" in a conversation sort of worries me, It does not really matter, everyone knows what you are talking about, but it is not often an actual disk anymore. Is "storage" fine as a replacement? as in, memory vs storage.
I could go full nerd and call it "non-volatile storage" but nobody wants that.
… but, a power power user would know that it was transparently saved every several keystrokes, even while named Untitled and ostensibly unsaved, ready for immediate transparent recovery on relaunch, after an app or system crash -- so they might again be okay with it.
Aspirin had (though this is increasingly dated) unique cultural currency as a headache medicine for quite a while after it stopped being the overwhelmingly dominant first-line OTC remedy.
Titles tend to be terse, HN—by the guidelines—prefers original titles, Kleppman isn’t (AFAIK) an HN user, and the piece is ~20 years old—when a lot more of the audience wouldn't have missed the reference.
A program I occasionally use has a "Don't close" button in that dialog. Of course I'm more used to "Don't save", so I often hit it and then am surprised when the program stays open.
We added a clause in our coding standard to make all booleans reference the positive frame of reference only. This happened after I got fed up with dealing with too many if !(!not_has_missing_field) operators. Just.... make everything positive: if (is_field_present)
Agree. And I've been flagging double negatives in PRs for years (e.g. `not undead`). It makes me feel like the Ned Flanders of programmers.
But RuboCop detects `!!something`, and I actually like that idiom, because I prefer to convert into true boolean types before passing them to a method, since it makes the intention clear in the code.
I try to keep to that, but sometimes the flag is turning on a negative feature, disabling that which is the default and will remain so for compatibility reasons.
Sometimes it is worth the effort of going through and changing the logic elsewhere to keep the boolean positive, sometimes that would be too much effort to retest at the time.
Another option I like, when I have a config object interpreting things so I'm reading doing `if (config.IsWhateverThatThingIsEnabled)` then I can just have paired properties to pick from when I want to check IsEnabled or IsDisabled.
I've come across code where there is an overide for an option to disable something and the naming plus the logical not really make you think about what is happening…
I agree that such forced choices are insulting. It's about the same as also including a disabled "No" button with hover text that reads "disabled because fuck you".
PedOS is so bad that I would actually try to use Linux instead nowadays if I didn't have a Mac. Even though I fully assume that any Linux distro will be endless problems.
This is largely the consequence of the Windows API having a built in option to use these buttons, without having an option for custom text. It would be a lot more work to build a custom window with custom buttons than just callong this API.
"the program is still trying to answer two questions at the same time, which you may consider to be an unnecessary complication" - fuck off. This is why we have the modern idiom of saving everything to temp files all the time without even asking the question, an idiom that silently says you may not write a throwaway document because you can't handle anything so dangerous and cannot be trusted.
Let users have complicated things. You know, moderately complicated. They may not all have degrees in Complicator Science but they should at least grasp the concept of a three-way choice, and if some users find that an unnecessary complication then they can go away and stop trying to use devices.
I mean I don't bother reading the dialogs. If there's modifications, "Yes" means save, "No" means close the program without saving, and "Cancel" means go back. And almost every program agrees on that convention, so you don't need to read the dialogs.
I love how the link to Raymond Chen's blog is broken because one of the largest technology companies in the world doesn't give two shits about permalinks.
What a weird article. In both shown cases it takes a perfectly legible and understandable dialog and then twists it beyond recognition into something I've never seen being actually used to go "see? that's what's wrong with it!", and when it actually mentions what and how can be improved it feels like merely a footnote.
65 comments
[ 12.3 ms ] story [ 1408 ms ] threadOn a different note, never underestimate the value of a modal dialog that gives you a chance to retry an IO operation that failed. Loose USB cables and network shares over Wifi can make those happen a lot more often.
My understanding today is that one of them(fail?) gives the application a chance to do something clever. Did any application actually handle this gracefully? Something like, Disk 11/15 error(fail) Please put in recovery parity disk.
This was heresy at the time, but turned out to be the native user flow for iOS later on. And now it's common in web apps.
https://www.amazon.com/dp/1118766571?lv=shuf&channelId=500&p...
Annulation lever activated!
Do you wish to continue?
Engage STOP lever to continue. Engage CONTINUE lever to stop.
Time remaining 5..4..3...
There’s no ambiguity there. The user is very well-informed that they’re about to quit and lose the document they were working on.
Red "Delete" on the far left, then on the far right a gray/neutral "Cancel" button, and an orange (the app's primary color) "Save"
You could make the case that the user could just do a different flow of duplicating the file first, but this is entirely different from how both Mac and Windows have worked for decades, and even the Mac apps by third parties don't do it this way.
In some instances this could be a file on disk. But it does not have to be.
I agree about Save As…
Maybe that could have just been updated to “Save a Copy” or something like that. I don’t really understand why it’s a hidden option.
I could go full nerd and call it "non-volatile storage" but nobody wants that.
This is even more true of HN users than it was on the actual playground.
But RuboCop detects `!!something`, and I actually like that idiom, because I prefer to convert into true boolean types before passing them to a method, since it makes the intention clear in the code.
Sometimes it is worth the effort of going through and changing the logic elsewhere to keep the boolean positive, sometimes that would be too much effort to retest at the time.
Another option I like, when I have a config object interpreting things so I'm reading doing `if (config.IsWhateverThatThingIsEnabled)` then I can just have paired properties to pick from when I want to check IsEnabled or IsDisabled.
I've come across code where there is an overide for an option to disable something and the naming plus the logical not really make you think about what is happening…
2. Still better than "Yes, Ask me Later" dialogues that are so insulting to users.
--------
[1] Or the BBC, or whoever, a great many are guilty of this sort of thing.
https://learn.microsoft.com/en-us/windows/win32/api/winuser/...
Let users have complicated things. You know, moderately complicated. They may not all have degrees in Complicator Science but they should at least grasp the concept of a three-way choice, and if some users find that an unnecessary complication then they can go away and stop trying to use devices.