Smashing magazine has a pretty good article covering this topic but I will try and condense it into a few simple tips that have tested well for me over the years.
1. Vertical layouts provide the quickest comprehension
Place labels directly above form fields and any hints directly below.
There are certain cases where adding place holder text inside of empty fields is a good option but the vertical layout is your bread and butter.

2. Inline validation is better than listing all errors at once
When a form field loses focus it is always good to instantly let the user know when something is wrong so they don't have to figure it out later.

3. Forgiving inputs are better than strict validation
Be happy with anything the user provides. Don't make them type their address and phone number a certain way and provide instant inline feedback in cases where validation can't be avoided.

4. Fewer fields are better than more fields
Only ask for input from the user as a last resort! If you don't absolutely need to know it then don't ask the user to provide it. (or at the very least let them know which fields are required and place them up top)

5. Natural language is better than cold hard fields
Depending on the situation using natural language has shown to increase conversion rate by as much as 28% over a standard list of fields.
