These principles were documented and posted by Mozilla, and their QA team, but are taken for Nielsen, Norman, and are pretty damn timeliness.
Discovery – Users should be able to discover functionality and information by visually exploring the interface; they should not be forced to recall information from memory. [Source: Nielsen]
Perceived Affordance – Controls should visually express how the user should interact with them. [Source: Norman]
Natural Mapping – Controls should be placed in the correct location relative to the effect that they will have. [Source: Norman]
Visual Hierarchy – Controls that are more important or more commonly used should leverage visual variables such as size and contrast so that they have more dominance and weight relative to other controls.
Minimalism and Simplicity – Interfaces should be as simple as possible, both visually and interactively. Interfaces should avoid redundancy.
User Feedback – Interfaces should provide feedback about their current status. Users should never wonder what state the system is in. [Source: Nielsen]
Consistency – All else being equal, software should be internally consistent with itself, and externally consistent with similar interfaces to leverage the user’s existing knowledge. [Source: Nielsen]
Task Efficiency – Interfaces should be as efficient as possible, minimizing the complexity of actions and the overall time to complete a task. [Source: Nielsen]
User Control – The software should not automate tasks contrary to the user’s intents.
Interruption – Interfaces should not interrupt the user. Interfaces should never ask the user a question that they are not prepared to answer simply for a false sense of control. In general, software should only speak when spoken to.
Error Prevention – Interfaces should proactively try to prevent errors from happening. [Source: Nielsen]
Undo – Actions should support undo so that users remain in control.
Mode Error – Users should not encounter errors because the interface is in a different state than they expected it to be.
Error Recovery – Interfaces should proactively help users recover from both user errors and technology errors. (A preferable case is to address through ux-error-prevention so that the error does not occur). [Source: Nielsen]
Implementation Level – Interfaces should not be organized around the underlying implementation and technology in ways that are illogical, or require the user to have access to additional information that is not found in the interface itself. [Source: Nielsen, Cooper]
Jargon – Users should not be required to understand complex language or implementation-level terminology. [Source: Nielsen]
Tone and Voice – Interfaces should not blame the user, or communicate in a way that is overly negative or dramatic.