I have been reading a few people's write ups lately about their feelings on contracts. Contracts are important, especially when there is a lot of money, details, or unfamiliar clients involved. I am personally intimidated by big detailed contracts, but fortunately for small "mom and pop" websites a small, simple contract or written agreement seems to work for me. I generally tend to point out the the discussed features to be implemented, the negotiated amount to implement the features, and how payments will be made.
Pointing out the features on the agreement will help prevent scope creep (when the client starts asking you to implement more features half way through the project). If it wasn't in the agreement make it clear you will bill them for it. It also benefits the end client since you as the developer have agreed to develop that feature.
Generally, I find it safer to require a deposit. This way if half way through the project the client's company goes belly up you at least haven't waisted all your time.
I've put together a few articles worth reading on contracts.
- Intro to Freelancing and Contracts
- Dealing with Clients who don't Pay Up
- Do You Use Contracts?
- Do You Need a Contract for Freelance Work?
- 5 Free to Use Freelance Design Contract Templates
Not only are these articles a good resource but also check out the comments. A lot of freelancers stop by these sites and leave their "lessons learned". One can learn a lot from the experience of others.
I am no attorney so this is not legal advice.