GUI design techniques to enhance user experience [closed]

What techniques do you know\use to create user-friendly GUI ?

I can name following techniques that I find especially useful:

  • Non-blocking notifications (floating dialogs like in Firefox3 or Vista's pop-up messages in tray area)
  • Absence of "Save" button
    MS OneNote as an example.
    IM clients can save conversation history automatically
  • Integrated search
    Search not only through help files but rather make UI elements searchable.
    Vista made a good step toward such GUI.
    Scout addin Microsoft Office was a really great idea.
  • Context oriented UI (Ribbon bar in MS Office 2007)

Do you implement something like listed techniques in your software?

Edit:
As Ryan P mentioned, one of the best way to create usable app is to put yourself in user's place. I totally agree with it, but what I want to see in this topic is specific techniques (like those I mentioned above) rather than general recommendations.


Solution 1:

If you do give the user a question, don't make it a yes/no question. Take the time to make a new form and put the verbs as choices like in mac.

For example:

 Would you like to save?    
     Yes        No

Should Be:

  Would you like to save?
    Save        Don't Save 

There is a more detailed explanation here.

Solution 2:

Check out the great book Don't make me think by Steve Krug.
It's web focused but many of the conepts can apply to anything from blenders to car dashboards.
Topics covered:

  • User patterns
  • Designing for scanning
  • Wise use of copy
  • Navigation design
  • Home page layout
  • Usability testing

He also has a blog called Advanced Common Sense

And some random UI related links:
- User Interface Design for Programmers by Joel Spolsky
- 10 Usability Nightmares You Should Be Aware Of

Solution 3:

First Principles: Wilfred James Hansen

  • Know the User
  • Minimize Memorization
  • Optimize Operations
  • Engineer for Errors

Subsequent Expansions: Dr. Theo Mandel

Place Users in Control

  • Use Modes Judiciously (modeless)
  • Allow Users to use either the Keyboard or Mouse (flexible)
  • Allow Users to Change Focus (interruptible)
  • Display Descriptive Messages and Text (helpful)
  • Provide Immediate and Reversible Actions, and Feedback (forgiving)
  • Provide meaningful Paths and Exits (navigable)
  • Accommodate Users with Different Skill Levels (accessible)
  • Make the User Interface Transparent (facilitative)
  • Allow Users to Customize the Interface (preferences)
  • Allow Users to Directly Manipulate Interface Objects (interactive)

Reduce Users' Memory Load

  • Relieve Short-term Memory (remember)
  • Rely on Recognition, not Recall (recognition)
  • Provide Visual Cues (inform)
  • Provide Defaults, Undo, and Redo (forgiving)
  • Provide Interface Shortcuts (frequency)
  • Promote an Object-action Syntax (intuitive)
  • Use Real-world Metaphors (transfer)
  • User Progressive Disclosure (context)
  • Promote Visual Clarity (organize)

Make the Interface Consistent

  • Sustain the Context of Users’ Tasks (continuity)
  • Maintain Consistency within and across Products (experience)
  • Keep Interaction Results the Same (expectations)
  • Provide Aesthetic Appeal and Integrity (attitude)
  • Encourage Exploration (predictable)

Solution 4:

To add to your list, aku, I would put explorability as one of my highest priorities. Basically, I want the user to feel safe trying out the features. They should never back away from using something for fear that their action might be irreversible. Most commonly, this is implemented using undo/redo commands, but other options are no doubt available e.g. automatic backups.

Also, for applications that are more process-oriented (rather than data-entry applications), I would consider implementing an interface that guide the user a bit more. Microsoft's Inductive User Interface guidelines can help here, although you need to be very careful not to overdo it, as you can easily slow the user down too much.

Finally, as with anything that includes text, make the user interface as scannable as possible. For example, if you have headings under which commands/options appear, consider putting the action word at the start, rather than a question word. The point that Maudite makes is a good example of scannability too, as the "Don't Save" button text doesn't rely on the context of the preceding paragraph.

Solution 5:

A useful technique which I never see anyone use is to add a tooltip for a disabled UI control explaining why the control is disabled. So if there's a listbox which is disabled and it's not clear why it is disabled, I want to hover over it and it tells me why it's disabled. I want to see something like "It's disabled because two textboxes on the screen were left blank or because I didn't enter enough characters in some field or because I didn't make a certain action.".

I get into sooooo many such situations and it's frustrating. Sometimes I end up posting in the software's forum asking why a control is greyed out when a tooltip could have helped me in a second! Most of these software have help files which are useless in these kinds of scenarios.

Try to pretend you know nothing about your software and try using it. However this is not practical because you already have a certain mind set towards the app. So watch fellow developers or friends use the app and look out for the pain points and ask for feedback.