When I am talking to someone who is using software in a customer-facing context—a librarian, a pharmacist, a customer service rep, a cashier—I like to ask them about it. Are there tasks you need to do every day that are hard to do in the software, that you’ve learned a cumbersome hack around?
Every time the answer is yes. Every time.
Today it was a rep who needed to reschedule an appointment for me. She had to write down all the particulars from the existing appointment, cancel it, and then book the appointment all over.
Where a sane design recognizes that customers reschedule appointments a lot. Add a reschedule command. And support direct manipulation for the many cases when the change is simple. Show the appointment on a calendar that gives visual cues to what openings are available. Use the mouse to drag the appointment to a new date.
My library is using new software for circulation. If a book’s barcode is scanned twice, the second scan is treated by the program as a renewal of the book.
Librarians get distracted. They will forget if they’d scanned a book. A sensible engineer anticipates this and does the right thing, which is to ignore the second scan altogether. Don’t try to check it out again. Don’t report an error. Just ignore it.
I suspect that the problem is that no one thinks about what the people who use the software will actually do with it in a typical day, sits down with them and asks, or watches them doing their job.
This is not hard to do. It is not expensive or time-consuming. And it can make everyone along the way happier and more effective.