My twopenneth:

  1. Keep the user informed in a timely manner
  2. If your app does something that is mirrored in the real world, make sure your app does it the same way.
  3. Support Undo and Redo - Nobody's perfect
  4. Don't surprise the user
  5. Prevent errors or cope with them
  6. Remember key facts for the user
  7. Make your app as efficient as possible, reduce frequently used actions to the minimum steps possible
  8. Make your app japanese in style - minimalist and elegant
  9. Error codes suck - RAM and disk space is cheap; provide a verbose and simple error message.
  10. Provide documentation, document the install, starting the app for the first time, common tasks and a complete UI reference.
  11. 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.