A great post at Good Math, Bad Math about how hard it is for software developers to build truly usable systems. A lot of good lessons here for librarians as we work on our and together with our systems departments. I was a software developer for many years before becoming a librarian and I can personally attest to how difficult it is to get systems right, to build them like you users want rather than how we think they want them. That's why most software goes through so many iterations before it's truly usable. We need to learn how to design it right and in many cases, the users themselves don't know what's right either until they've had a chance to work with something that's wrong. Building good systems is hard.
Here's a bit of Chu-Carroll's post:
This kind of thing happens constantly in software. In my own area of specialiation - software configuration management - virtually every tool on the market presents itself to users in terms of the horribly ugly and complicated concepts of how the SCM system is implemented. Looking at popular SCM systems, you'll constantly see tons of things: branches, merges, VOBS, WOBS, splices, gaps, configurations, version-pattern-expressions. To use the systems as they're presented to you, you need to learn whatever subset of those concepts your system uses. But those concepts are all completely irrelevant to you, as a user of the system. What you're trying to do is to use a tool that preserves the history of how your system was developed, and that lets you share changes with your coworkers in a manageable way. What does a VOB or a VPE have to do with that?
I'm not trying to claim that I'm perfect. I spent the majority of the my time working in SCM building a system with exactly those flaws. I'm as guilty as anyone else. And I didn't realize the error of doing things that way by myself. I had to have it pointed out to me by someone who's a lot smarter than I am. But once he made me aware of it, it made me aware of this as a ubiquitous problem. It doesn't just happen in things like embedded systems (the Xerox card reader) and SCM systems. It's in word processors and spreadsheets, file browsers, web browsers, desktop shells, cell phones, music players...
Software developers - like me - need to learn that users don't view systems the same way that developers do, and the right way to build a system is by focusing on the view of the user.