1. When closing a window, make sure user want's to close the window by saving or without saving any changes by asking user what to do (save, don't save or cancel). This will make sure user does not make any stupid mistake as YES, everyone is a stupid user, even I, the programmer.
2. When configuring a software to the taste of the user, make sure configurations are clearly identified and accissible. Unwritten rule of programming: Context menus are always a good start where user can right click on an area to reach that area's options (that's why we call it a contextual window).
3. Make sure that when using an icon to identify an action, DO NOT make it do another action elswhere in the same program.
4 . When a window can be maximised on a per-user request, make sur to let the user restore that same window in it's original state with a clear button to identify it. (Windows has 3 buttons ALWAYS located at the top right hand corner of any window. The minimize, Maximize and Close buttons (little note, the maximize buttons becoms a restore button when window is maximized).
5. It is always preferable to keep child windows inside the main application window to let the user know to which software this window belogs.
6. Never clog up an area with too many text and windows as users get lost easily and don't know where to look. Keep your working area clear and focused on what the user is doing.
7. When using keyboard shortcuts, make sure user knows. Tooltips over a particular button or in parentheses inside a menu are good practices.
8. Microsoft Windows has it's close window button top right of the application's window. For child maximizable windows, the 3 basic buttons (optional minimize button) should be under the main close,maximize/restore and minimize buttons of the main application's window (some call this an MDI form). The user know exactly where to look in case of those basic needs.
9. When using tabs, the middle mouse button is used to close that tab following the closing rules of a window of #1 in this list.
10. Tabs are maximized windows that normally cannot be restored as tabs are considered as workspaces. In the option of having movebale windows maximize as tabs, make sure user has a clear way to restore windows in it's original state via a context menu (right click). For additional methods to restore such tabs into their original floating window, these can be mentionned in a help file (example, simply moving the tab out of the tab area to restore it's original state).
11. In the occasion where closing a Window using the "X" saves, the rest of the application should follow the same rule. For special cases where closing discards changes, the standard "trash can" icon should be used or something clear that indicates to the user what is about to happen. When using such special icons, these should be placed on the left side of that area so user knows it is not a standard action.
12. When deleting anything using a button, always prompt the user with a window asking if he is sure to do this action. In the case where this action becomes redundant, a checkbox in that same message window stating "Do not ask again" can be present if the user prefers to not be harrassed anymore by the same message. In this case more cautious users will choose to keep the message while as advanced users will decide to ignore that message the rest of the time. The possibility to reverse this action should be available in the software main options.
13. Unless intentioned by paid softwares, ads and promotional slideshows should not be present in the application's loading screen. In the case of a paid customer, he should have the choice via a checkbox to show these ads or not in the futur. Again, an option to reverse this action should be present in the application's main options.
14. Treat your Graphical User Interface as if a total newb and stupid person would use it making options clear to what can be done. Remember, you as the programmer, have been working on this for weeks, months ans maybe years, you know your interface by heart and can almost use it your eyes shut. But every new user has a VERY strong chance of never seeing this type of interface before.
15. Make sure your application follows the guide lines of the interface in which it is meant to be executed. If it's a web page, links usually have a "hand" cursor for example. As a windows program, confirmation dialogues, context menus, menus, tabs, toolbars and close/min and max buttons should always be located and act the same way other standard Windows application does as the user is used to that way of working. Remember, your software if not the only thing he uses in his life, therefor, learning a completely new way of working with windows might back him off in using your application.
16. Although unwritten and baffled by many, any Windows application should keep the windows theme by default. This makes the user feel already used to you application with familiar colors and buttons. In the case your application is REALLY meant to have themes, make sure to not force a theme that will have to much faded colors (for example a too white or grey theme with grey or white icons and buttons). Make sure to not have a too colorful theme as the user won't know where to look at and won't be able to easily find himself in your application.
17. When using icons for buttons and toolbars, make sure the user clearly identifies what these buttons do. For example, a checkmark icon that identifies a delete action is not good. Make sure the user also has colors to well identify the buttons or a very clear image if you are using a metro style theme. For example, a white sheet for a new document and a yellow sheet to open one is not a good idea as the icon does not represent a completely different action. Do not use similar icons also to identify 2 different actions. Even though the actions make be closely related, you can play with colors if you are using colored icons but in the case of metro style icons, make sure that the difference is easily noticible.
18. Do not clog up many icons in one area. Even though you are using different colors, make sure to combine similar actions in a section clearly separated by a visible separator (A fainted line or simply a space bigger than the space in between your different buttons).