It goes like this: You walk up to the gas pump, swipe your card, push the regular button, put the fill nozzle into your car, pull the lever, and nothing. Why? You look at the screen, and there scrolling on the screen is a message, “Remove Nozzle Then Select Grade”. You selected grade, then removed nozzle. How could you? You uncultured brute. Which brings me to the bad design trope:
The Gas Pump Fallacy: “Enforcing order to an input when the order needed is arbitrary, or blocking one input for an equivalent input when both are acceptable”
The pump could just as easily have asked you to select grade then remove the nozzle. As far as the software and valves are considered it’s meaningless. The pump needs two pieces of information, “the nozzle is out,” and “the grade is selected”. Since these are binary conditions that have to be met to begin, the order is arbitrary.
“Alright”, you say, “but I have to ask the user to give me the input, shouldn’t the order match the request?”
Well, no. Ask the user to input the information in whatever order you want, but accept it in whatever order it’s given. Another example of this design done right is the automatic registers at, specifically, Walmart. The register needs to know when to start scanning items. It figures this out by waiting for an interaction. The Walmart register lets you scan an item to begin the process, or it lets you push the start button. It offers you both, but accepts and needs one. The Kroger terminals, however, will not start scanning till you push the start button.
Finally, a third example of this being applied in software is the iPhone lock screen. If your fingerprint isn’t recognized the iPhone happily swipes the screen for you to the PIN input. However, even though the touch-id is no longer prompted for, the iPhone will still accept and is looking for a proper fingerprint input. The coder could have easily justified accepting only the pin at that point for security or code reasons, but it would not have improved the interaction.
The gas pump is the best example I could think of. This is because the user will develop a pattern based on the pump they are most used to. It is a common object and the designer has no control over the patterns they learn. A good designer will recognize when the pattern is meaningless and design a pattern agnostic system. Forcing a user’s hand is meaningless, the best interaction is one where the object being interacted with vanishes into the background, and only it’s function is left visible. A good toaster toasts bread. It has a lever and a knob. It does not force you to attach it to your WiFi before beginning the toast cycle.