Statement of Work and change control
The SOW is the most important document in the engagement — it defines what will be built, what the deliverables are, how completion will be confirmed, and what timeline governs the work. Without a precise SOW, every disagreement about features, performance, or readiness becomes a credibility contest rather than a contract question. Change control provisions attach to the SOW and require that any work outside its scope be documented in a written change order, signed by both parties, before the additional work begins. This single mechanism, more than any other, determines whether scope additions generate revenue or just generate conflict.
Milestone payment schedule with a deposit
Payment terms should tie money to progress, not to the calendar. A milestone-based schedule collects a deposit before work begins — typically 25 to 33% of the total contract value — then releases subsequent payments as defined deliverables are accepted. The deposit isn't just a good-faith payment; it's a signal that the client is financially committed and the agency isn't the project's de facto lender.
Acceptance and sign-off
Acceptance criteria define what "done" means for each milestone. Objective criteria — functional tests passed, performance benchmarks met, a defined bug-severity threshold — give both parties a clear standard, paired with a review window and a deemed-acceptance mechanism so a client can't withhold sign-off indefinitely. This is dense enough to earn its own guide: see acceptance criteria and sign-off clauses for the sample clause language, defect severity tiers, and deemed-acceptance triggers to drop directly into your SOW.
IP assignment conditioned on payment
IP assignment should be conditional: the client earns ownership of the custom deliverables upon receipt of full payment, not before. Until final payment clears, the agency retains ownership of the code. This gives the agency real leverage in a payment dispute without preventing the client from using the software during the project — and means a client who stops paying can't simply walk away with the codebase.
Background IP carve-out for reusable libraries
Every agency builds reusable tools over time — authentication modules, API wrappers, UI components, deployment scripts. If the agreement assigns all results and proceeds to the client without a carve-out, those tools go with the project. A well-drafted carve-out preserves the agency's ownership of pre-existing and independently developed components while granting the client a non-exclusive, royalty-free license to use them as incorporated in the delivered software. The client gets a working product; the agency keeps its toolkit.
Warranty and support window
A warranty clause defines what the agency stands behind after delivery, and for how long — typically 30 to 90 days, covering defects present at acceptance, not problems caused by the client's own modifications or new requirements. Get this wrong and clients expect ongoing support as part of the original fee with no clear basis for you to refuse. The full mechanics — market-standard windows, what to exclude, and sample disclaimer language — are covered in software warranty periods.
Limitation of liability
A limitation of liability clause caps the financial exposure a dev shop accepts under the contract. The most common structure excludes indirect, consequential, and punitive damages entirely and caps direct liability at the total fees paid under the agreement. Without it, a single defect could theoretically expose the agency to claims far exceeding the value of the contract — and in 2026, liability discussions increasingly focus on cybersecurity incidents and data breaches, which makes careful drafting here more important, not less.
Third-party and open-source component disclosure
Modern software is built on open-source libraries, third-party APIs, cloud services, and commercial components. The contract should require the agency to disclose the material third-party components in the deliverable, identify the licenses they're used under, and allocate responsibility for commercial license costs, paid APIs, cloud accounts, and subscriptions. A fixed development price shouldn't silently include unbounded third-party costs — and open-source licenses in particular carry compliance obligations the client inherits at delivery.
Termination with stop-work and payment-for-work-performed
The termination clause resolves what happens when the relationship ends before the project does. A developer-favorable version includes three things: a right to terminate for cause (including non-payment), a right to stop work upon written notice before final termination, and a right to payment for all work performed through the stop-work or termination date. The stop-work right is the part that matters most in practice — it puts the agency in a position to stop accumulating unpaid time while the client decides whether to cure or accept termination, without requiring litigation to get there.