Work commissioned remotely — a site, an app, a data job, a set of drawings — rarely fails because someone was incompetent. It fails at a seam: what "finished" means, who decides, how many rounds of changes are included, whose fault a three-week delay was, and who owns the files afterwards. Each of those is one clause, and each has a version that reads fine and settles nothing.
Below, seven clauses in the order they cause trouble. For each: the wording that fails, the wording that holds, and the test you can apply to your own draft before signing it.
A scope that describes activity instead of output cannot be finished. "Development of the client's website" is an activity; it has no end state, so any moment can be argued to be either complete or incomplete depending on who benefits.
Supplier will develop a responsive website for the Client including all necessary pages and functionality.
Eleven page templates, listed in Schedule A, each implemented at three breakpoints (360, 768, 1280 px), with a contact form posting to an address the Client supplies.
The test is arithmetic: can a stranger read the clause and count the things? "All necessary pages" cannot be counted; eleven can. Anything genuinely unknown at signature should be named as unknown and priced separately, rather than hidden inside a word like "necessary" that each side reads in its own favour.
The same test applies to any domain. A data job says how many records and in what format. An illustration job says how many pieces at what dimensions. A translation job says the word count and what happens to text found in images.
This is the clause most often missing entirely, and its absence is what turns a finished project into an indefinite one. Without it, delivery has no legal effect: the supplier believes they delivered, the client believes they are still reviewing, and the final payment sits between the two positions for months.
An acceptance clause needs three parts. A criterion — what the deliverable must do to be accepted, ideally the same list as the scope. A window — how long the client has to test it. And a default — what happens if the window passes in silence.
Rejection should have to be specific. A clause that lets the client reject the whole deliverable citing general dissatisfaction gives one side a veto with no obligation to explain it; requiring rejection to identify which listed criterion is unmet keeps the conversation about the agreed list rather than about taste.
"Two rounds of revisions included" sounds precise and is not, because the argument is never about the number. It is about what a round is.
| Undefined term | How each side reads it | Wording that closes it |
|---|---|---|
| A round | Supplier: one consolidated list. Client: each message they send. | "A round is one consolidated written list delivered within five working days of the draft." |
| A revision | Supplier: a change within the agreed concept. Client: anything short of starting over. | "Changes to content, colour, spacing and copy within the approved layout. A different layout is new work." |
| A fix | Supplier: unlimited, and free — it was their error. Client: same thing as a revision. | "Correction of a deviation from Schedule A is not a revision and is not counted." |
That last row matters more than the count. If bug fixes consume the included revisions, a supplier is financially rewarded for delivering fewer defects only in the sense that they keep their own rounds — and a client who reports genuine errors is spending their allowance on them. Separating errors from changes is what makes the number honest.
Almost every remote engagement stalls on something the client owes: copy, photographs, logins, a decision, sign-off from a third person who was never in the room. Contracts routinely list the supplier's obligations in detail and the client's not at all, which makes every delay look like the supplier's.
None of this is defensive lawyering. It is the difference between a delay everybody understood in advance and a delay that arrives as an accusation.
Two separate questions hide inside the word "ownership", and conflating them causes trouble years later, usually when the client wants to move to another supplier.
The first is what transfers. Bespoke work made for this engagement can transfer outright. Things the supplier brought with them — an internal library, a reusable component, a base template — usually cannot, and should not be pretended otherwise. The honest structure is: the client owns the deliverable, and receives a perpetual licence to any pre-existing material embedded in it. A contract claiming the client owns everything including the supplier's toolkit is either untrue or means the supplier cannot work for anyone else again.
The second is what was never either party's. Fonts, stock images, icon sets, third-party libraries and plugins come with their own licences. Those licences do not transfer just because the invoice was paid, and web fonts in particular are commonly licensed by page views or by domain. A clause requiring the supplier to list every third-party asset with its licence and licensee prevents the client discovering, later, that they are using a font nobody bought for them.
The project can be complete, paid, and accepted, and the client can still be unable to change a word on their own site a year later. Handover is what prevents that, and it has to be enumerated because anything unlisted will be the thing that is missing.
| Asset | What "handed over" means | Symptom when it is skipped |
|---|---|---|
| Domain | Registrar account in the client's own name, or a documented transfer with the auth code | Renewal notices go to somebody who left the supplier two years ago |
| DNS | Zone under the client's control, current records exported | Nothing can be moved anywhere without the previous supplier's cooperation |
| Source | Repository transferred or a full archive with history, plus build instructions that a third party can follow | The site works and nobody can rebuild it |
| Administrative accounts | Ownership-level access, with the supplier's own accounts removed afterwards | Former contractors retain live access indefinitely |
| Third-party licences | Named, with the licensee recorded as the client where the terms allow | A font or plugin licence is discovered to belong to somebody else |
| Credentials | Delivered through a channel that is not permanent chat history or email | Live passwords sit forever in an inbox neither side controls |
One note on domains, because it surprises people: registrar policy imposes waiting periods after a fresh registration and after a change of registrant, during which a move between registrars can legitimately be refused. A name opened on the supplier's account at kick-off therefore cannot always be released the week the project closes. The clean answer is to register it in the client's own name on day one and skip the problem entirely.
Termination clauses get skipped because negotiating them feels like predicting failure. They are read only when the relationship has already broken down, which is exactly why they must be written when it has not.
Three things need answering. What is owed — work completed to date, at what rate, and whether partial milestones are payable. What is handed over — normally the same list as clause six, applied to whatever exists at that point. What is destroyed or returned — client data, credentials, and access, with a deadline.
Add a notice period proportional to the engagement and require termination in writing. And separate ordinary termination from termination for cause: the first is a business decision either side can take, the second follows a breach that was notified and not fixed within a stated window. Collapsing them into one clause means every exit becomes an accusation.
A last practical point: keep the document short enough that both sides have actually read it. A seven-clause statement of work that is understood beats a forty-page agreement that was skimmed, because the clauses above only work if the people doing the work know they exist.