Testing gets its own line on our quotes, and nearly every time we're asked: doesn't development already include testing? Can we drop this line?
We can drop it, but we usually don't — and we explain: this line isn't there to clean up after developers. It gives acceptance something concrete to check against.
The line item spells out specifics: one round of functional testing, one round of regression, compatibility across 3 named browsers, a masked sample dataset, who fixes problems, and who signs off when fixed. It's not a "guarantee of no bugs" — nobody can promise that. It's writing down in advance what "done" means.
Removing the line usually doesn't mean skipping testing — it means testing becomes "we'll poke at it along the way". The typical result: the developer clicks through twice, decides it's fine, and after launch the client uses it on another computer with another dataset, uncovering branches nobody ever touched.
Once, a client insisted on removing it and saved a modest amount. Post-launch rework ran 4 days, 2 of them chasing a bug that only appeared when an Excel import contained empty rows. Those 4 days cost more than the line item. When they renewed the next year, they added the line back themselves and asked whether the regression scope could be spelled out more clearly.
We don't dress testing up either. No coverage percentages, no process diagrams — just a checklist, a dozen or so items, a checkbox after each. The person doing acceptance works down it, then signs.
One client, after going through the checklist, said: so this is what you actually test. Good — they were always meant to know.

