My twopenneth:
- Keep the user informed in a timely manner
- If your app does something that is mirrored in the real world, make sure your app does it the same way.
- Support Undo and Redo - Nobody's perfect
- Don't surprise the user
- Prevent errors or cope with them
- Remember key facts for the user
- Make your app as efficient as possible, reduce frequently used actions to the minimum steps possible
- Make your app japanese in style - minimalist and elegant
- Error codes suck - RAM and disk space is cheap; provide a verbose and simple error message.
- Provide documentation, document the install, starting the app for the first time, common tasks and a complete UI reference.
- Don't code for coders. Get your relatives and non-techy friends to evaluate your app: work with them informally to improve both the app and the UI. An hour spent with a non-techy user will improve your app immensely.
This list was originally read at: http://www.useit.com/papers/heuristic/heuristic_list.html but has been tailored by my own experience. I recommend reading Jakob Nielsen's entire site - it's worth it if you want your UI to not suck.