One very common mistake on web sites is to overlook feedback on user's actions. This is not only unprofessional, but it has direct consequences to the user. He can't be sure, if his interaction with the website was successful or not. This confusion leads sometimes to second attempts just to ensure that things work out as intended.
If an email is sent or an image uploaded, say so. If the site hierarchy is deep, show where the user is at the moment (for example with breadcrumbs). If something is wrong with the application, provide the user with a descriptive natural language error message and possible solutions to his problem. Don't rely on him to know, what he should do. If a complicated operation could be divided in smaller chunks, do it and numerate visually the steps the user needs to accomplish. If you preload heavy content like a movie, show a loader updating his status in real-time, but provide also a textual information (KBs loaded/all KBs; time elapsed/full time), because some people are blind. If a destructive operation—like file deletion—needs to be done, always ask people to confirm that, but also provide advanced users with the option to skip this step.
If you show a complex interface to the user, provide an on-screen help highlighting the meaning of the different elements and how they can be used. If using a visual object paradigm—like drag-and-drop,—ensure that it works correctly and intuitively. Show clearly the states where an object was, where it is currently and where it will be dropped. Provide advanced users with keyboard shortcuts and maintain a well-designed, descriptive documentation of them. Do regular backups of frequently changed user information—like email text. Try to keep all your feedback information and tone as consistent as possible. Analyze log details to see if users have any problems you can eradicate.