Nielsen provides this list - which I would generally agree with
- Visibility of system status
- Match between system and the real
world
- User control and freedom
- Consistency and standards
- Error prevention
- Recognition rather than recall
- Flexibility and efficiency of use
- Aesthetic and minimalist design
- Help users recognize, diagnose, and
recover from errors
- Help and documentation