"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:

  1. Copywriting and image sourcing
  2. Third-party plugin/API bugs outside your code
  3. Hosting, domain and SaaS subscription fees
  4. Ongoing maintenance after the warranty window
  5. 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.