Designers pretty often can't design think correctly, because:
- they don't know the end user of the product
- they need to complain many rules to satisfy their direct clients, not the users of product
- they are limitted by a business rules: make it beautiful, and not always usable
- they know too much about the product, so can't look at it as a new user. Designers are not typical users, like programmers are not typical users of their programs.
- not always designer is responsible for desing, it could be done by other non-professional, like programmer.
- there is always a set of "special people", who have differences, like left-handed, deaf or blind users etc.
Funny, but there is also a list of rules how to make things wrong:
- make things invisible: increase gulf of execution and establish gulf of evaluation, so user won't know what is happening and where they are
- be arbitrary: use non-obvious commands and names
- be inconsistent: change the rules, user different rules in different modes, have multiple different modes
- make operations unintelligible: use unknown abbreviations, unclear messages and errors.
- be impolite: insult users
- make operations dangerous: allow a single erroneous action to destroy invaluable work, make it easy for distatrous things to happen.
Design should:
- make it easy to determine what actions are available and possible at any moment of time
- make things visible
- make it easy to evaluate the current state of the system
- follow natural mappings between intentions and actions, between actions and results, between that available information about the system and actual system state.
- use both knowledge in the head and in the world: this is where manuals could help, however one should not rely on the fact that user would study manual before he/she starts working with product, usually user get to the manual when has issues.
- simplify the structure of tasks
- make things visible
- get the mappings right
- exploit the power of constraints, both natural and artificial
- design for error
- standardize