Zyphem's answer is good. Consistency with the target operating system is very important. If all of the windows in your operating system place the OK buttons on the left and the Cancel buttons on the right, make sure your program does that. If you target operating system has common menus (such as File, Edit, View, Help, etc), make sure that you have the appropriate ones (if they are needed) and that the options on the menus are under the correct heading. Also, programs typically have certain shortcut keys set as standards (Ctrl + P is print, Ctrl+C is copy, etc). Make sure you are consistent with those standards.
Write out all of the tasks that you can think of one using your application doing. Sketch out your GUI(s) and go through how a person would accomplish a task. If something is an important task, make sure it is easily accessible and not buried 3 sub-menus deep and hard to find. Also, make sure you have all of the tasks account for in your GUI.
The GUI should be self-explanatory, as stated by Zephem. Keep the descriptions for each field short, but clear. Many GUI frameworks have a means to allow text to pop up when a mouse hovers over an area... this generally allows longer and more clear descriptions if they are needed. GUIs also need to look nice. So don't use colors that clash. Do not override the OS default settings (such as color scheme, themes, layouts, etc) without reason. Make sure the fields are properly aligned and make sure you have a consistent amount of space between things.
I am not sure what you are using to program this, but depending on what languages and frameworks you are using to program it, you may want to consider using multi threaded programming techniques if you think any of the tasks your GUI initiates are going to take a long time, but do not require additional user input. This could help keep your program from appearing to freeze (but could make programming it much more complicated.)