Hourly billing quietly puts the client and the vendor on opposite sides. The client wants the work done quickly. The vendor earns more the longer it takes. Nobody has to act in bad faith for the incentive to point the wrong way, and the relationship ends up policing timesheets instead of shipping. We price differently: fixed scope, fixed budget, written down before anyone starts. Here is the structure behind it.
A free discovery call, then a written scope
We do not quote from a vague brief. Every engagement begins with a discovery conversation, after which we issue a written technical scope: what we are building, what is explicitly out of scope, the acceptance criteria, and a fixed price. The client holds us to that document. If we underestimate, that is our risk to carry, not a surprise line on their invoice. Writing down what is out of scope matters as much as writing down what is in it, because most disputes are not about what was promised but about what one side assumed was included.
Re-scoping is normal, and it happens in the open
Requirements change. That is expected, not a failure. What matters is that the change is handled honestly, so our rule is simple. New work becomes a written change order with its own fixed price, agreed before it starts. Nothing is absorbed quietly into a running rate, because there is no running rate. We re-scope at natural boundaries, usually the end of a sprint, so the picture stays clear. This is the language that prevents arguments. The client always knows the number before the work happens, and the vendor never does unpaid work hoping to make it up later.
Acceptance criteria you can actually test
Every scope item carries a definition of done that can be checked: a behaviour, a page, a flow, a measurable result. "Improve the dashboard" is not acceptance criteria. "The dashboard loads the last 30 days of orders in under two seconds and exports to CSV" is. Concrete criteria protect both sides. The client knows what they are getting, and the team knows when it is finished.
Handover is part of the price
A fixed-scope engagement ends with the client owning everything: the code in their repository, the credentials in their password manager, the content keys with their team. We avoid architectures that create lock-in, because lock-in is just hourly billing deferred. The result is boring in the best way. No invoice surprises, no arguments about hours, and no misaligned incentive. Both sides know the scope, the price and the finish line on day one, and can spend the engagement building instead of negotiating.