1
Identify both parties with full legal entity names
Enter the registered legal name of both the client and the developer or consulting firm, along with entity type, state or country of formation, and principal address.
💡 Cross-check each party's name against their corporate registry or business license before execution — a mismatch creates enforcement problems later.
2
Draft a detailed Statement of Work as Schedule A
List every feature, module, and deliverable with acceptance criteria specific enough to determine whether each item passes or fails review. Reference wireframes, technical specifications, or user stories by name and version.
💡 Vague scope is the primary driver of billing disputes on software projects. If you cannot define done, you cannot enforce the contract.
3
Set the milestone schedule and payment triggers
Break the project into 3–6 milestones with specific dates and payment amounts. Tie each payment directly to an accepted deliverable — not to calendar dates alone.
💡 A kickoff deposit of 25–30% of the fixed fee before work begins protects the developer against client non-payment and gives the client a cost to recoup if the developer underperforms.
4
Define the IP ownership and background IP carve-out
Confirm that all custom deliverables are assigned to the client upon full payment. List any developer-owned tools, frameworks, or libraries that will be incorporated, and grant the client a perpetual license to use them.
💡 Have the developer disclose all open-source components at the time of contracting — GPL-licensed code in a commercial product can void proprietary IP claims.
5
Set the liability cap and carve-outs
Enter the liability cap amount (typically the total contract value or 12 months of fees). Confirm that fraud, willful misconduct, IP indemnification, and confidentiality breaches are excluded from the cap.
💡 For large engagements, consider requiring the developer to carry professional indemnity (errors and omissions) insurance and name the client as an additional insured.
6
Complete the change order procedure
Specify the written format for change requests, the developer's turnaround time for impact assessments, and the signature requirement before any out-of-scope work begins.
💡 Include a clause stating that work performed without a signed change order is at the developer's risk — this eliminates the 'I thought you approved it verbally' dispute pattern.
7
Set termination notice periods and post-termination obligations
Enter notice periods for convenience termination (typically 15–30 days) and the cure period for material breach (typically 10–15 days). Confirm the developer's obligation to deliver all in-progress work product upon any termination.
💡 Include a payment obligation for work completed to the termination date — without it, a client who terminates mid-project may refuse to pay for partially completed work the developer can no longer use.
8
Execute before any work begins
Both parties must sign the agreement and any attached SOW before the developer writes a single line of code. Post-start execution weakens IP assignment and change-order protections.
💡 Use a dated e-signature platform to create a timestamped execution record. Store the fully signed agreement alongside the final SOW in a shared secure location both parties can access.