I am putting together some mock-ups of my first real interface and I am left wondering: What are some basic tenets of good user interface design? I am looking for something like a bullet list summary and maybe some resources that might be useful for each tenet.
Nielsen provides this list - which I would generally agree with
- Visibility of system status
- Match between system and the real world
- User control and freedom
- Consistency and standards
- Error prevention
- Recognition rather than recall
- Flexibility and efficiency of use
- Aesthetic and minimalist design
- Help users recognize, diagnose, and recover from errors
- Help and documentation
The one that I always try to remember is "7 items (max) to a page / form." It came up in my GUI class in college (7 or 8 years ago now).
I'm reminded of a web comic where they had an Apple design followed by Google design (both very simple) followed by "our" design with dozens of items littering the form.
Don't forget keyboard accessibility, and more generally accessibility for vision-impaired people (this is why a great many cool-looking UIs actually suck).
Also, Alan Cooper (of Visual Basic fame) said "don't put might before will", which means you shouldn't make it easy for people to do the things they might do while making it difficult for them to do the things they will do with your software.
Joel Spolsky (who is co-creator of SO :) ) has a book called "User Interface Design for Programmers" as well as a series of articles on his website (Joel On Software) related to that book.
Another great resource to start with is Jacob Nielsen's usablity website.
"Don't make me think!", the title and the book are extremely useful when designing a UI. Some of my favorite sections from it include:
- Create a clear visual hierarchy.
- Conventions are your friend.
- Happy talk must die.
- Instructions must die.
- Four reasons why I love tabs.
- The trouble with Rollovers.
- Farmers vs. Cowmen.
- The myth of the "Average" user.
Also, check out User Interface Annoyances on SuperUser for what not to do.
Don't interrupt the user with pop-up dialogs. Show some feedback that the user can see and provide a way for them to deal with the issue when they choose to.
"The principle of least surprise".
Apply sensible defaults
Show response to user inputs within half a second.
Go and read Controlling Your Environment Makes You Happy and then read Don't Make Me Think! A Common Sense Approach to Web Usability.
Keep it simple, don't ignore convention and mimic sites/programs that work well.
A quick google search revealed these:
In no particular order (and off the top of my head):
- Convention over consistency
- Affordance (make it clear from the appearance how and what something does)
- Avoid modes
- Allow the user to create a correct mental model
- Protect the data (make it hard to be destructive)
If you read Asimov, you'll find this easy to remember: an interface should not, through action or inaction, allow the user's work to be inadvertently destroyed.
User interfaces are frequently for software developers or similarly tech-savvy people, not just laymen. If yours is such an interface, you can benefit from being a user as well as the author.
- Write the interface.
- Put it away for a while, preferably long enough that you forget exactly how it works.
- Use it to do something when you're in a bit of a hurry, or otherwise distracted.
- Things will break, or force you to do things manually that weren't covered. For each one, write a bug/feature report. (If you're in that hurry, write just enough to remind you later.)
- Fix/address each report.
- Go to step 2.
This experience will give you insights to writing better interfaces, some of which may extend to laymen as well as the tech-savvy. Beware, however; not every feature that is good for devs is good for non-devs. Steps 2 and 3 are intended to get you into that non-dev mindset, and get you most of the way; for the last mile, there's no substitute for a real user.
Know your users.
- Spend time with them experiencing what they currently do without your software / changes.
- Get them to try and use as earlier prototype as feasible - maybe it's just paper, see how they react.
- Keep pushing your prototypes in front of them as development progresses.
This doesn't exactly meet your requirements for a bullet list, but I'd still recommend reading Mark Miller's The Essence of Great UI - An Overview, Why is Great UI so hard to achieve?, Great UI, Clarity, and Information Relevance, Great User Interfaces, Clarity, and Information in Parallel and Great UI: Clarity and Color on the Presentation Layer.
He also talks about some of the same concepts in the dnrTV episodes Mark Miller on The Science of a Great User Experience Part 1 and Part 2.