User Friendly Heuristics
August 21st, 2009Wil Shipley writes about the compromised perfection we must strive for in order to provide users an experience that meets their human expectations:
“Classic computer programming has largely failed, because it failed to copy nature. Nothing in nature works 100% of the time, but it sure works well MOST of the time – and when it fails, well, you die and get replaced. A human being, for instance, is an absolutely amazing machine, and is provably NOT provably correct.”
I particularly like the example in the second half, having to do with smartly interpreting a typed ISBN numbers for product search. How do you strip the meaningless dashes from a search term, except when they’re utterly meaningful? This kind of thinking is important to fine-tuning an application. Nobody will appreciate the hours you spent laboring over the question, but for some reason they’ll just think your product is particularly awesome.
It’s interesting that the pursuit of perfection in an application has to involve the pursuit of compromise. By solving a problem in a way that degrades gracefully to unsolvable, you offer a happy, possibly even surprise solution to many people who would not otherwise expect one.
August 21st, 2009 at 2:29 pm
And, in an example of how this kind of thing can be insanely, amazingly subtle… Wil’s sample code doesn’t work. Why? ISBNs can contain the letter X (but only as the last character) as well as [0-9]. I forget that all the time, too, and it’s another example of how you have to keep tweaking, tweaking, tweaking…
August 22nd, 2009 at 9:08 am
This is a very relevant post for me right now – I’m trying to solve a problem that I’ve not seen anyone do yet. And it’s a really hard problem. I just need to accept that version 1 will not be perfect, but focus on what I can do that will provide most value to the user.
Thanks for your post, Daniel.
August 22nd, 2009 at 8:31 pm
Coming up the other way, from molecular biology up, software development practices are following quite closely evolution, even abiogenesis.
Evolution doesn’t pursue perfection; it doesn’t “pursue” anything, really. And every result it produces that can be observed and interpreted as an improvement happens because of generational mutation.
We stand still in one generation; our iteration happens in development and i think we forget that sometimes we get the fitness function wrong (“graceful degredation” vs “perfection”) and end up iterating/evolving in the wrong direction.