How to Scope a Fixed-Price Web Project So the Quote Actually Means Something
What a fixed-price web quote needs in writing before it's comparable, and when fixed-price is the wrong model entirely.
A fixed price is a promise about scope, not about cost
A fixed-price quote is not really a promise about money. It is a promise about what work is included for that money. If the scope behind the number is vague, the price is vague too — it just doesn't look that way on the invoice. Two vendors can quote "a company website with a booking system" and land on very different numbers, not because one is padding their margin, but because they are silently pricing two different projects. The number is only comparable once the scope underneath it is written down in enough detail that both sides would build the same thing.
This matters most in Malaysia's SME web market, where quotes are often exchanged over WhatsApp in a paragraph or two, and "scope" lives in someone's head rather than on paper. That works fine until the first disagreement — usually somewhere around week three, when the client asks for something that feels obviously included and the vendor says it's an add-on.
What belongs in a scope document
A workable scope document for a fixed-price web project should cover five things, in writing, before any deposit changes hands.
Deliverables, stated as outcomes, not features
"A responsive website" is a feature description. "A five-page website (Home, About, Services, Contact, one landing page), built on [named platform/CMS], deployed to [named hosting], with final content supplied by the client in [format] before build starts" is a deliverable. The difference is that the second version can be checked off. Vague deliverables are the single biggest source of scope disputes, because both parties can honestly believe they agreed to different things.
Acceptance criteria
Acceptance criteria answer one question: how do we both know this is done? For a page, that might be "renders correctly on the three most recent versions of Chrome, Safari and Edge, passes on mobile viewport widths from 360px, and matches the approved design file within reasonable tolerance." For a form, it might be "submissions arrive at the specified email address and are stored in the database within 30 seconds." Without acceptance criteria, "done" becomes a matter of opinion, and opinions are exactly what a fixed price is supposed to remove from the conversation.
What's explicitly excluded
A good scope document names what is not included, not just what is. Content writing, professional photography, stock licensing, third-party subscription costs, SEO work beyond basic on-page structure, ongoing maintenance after launch — if these aren't named as excluded, a reasonable client will assume they're in. This is the section vendors most often skip, because it feels like it's drawing attention to what the client isn't getting. It's actually the section that protects both sides.
Assumptions and dependencies
Every quote rests on assumptions: that the client will supply final copy by a certain date, that a particular third-party API will behave as documented, that no existing system needs to be reverse-engineered because there's no working staging environment to test against. Writing these down doesn't guarantee they'll hold — but it means that when one doesn't, there's a documented basis for a change request instead of a fight about who's at fault.
Timeline and milestones tied to the deliverables above
A date without a deliverable attached to it isn't a milestone, it's a hope. "Design approved by [date]" is a milestone. "Website launched" without qualification is not, because launch depends on decisions the client hasn't made yet.
Why two "fixed price" quotes can diverge sharply
Once you've seen scope documents side by side, the reason two "fixed price" numbers can diverge sharply stops being mysterious. One vendor has priced three rounds of design revision and the other has priced one. One has included a staging environment and a two-week post-launch bug-fix window; the other's price ends the moment the site goes live. One vendor's "e-commerce store" means a catalogue of 40 products with manual order handling; another vendor read the same brief and priced inventory sync, automated invoicing and a customer account portal. None of these vendors is necessarily wrong or dishonest — they are answering different briefs because the brief was never specific enough to be answered only one way.
The practical result is that a client comparing three "fixed price" quotes without matching scope documents is not comparing prices at all. They're comparing three different, unstated guesses about what "the project" means.
Handling change requests without wrecking the relationship
Scope will change. New requirements surface, the client's business changes shape mid-build, or something assumed to be simple turns out not to be. A fixed-price arrangement survives this only if change is handled as a defined process rather than an argument:
- The request is written down — even a short WhatsApp message restated back as "confirming you'd like X added" counts.
- It's assessed against the original scope document — is this inside what was agreed, a reasonable interpretation of it, or clearly new work?
- New work gets a price and a revised timeline before it starts, not after. Retroactive change orders are where trust breaks down.
- Both sides sign off, even informally, before work resumes on the changed item.
None of this needs to be adversarial. Most change requests are small and reasonable. The point of the process isn't to police the client — it's to make sure "small addition" doesn't quietly become half the project again, unpaid.
When fixed-price is the wrong model
Fixed-price works when the outcome can be specified in advance: a defined set of pages, a defined feature, a defined integration with known inputs and outputs. It works badly when the real task is discovery — when nobody, including the client, yet knows exactly what "done" looks like. Early-stage products, systems that depend on an undocumented legacy platform, or ongoing improvement work with no natural end point are usually better served by a time-and-materials or retainer arrangement, where the client pays for effort and steers direction as understanding improves. Forcing that kind of work into a fixed price usually just means the uncertainty gets priced in as padding, or the vendor eats the risk and cuts corners to protect margin. Neither serves the client well.
A written scope, either way
None of this requires expensive tooling — a shared document with the five sections above, agreed before a deposit is paid, is usually enough. What it does require is treating the scope document as the actual contract, and the price as something that only means what it says once the scope behind it is written down.
If you have a project brief and want a second opinion on whether it's specific enough to quote against — or want a written scope and acceptance criteria drawn up before you approach vendors — JagaWeb's Fixed-Scope Project (from RM30,000, excluding SST) starts with exactly this kind of scoping conversation before any development work begins. It's one option among several ways to get a project scoped properly; happy to talk through whether it fits before anything is committed.
Ready to verify who owns your website?
Replace uncertainty with a decision-ready ownership and access report. The fixed Ownership & Access Review is RM1,500 before SST and includes a 30-day action plan.