If you know me, you know I'm a big fan of Joel Spolsky.  I appreciate the Joel Test but I don't always agree with everything on there.  One of those items was hallway usability testing.

hallway usability testing Yesterday I posted about a quick app I threw together to help with Session Registration for NoVa Code Camp 2007.02.

There's really no login to speak of, I ask for an email address but that's just to tie you to a session and make sure you actually registered for the event.  There's only one page, and the image on the left is a clipped version of it.

There are two lists, one on the top that are the top 7 sessions you think you'd like to attend.  The bottom is All the sessions that are available.  To use it, click ADD next to the session on the bottom list you want to attend and it moves up to your top 7.  To get rid of a session in your top 7 you click the check box to remove it.

Going into this I wanted to have two lists, checkbox lists.  The top checkbox listed should have selected="true" on each item because they're your list.  The bottom would remain unchecked and things would naturally flow.  Uncheck an item and it goes away.  Check an item and it floats to your list.

It's not as obvious as I thought.  I've gotten a bit of feedback and 90% of that feedback is "I chose my top 7 but there's no submit button, I hope I did it right."  People and their buttons :)  Every time a list item is added or removed I'm saving those changes so there really isn't a need to submit after your last change.  That's what people expect, and that's probably what I would have heard before I pushed this out.

It wouldn't have saved me any trouble, it really isn't any trouble.  Just some insight into how people expect things to work. 

I thought I might just put a button on the page, label it "Submit", and don't wire up any events to it.  Everything is saved but I give people a button to push if they feel compelled to push it.

I wanted the bottom list to filter out the results from your Top 7 so you wouldn't see the duplicates but I didn't get to it.  I was using ActiveRecord from the Castle Project and didn't have the time to figure out how to retrieve the compliment of a HasAndBelongsToMany relationship.  It seems like that would be a fairly common thing to do with those relationships but the solution didn't jump out at me.  Maybe there are set based operations for collections, but I didn't think looping through the collections to remove the intersection made much sense.  Anyone know of a clean way to do this?

The moral of this story?  Go find someone to look at what you're doing before you publish it.  It made sense to you because you came up with it and worked through all the trade offs along the way.  Or write instructions on the page :)