Most arguments about software contracts are really arguments about who absorbs uncertainty. Hourly billing hands all of it to the client. A fixed fee hands it to us — on purpose. Here is the document that makes that trade legible, drawn out part by part.
The scope boundary is the whole document.
Everything else hangs off one dashed line. Inside it: the work we have committed to deliver for a fixed number. Outside it: everything else in the world. People assume the hard part of a SOW is describing the work. It isn't. The hard part is describing the work's edge precisely enough that both sides recognize it when they hit it.
Deliverables are nouns, not effort.
A deliverable is a thing you can point at — a migrated dataset, a deployed service, a signed-off design. We do not list "two weeks of backend work." Effort is our problem to estimate. Yours is to receive something that exists and works.
Acceptance criteria are written before, not after.
We agree on the pass/fail test up front, while nobody is under deadline pressure and nobody is annoyed yet. Acceptance written after the build is just a negotiation with extra steps.
A fixed fee doesn't make us faster. It makes us honest about what "done" means, because we wrote the definition down before we knew how hard it would be.
The change-control valve, and the excluded column.
New requests are welcome. They go through the valve as a fresh line item with its own fixed price — not absorbed silently into a budget that was never sized for them. The excluded column exists so "excluded" never gets confused with "refused." It is simply work that hasn't been priced yet.
Why fixing the price re-prices the incentives.
- Hourly rewards the slowest path. Fixed fee rewards the shortest path to acceptance.
- Scope creep stops being a quiet margin leak and becomes a visible, pre-agreed line item.
- We are paid to ship the deliverable, not to be present. Boring, finished, signed-off — that's the win condition.
— Suhail Abidi. Walnut Creek, CA. June 2026.
Comments