Thursday, December 30, 2010

Feels Right and Is Right

I have a reasonably large stash of about 200 cookbooks at home. I'd been organizing them roughly by category (baking, Italian, fancy meals, etc.) but my collection was growing large enough I decided to turn the organization of my bookshelf over to the experts: the Library of Congress.

The Library of Congress catalog puts cookbooks in the TX category (T = Technology, X = Home economics. I'm not making that up.). So I sat down with my cookbooks and the online catalog lookup, and sorted and organized. When I was done, I had a completely correctly ordered bookshelf. It was great! It was perfec.... well, actually, that's funny.

There was a section that had six books in this order:
Northern Italian | Greek | Indian | Italian | Italian | Italian

According to the Library of Congress, that's correct (regional comes before whole country). According to me, that's confusing. So we have something that is right, but it doesn't feel right.

You guessed it: I moved the Northern Italian book to be next to its Italian brethren.

It's a useful thing to remember when we're testing. There's what the spec says, but we also need to consider whether the spec itself matches with the way the software will actually be used. When in doubt, and whenever it's possible, usable trumps correct. Every time.

1 comment:

  1. I had an exchange on Twitter some time ago with Michael Feathers that has stuck with me, to the effect that code that looks good, is good.

    The counter-example is not spaghetti code or ball'o'mud code, but rather code that is functionally correct in an engineering sense but is unpleasant to apprehend visually or conceptually.

    The best example of this kind of thing I can think of right now is code golf, where you try to accomplish something in the fewest characters possible. Golfed code is the purest expression of the language itself, but it is invariably impossible to read easily. Reading is undeniably an aesthetic experience, and good code requires extra stuff beyond just correctness to be good.

    So there is a very real sense that in software, aesthetics trumps engineering for quality. Funny that you, me, and Feathers all used the word "trumps". I probably don't want to play cards with you guys.

    This is why I am so excited that more testers are talking about software in aesthetic terms. While I think there is an undeniable trend toward testers having programming skills, I see that as mastering the necessary tools in order to have reasonable conversations about aesthetics.

    Finally, speaking as a former librarian (four years at Emory University Health Sciences Library, more before that) you did the right thing.