Adding to the list that already exists:
- task oriented. Don't build a complex do-it-all UI, split it into tasks, one at a time
- use simple, clear language to support what you want to user to do
- have a flow to guide the user in the task, so that the user does not need to come back or jump all over in the page
- do the "mother test": show it to your old mom, if she understands then you are in the right direction, otherwise ask her what she gets and what she does not get from your app. Repeat until almost anyone can use your app