"Quick bug: the form should also send a copy to our CRM."
That's not a bug. But if your contract doesn't say what a bug is, you'll fix it for free, and the next one, and the one after that. Here's the rule I use, plus the clauses that make it stick.
The rule
- Bug: the built work doesn't match the signed spec. You fix it free.
- Change: new or different behaviour from what the spec says. That's a change order.
The rule only works if "the spec" is testable. So write acceptance criteria per feature — short, checkable statements of what "done" means. "Contact form sends submissions to info@client.com and shows a confirmation message" is testable. "Working contact form" is not.
Triage in under 2 minutes
Before you estimate or reply, put every request into one bucket:
| Category | Meaning | Next step |
|---|---|---|
| A — In scope | Already covered by the spec / current round | Confirm and schedule, no fee |
| B — Clarification | Same deliverable, wording or detail only | Answer, no change order |
| C — Change | New or expanded work, extra round, new stakeholder | Impact brief, then options |
| D — Blocked | Missing input, access, or decision owner | Pause related work |
The CRM example above is a C: a new integration the spec didn't list.
Write the exclusions down
A typical small web project scope should name what's not included:
- Copywriting and image sourcing
- Third-party plugin/API bugs outside your code
- Hosting, domain and SaaS subscription fees
- Ongoing maintenance after the warranty window
- New features discovered after the spec is signed
Three clauses worth adding
- Acceptance testing: Client has [5] business days after staging handover to report spec deviations; otherwise the milestone is accepted.
- Warranty: Bugs in Developer's code reported within [14] days of launch are fixed at no cost. New requests are billed separately.
- Access & credentials: Client provides hosting/registrar access; Developer stores credentials only for the project and returns/rotates them at handover.
Red flags at the proposal stage
- "Should be simple, like Airbnb but for…"
- No access to hosting/DNS until the week of launch
- "We'll figure out the spec as we go" — on a fixed price
If you ask for a deposit before starting (you should), here's a free deposit-request script: https://opspack.vercel.app/deposit
If you want this pre-filled: the Client Contract & Scope Kit for Web & Software Developers ($19) has the proposal, SOW, plain-English services agreement, change-request triage sheet, scope-creep client emails, a revision log and the developer niche guide this post is based on: https://opspack.vercel.app/kits/client-contract-kit-developers — or browse all templates from $5: https://opspack.vercel.app/kits
Templates are a starting point, not legal advice.