Is returning search results while the user is inputting each character good usability practice or a pain in the rear for the user?
From a user's perspective, I've never found it anything but helpful. The search results let me know how I'm most likely to find accurate information for my query and that's never a bad thing. That said, there are a few guidelines to implementing it that should or could be followed.
- Make sure the search form works without the AJAX suggestions before adding them. Think enhancement to what's already there, not requirement.
- Never update the search input with one of the results unless the user requests it.
- Provide keyboard and mouse access for selecting results.
- Look-behind is a nice complement to look-ahead.
I agree with all the others saying "do it", with one exception:
Make sure it's instantaneous, always, or don't do it!
There is nothing worse than using an application that does this on, say, the iPhone, and every time you type a character there is a two second delay while the search/filter is performed. This makes it slow and painful instead of quick and helpful, and is a horrible user experience.
I'd say "instantaneous" is in the ballpark of a tenth of a second, maximum, because you should be able to type at normal speed and have the UI keep up.
In most cases it's great! Generally it's great because it helps to find something without trying to guess what exactly to type into the search field. And it definitely saves time - one can type one or two letters to find what he is looking for. But of course be sure that the input would not be blocked while the search results are loading. And don't forget about the keyboard navigation.
After typing a search query, there's (logically speaking) only one action that can follow: to hit the search button. Why not eliminate that extra step if it's the only logical next action.
Quote I read somewhere, can't remember by who or where I read it: "If there's only one thing left to do, have the computer do it."
Do it! I can't tell you how many times it has saved me unnecessary trouble because sometimes I forget exactly what I search for and it reminds me just because I remember the first word for what I have been searching for it gives me what I am looking for. Especially because places like Google gives search history.
I think it's great usability in most cases, assuming it doesn't hurt performance:
- It's very natural not know exactly what you're search for, so showing results of a partial input is great.
Imagine you're looking for an email and you just remember one work of the title.
The word might be very common and hence return a lot of results. If you see right away, before "submitting" the search, that there are too many, you'll try to type something else to narrow it down immediately.
- Moreover, getting to the result you want is quicker this way.
You should usually prefer direct manipulation over indirect manipulation. That implies tasks are done iteratively with continuous feedback to make the user understand what he or she is doing. Returning results while user is typing is good, because it gives continuous feedback. Likewise property pages should change properties immediately rather than after you hit e.g. and apply button. E.g. selecting a color in a properties panel should immediately change the background color. Rather than it happening after you hit "apply". This helps discoverability of the user interface, because there is a one to one correspondence between what the user does and what happens.
I think everyone is getting so very very lazy. Whats wrong with typing in a question like "Where do lions come from" is it so hard to use the keyboard these days. Does everything have to be minimal. TUVM instead of Thank you very much. I know which one I prefer, and its the latter. There is only one place where saving a nano-second is worthwhile and thats in a laboratory, NOT in everyday lives. Does it really matter if your friend can download a program 3 nano-seconds faster than you. My goodness, WOW, what an earth shattering thing to happen. Get a grip folks. I am all for progress but lets not go stupid with it.