Good user experience is one of the most important characteristics of successful software. So designers must have the ability to determine the usability consequences of their design decisions.
So there are defined design rules or principles which designers can follow to increase the usability of their product.
We can divide these rules into two categories by the rule's authority and generality. Principles are abstract design rules, with high generality and low authority. Standards are specific design rules with high authority and limited in applications.
Here authority means an indication of whether or not the rule must be followed in design or whether it is only suggested. Generality means whether the rule can be applied to many design situations or whether it is focussed on a more limited application.
We can divide these principles into three categories. Learnability, Flexibility, and Robustness.
The ease with which new users can begin effective interaction and achieve maximum performance.
Predictability - Support for the user to determine the effect of future action based on past interaction history
Synthesizability - Support for the user to assess the effect of past operations on the current state
Familiarity - The extent to which a user's knowledge and experience in other real-world or computer-based domains can be applied when interacting with a new system
Generalizability - Support for the user to extend knowledge of specific interaction within and across applications to other similar situations
Consistency - Likeness in input-output behavior arising from similar situations or similar task objectives
The multiplicity of ways in which the user and system exchange information
Dialog initiative - Allowing the user freedom from artificial constraints on the input dialog imposed by the system
Multi-threading - Ability of the system to support user interaction pertaining to more than one task at a time
Task migratability - The ability to pass control for the execution of a given task so that it becomes either internalized by the user or the system or shared between them
Substutivity - Allowing equivalent values of input and output to be arbitrarily substituted for each other
Customizability - Modifiability of the user interface by the user or the system
The level of support provided to the user in determining successful achievement and assessment of goals
Obersarvability - Ability of the user to evaluate the internal state of the system from its perceivable representation
Recoverability - Ability of the user to take corrective action once an error has been recognized
Responsiveness - How the user perceives the rate of communication with the system
Task conformance - The degree to which the system services support all of the tasks the user wishes to perform and in the way that the user understands them
Standards are usually defined by national or international organizations to ensure compliance with a set of design rules by a large community. Standards can apply specifically to either the hardware or the software used to build the interactive system.
Since the incompleteness of theories underlying the design of interactive software makes it difficult to produce authoritative and specific standards. So the majority of design rules are suggestive and more general guidelines.
Shneiderman's eight golden rules provide a convenient and succinct summary of the key principles of interface design. They are intended to be used during design but can also be applied for evaluation of the systems.
Strive for consistency
Maintain consistency in action sequences, layout, terminology, command use, and so on.
Enable frequent users to use shortcuts
Introduce abbreviations, special key sequences to perform regular and familiar actions more quickly.
Offer informative feedback
Provide informative feedback for every user action according to the magnitude of the action.
Design dialogs to yield the closure
So the users won't be confused about whether their action was successful or not.
Offer error prevention and simple error handling
Give clear instructions to users so they won't do mistakes.
Permit easy reversal of actions
This encourages users to explore the system and learn fast, with this, users know they can return to the previous state if they do a mistake.
Support internal locus of control
So the user is in control of the system, which responded to his actions.
Reduce short-term memory load
This can be done by keeping displays simple, consolidating multiple-page displays, and providing time for learning action sequences.
1. Use both knowledges in the world and knowledge in the head
Systems should provide the necessary knowledge within the environment and their operation should be transparent to support the user in building an appropriate mental model of what is going on.
2. Simplify the structure of tasks.
Tasks need to be simple in order to avoid complex problem solving and excessive memory load.
3. Make things visible
The interface should make clear what the system can do and how this is achieved and should enable the user to see clearly the effect of their actions on the system.
4. Get the mappings right
it should be clear what does what and by how much. Controls, sliders, and dials should reflect the task so a small movement has a small effect and a large movement a large effect.
5. Exploit the power of constraints
Constraints are things in the world that make it impossible to do anything but the correct action in the correct way. So using constraints can minimalize user mistakes.
6. Design for error
To err is human, so anticipate the errors the user could make and design recovery into the system.
7. When all else fails, standardize
If there are no natural mappings then arbitrary mappings should be standardized so that users only have to learn them once.