As product designers we tend to seek holistic solutions to user problems. We ask, “Yeah, but what about when the user does this?” and then we seek a Grand Unified Design that takes this into account elegantly. But sometimes an elegant solution doesn’t exist. Sometimes the best UX is one where each edge case, each behavioral nuance is effectively hard-coded. It may seem cumbersome, but it can also result in a great user experience.
By way of example I’ll pick on Apple again. (They’re fun to pick on in part because they’ve got the basics down.) iOS’s popup “WiFi window” is convenient: it prompts me to join a WiFi network when one is available. I end up disabling it in Settings because it gets in my way: the number of times it interrupts a task far exceeds the number of times I appreciate its convenience.
I don’t even know what a holistic, simple solution would look like. But I suspect introducing a few heuristics would make things a lot better:
- Don’t display the window within one second of a keyboard press. This should take care of the vast majority of cases in which it interrupts typing. If it doesn’t, take it further: don’t show the window when the keyboard is onscreen.
- Don’t display the window within half a second of a tap or other gesture.
- Don’t display the window if the device is moving, e.g. if I’m on a train. This can either be determined via GPS (with possible battery consequences) or by how quickly the lineup of WiFi networks changes.
- Don’t display the window (or decrease the likelihood of displaying it) if the available WiFi networks are ones the user has declined to join in the past.
- Don’t display the window when I’m already in a modal state (slide-up menu, application tray, etc.).
- Do display the window if the user takes an action that requires WiFi. (I think Apple has already implemented this.)
There are probably others, but you get the idea. When designing a potentially annoying behavior, the question to ask is: are there edge cases that can simply be handled via a clever heuristic? Could that make the difference between providing a handy feature and annoying the user?