Command Line Interface
Expectation:
You present a list of coffee orders and the systems brings you the coffee in the order that each appears on the list. Each coffee is clearly labeled and the system is sufficiently robust to correctly read most order sets.
Reality:
You present a list of coffee orders and the system replies that it is unable to fill your order because the list has errors. The first error in the list is marked for you. It occurs on the fifth line of the list. You go back to the office to have the person who wrote their order wrong fix it. The four people whose coffee orders parsed correctly want to know why they didn't at least get their coffee.
There are three more orders in the list that have errors, as you will discover in subsequent trips.
When you finally get coffee, the person who ordered their coffee "black and bitter" (2nd coffee on the list) will get black, 1 sugar. When you check the receipt, you see that it says, "Phrase 'and bitter' not understood. Extra ignored."
Best case:
You present a list of coffee orders. If there are any problems, you get a list back that includes your original orders, as comments, with how the system interpreted each order. You can submit this list with or without editing to receive all the coffee orders that can be rendered consistently by the system and fix any unrecoverable errors with a minimum number of trips to the office. The next time you get coffee, most people will have their order ready.
Graphical User Interface
Expectation:
You touch a picture of coffee on an interactive menu and you get coffee.
Reality:
Ordering your coffee begins after you've selected beverages > hot > coffee. You have to select dairy and sweeteners from separate submenues. The system times out after you enter 8 orders and you have to start over. When it's time to confirm your order, you hit the button without looking because there's not really any way to match the list on the screen with the list from the office. People still get bad orders, but now it's your fault. Best if all, there's no way way to reproduce the same orders tomorrow. If you ever learn how to find all the items you need in any kind of efficient way, the menu will change.
Best case:
The system recognizes you and makes it easier to repeat orders in whole or in part. Context sensitive menus highlight likely choices without removing or reordering them. Icons include text labels in your own language because that's easier than figuring out the difference between coffee and tea in arbitrary iconography. Order confirmation presents your items in the order that you entered them, succinctly and completely. Selecting an item from order confirmation allows you edit that item. The system programmers manage to anticipate most needs without being paternalistic scum bags.
Voice User Interface
Expectation:
You speak your list to the system, which asks clarifying questions when you pause. When you are done, the system reads back your list for confirmation. If you had a written list, it is easy to check. You get your coffee without worrying about EBNF or drilling down through menus.
Reality:
You order a black coffee, no sugar, and two coffees, milk, one sugar.
The system replies, "One coffee. Would you like creme?"
"One coffee. No creme. No sugar."
"No creme. Would you like sugar?"
"No."
"Coffee, black, no sugar. How many would you like?"
"One, and..."
"Will there be anything else?"
You never get around to figuring out how to get milk instead of creme because you get busy with a large stick and become the reason that the audio quality of such systems is always so poor.
Best case:
Remarkably similar to expectation.
The major problems with successive generations of user design patterns are matters of implementation and not inherent to their design. Additionally, much aggravation can be avoided by implementing multiple user interface patterns concurrently and using techniques like data binding to allow users to pause and resume order entry and change to the method most appropriate for them.
Chris