The Vanity Experiment on "designing task based interaction flow"
Brilliant stuff from Ant explaining the thought and effort behind the BBC's Single Sign-On Registration service - Tips for designing task based interaction flow
I particularly value any set of observations that can hammer home this kind of point:
"Errors are usually not the fault of the user, but the fault of the system for not understanding the user or allowing them to input how they would naturally"
It doesn't matter whether you are building a web application to do registration, search, or voting. You are dealing with people interacting with machines. If you allow people to input information in a way the machine isn't expecting, you can guarantee that they will. One of the first things I was taught about programming when I was 9 or 10 and using BBC BASIC was "Junk In, Junk Out". So many web interfaces seem to forget that you can save so much pain if you just guide the user into the right direction before they get an error. And as Ant says, make error messages that put the person at ease - after all the machine doesn't have feelings:
"This system is stupid and only understands one way of entering calendar dates... Sorry. Could you do it like this please: DDMMYYYY"