Here is my take on what constitutes a 'good contract' with a client:
- The basics - understand the scope of the task in hand
- Expectations - set out what the client can expect to receive in way of service levels
- What you will and won't do - the client needs to understand the limits of your input, and
- What you expect - the client needs to agree to a level of partnership on the project
- The commercial stuff - get the T's & C's right and agree commercial terms
- If the scope of work changes, go back to step 1.
Never ever skip a stage, even if the client pushes hard for you to do so, it will only work out badly for the client and the project if you do.
Remember, the aim of the game is to successfully complete the project, provide good service and be profitable.