Turning on the faucet for a shower is a familiar experience at home. You turn one or two knobs to the positions you already know, and the shower experience is the same one you have every day. Using a faucet in an unfamiliar place, however, is a frustrating process of trial and error. There is no indication of “do this if you want a comfortable shower”, you have to play around with one or more knobs until things are right.
Faucets provide you with the power to control your environment, but require that you understand how the system works to get what you want.
Contrast that with the thermostat. There has been a lot of innovation in thermostats lately, but the interface is generally the same. “This is the current temperature.” “I want it to be a little warmer”, “I want it to be this warm”.
Thermostats do a great job of letting you express your desire and have a machine respond. Thermostats are an experience that has been created for you that combines user interface with the machines under the surface of the home. A faucet is an interface to directly control a system that you cannot see.
Why does this metaphor matter for software developers? The best user interfaces don’t require that the user understand the rules inside the system completely in order to get what they want.
A good example is eCommerce checkout. What should happen if you add multiple items to a cart that cannot be shipped together? (perhaps these items are fulfilled by two parties, or one item is backordered) A ‘complete’ solution would prevent you from placing this order, perhaps showing you an error message.
A better user experience would fix this problem for you. Want an item that’s in stock and to pre-order something that is backordered? No problem! We can show the user that their items will be fulfilled in multiple shipments, rather than making the user check out twice. A good interface will make it clear that this is possible and help you finish the process. The user gets to express their desire for both items without needing to know how your fulfillment process works.