Define deliverables, acceptance criteria, and milestones clearly. State a fixed fee or hourly rate with a cap.
Specify who owns code, design, and copy after payment. Many jurisdictions use work-for-hire clauses or explicit IP assignment.
Add an NDA when internal data is involved and document the invoicing flow. Payment after signed acceptance reduces collection risk.