Hourly, fixed price, or milestones: pick the failure mode you can live with
Sandeep Kumar · 24 July 2026 · 6 min read
Billing arguments start before the invoice. They start when the model does not match how well the work is known.
Hourly
Best when the scope is open: a bug you have not reproduced, a backlog, support after launch.
The failure mode is an unbounded bill. The fix is a log — hours against a task, a short note — and a ceiling you review before it is crossed. “Trust me” is not a log.
Fixed price
Best when the deliverable is small and specific. A defined integration. A closed set of screens.
The failure mode is scope creep. Either the developer absorbs it and rushes, or you get a change request for every sentence. The fix is a written list of what is in and what is out, before work starts. Additions are a new price.
Milestones
Best for a larger build where you want a fixed total but refuse to wait until the end to see software.
The failure mode is a milestone called “phase 1” that nobody can demo. Name the milestone as something you can click: “sign-in and the empty dashboard, on staging.”
A short way to decide
- You know the outcome and it is small: fixed price.
- You know the outcome and it is large: milestones.
- You do not know the outcome yet: hourly, with a check-in.
- There is no end date: hourly or a monthly hour block. See maintenance.
Mixing models is normal. A milestone build, then hourly maintenance, is a healthy sequence. The protection is not the label. It is a sentence that says what done looks like. That sentence lives in the quote, which is why pricing and process are separate pages: one is commercial, one is the sequence.
Get a fixed quote
Send what you want built. You get a written price or the questions that block one.
Free developer toolsif you want a formatter, counter, or generator without starting a project.