In the courses I teach about human-computer interaction, I typically open each class with an example of a usability problem. I'm putting these online, in case others find them useful.
A few years ago I attended a workshop on the future of interactive systems; it was a wonderful chance to talk with world-class researchers in human-computer interaction and to speculate about the directions the field might take.
One of the workshop sessions involved brainstorming, in which we jotted down thoughts about a given topic on Post-It notes and then tried to figure out how they might all fit together. We stuck the notes to the wall, talked about the emerging organization of ideas, and then went off to lunch.
This is how things looked when we returned.
Oh, well. Brainstorming is partly about making serendipitous connections between concepts that might not be obviously related...
I show this picture to my students not really as a usability problem but rather to introduce a technique that's sometimes used in the early, conceptual stages of designing a user interface: card sorting. It's trivially simple. Imagine that you've talked with your target audience of users for an application you propose to build. You now have a number of ideas about specific things that the application should do. How should the functions be organized? You write down brief descriptions on index cards and slide the cards around on a tabletop, looking for groupings that seem natural.
There are a few unexpected benefits from doing this. Sometimes you'll happen upon hierarchical structure in your cards that wasn't apparent earlier. Sometimes, once you have a few cards in a group, you'll realize that the group would be more coherent if you add a few new cards; the organization suggests new functionality. Or the reverse--you might decide that the application tries to do too much, and so you put some cards to the side.
Card sorting is an example of what's known as distributed cognition. Ordinarily we tend to view cognition as something that happens in our heads, dependent on our memory, reasoning abilities, and so forth. In a practical sense, though, much of what we do in solving problems involves exploiting the environment outside our heads. I write down shopping lists as a back-up for my unreliable memory. When I'm preparing a complicated recipe in the kitchen, I sometimes line up the ingredients I'll need so that I can easily pick them up in the right order. And I shuffle index cards around on a table because it's easier to keep track of the notes and their relationships by seeing them, rather than keeping it all in my head.
Usability depends on building software right. It depends more on building the right software, and figuring out the right thing to do sometimes takes us relatively far from what we typically think of as computer science activities.