A WhatsApp chat and a verbal agreement are not a contract. Here's what should be in writing before any web development project starts.
Most disputes between a client and a web developer in Pakistan aren't about bad code. They're about scope that was never written down, a delivery date that existed only in a chat message, or ownership of the finished site that was never actually confirmed. A good first conversation and a friendly tone don't prevent any of these problems, because they're not about trust, they're about what happens when two people remember an agreement differently three weeks later.
A contract doesn't guarantee a good working relationship, and it doesn't need to be complicated or lawyer-drafted to be useful. What it does is remove the ambiguity that turns a minor disagreement into a real dispute, by giving both sides something specific to point back to instead of relying on memory.
Exact deliverables. The contract should list exactly what's being built: number of pages, specific features, and just as importantly, what's explicitly excluded. "A website" is not a deliverable a contract can enforce. "A 6-page responsive website with a contact form, a WhatsApp button, and basic SEO structure" is something both sides can check against once it's delivered.
Total price and payment schedule. The full price, not a starting estimate, along with exactly when each payment is due and what triggers it. 50% upfront and 50% on delivery is the standard, fair split in Pakistan, and a contract should state this plainly rather than leaving it to be negotiated after the deposit is already paid.
A real delivery date. Not "a few weeks," an actual date, ideally with a note on what happens if that date is missed, whether that's a revised timeline, a discount, or some other agreed consequence.
File and account ownership. The contract should state plainly that every file, every credential, and the domain, if it was registered on the client's behalf, belongs to the client on payment. This is the single most commonly skipped clause in informal agreements, and the one that causes the most damage when it's missing, since it's what determines whether a business can actually walk away and take its website with it.
Revision rounds included. How many rounds of changes are covered in the agreed price before additional revisions start being billed separately. Without this written down, "a few tweaks" from the client and "an entirely new design direction" from the developer's perspective can be the same request, and only a written scope prevents that argument.
What happens after launch. Whether there's a support window included after the site goes live, what counts as a bug fix versus a new feature, and what a change costs once that window closes.
Web development projects tend to stretch over weeks, involve several rounds of back-and-forth on design, and often change slightly in scope as the client sees the site take shape and decides they want something added. Each of those points, the initial scope, a mid-project addition, a design change, is a moment where two people's memory of what was agreed can quietly diverge. A contract doesn't need to anticipate every possible change. It needs to make clear that any change gets written down when it happens, rather than left to be sorted out at the end when both sides have a different story.
A developer who resists putting terms in writing at all is the clearest warning sign there is, regardless of how confident or professional they sound in conversation. Beyond that outright refusal, watch for contracts that are vague specifically on ownership, using language like "access will be provided" instead of a direct statement that files transfer to the client. Watch for contracts that demand full payment upfront with no delivery milestones tied to it, and for delivery dates left open-ended with phrasing like "timeline to be confirmed" and no actual follow-up date attached.
A written agreement isn't one-sided. It protects the developer as much as the client, since it also defines what counts as the client's responsibility, such as providing content and feedback on time, and what happens if the client causes delays. A contract that only lists obligations for one party and none for the other is usually a sign it was drafted to extract maximum leverage rather than to set fair, working terms both sides can actually live with.
A contract is only as good as the scope it's built on, and a strong scope call happens before a single clause is written, not after. It should cover the exact pages and features the client needs, who is responsible for supplying content like text and photos, what platform or approach the site will be built on, and a realistic delivery date based on that specific scope rather than a generic estimate. A developer who skips straight to sending a contract without ever asking these questions is either reusing a generic template regardless of the project, or hasn't actually thought through what's being built yet, and either way the contract that follows will inherit that vagueness.
If a developer's draft contract feels thin, it's reasonable to ask for specific language rather than accepting a vague summary. Useful clauses to request in writing include: "All source files, assets, and credentials transfer to the client upon final payment," "Payment is due 50% upon signing and 50% upon delivery and client approval," and "Delivery is confirmed for [date]; delays beyond [X] days will be communicated in writing with a revised date." None of this is unusual or aggressive to ask for. A developer running a professional operation will have language like this ready, or will add it without pushback when asked.
Some developers, especially individual freelancers, will send something closer to an invoice than a contract: a price and a delivery date, nothing more. This isn't automatically a scam, but it is thin protection. In that situation, it's reasonable to reply in writing, even over WhatsApp, restating the scope, ownership, and payment terms as you understood them and asking the developer to confirm. A clear written confirmation, even informal, is far better than nothing, and a developer who won't confirm even that much in writing has told you something worth knowing before paying a deposit.
Every project, including Meta Ads, gets a clear written agreement before any work begins: exact deliverables, exact price, exact delivery date. For web development specifically, that includes full file and account ownership from day one, meaning nothing is ever held on our end after payment, and a 50% upfront, 50% on delivery payment split, so both sides carry fair, balanced risk rather than one side carrying all of it.
Tell us about your business and we will get back within 24 hours.