| 1 | Visibility of system status | Loading states, progress indicators, confirmation messages, sync status | Missing spinners, no feedback on save, silent failures, stale data indicators |
| 2 | Match between system and real world | User's language, familiar concepts, natural ordering | Internal jargon, technical error codes, unintuitive ordering, developer vocabulary |
| 3 | User control and freedom | Undo, back, escape, cancel, redo | No undo, modal traps, irreversible one-click actions, no way to cancel in-progress operations |
| 4 | Consistency and standards | Same action = same result, same term = same meaning, platform conventions | Different buttons for same action, inconsistent terminology, non-standard icons |
| 5 | Error prevention | Confirmation for destructive actions, smart defaults, input constraints | Easy misclicks, no confirmation on delete, no input masks, ambiguous defaults |
| 6 | Recognition over recall | Visible options, breadcrumbs, recent history, contextual help | Hidden features, memory-dependent workflows, no context clues, buried settings |
| 7 | Flexibility and efficiency | Keyboard shortcuts, bulk operations, customisation, expert paths | Mouse-only interactions, one-at-a-time operations, no shortcuts for power users |
| 8 | Aesthetic and minimalist design | Every element earns its place, information hierarchy, visual clarity | Decorative clutter, unused UI elements, information overload, poor hierarchy |
| 9 | Help users recognise and recover from errors | Clear message, cause, recovery action | "Error 500", "Invalid input" with no guidance, blame language, no recovery path |
| 10 | Help and documentation | Contextual help, searchable docs, tooltips, onboarding | No in-context help, docs buried or outdated, no search, tooltips on wrong elements |