The user experience
- Many people design for geeks.
- We need to design for the general public, but make advanced functions available for those that want them.
- We should try to help the user by...
- Using familiar keys and menus (e.g. Ctrl + C for copy).
- Including help systems and tutorials.
Designing for users
- At every stage when designing the GUI, think "is it obvious what this does?"
- Make all screens as simple as possible.
- Users learn by trying stuff - they rarely read manuals, so think carefully about what the default behavior of any function should be.
-
Hide complex functionality and the options to change defaults in 'Options' menus.
- Most of all consult and test.
Initial consultation
- User consultation is a vital part of development.
- Users should be consulted first. If the users don't like your software, you're sunk.
- Find out what people expect to get from the system before adding extras. If it helps draw UML User Case diagrams.
-
User Cases can be used to break a large project up into smaller bits. Do the difficult bits first!
Usability testing
- When you think you have a bit users are interested in up and running, test its 'usability'.
- Sit your users down with the software and get them to play with it.
- It's useful to set them common tasks to do.
- See how long they take to do stuff, and what they do that's unexpected. Some companies use mirrored windows.
- Remember, users don't make mistakes - it's your fault if you lead them the wrong way!
Release
- If you've been testing enough you shouldn't have any usability problems. Most problems will be bugs from users doing unusual things.
- Can release alpha and beta versions to a broader number of testers or the public to test for bugs and at the same time ask for user comments.
- At this point you'll need to delimit time for...
- User improvements (should be minimal)
- Refactoring (simplifying the code)
- Fixing bugs.
- If you try and do two at once it's bound to get confusing.
Summary
- Always design assuming the user...
- Will experiment rather than read the manual.
- Will base these experiments on what they expect to find.
- Always base the software design around what the user wants.
- Always test the user's opinions and the usability as you develop.