← All posts

7 min read

Fixed Price vs Hourly App Development: Which Model Fits Your Project?

Fixed price vs hourly app development explained for founders: how each model works, who carries the risk, when milestones fit, handling change requests and red flags.

  • Freelancing
  • Pricing Models
  • Project Planning
Cover illustration for Fixed Price vs Hourly App Development: Which Model Fits Your Project?

Founders often ask me which is cheaper: fixed price or hourly. It’s the wrong question, though an understandable one. Both models can produce the same app for a similar total. What they really change is who carries the risk when things turn out differently than planned, and in software, something always does.

I’ve worked under both models since I started freelancing on Upwork in 2021, and the choice matters more than most people expect. Pick the wrong one for your project and you get either a developer quietly cutting corners to protect a fixed budget, or an open-ended bill with no clear finish line.

Here’s how each one works, when it fits and what to watch out for.

Fixed price: one scope, one number

In a fixed-price project, you agree on a defined scope and a total price up front. The developer delivers that scope for that price.

What it’s good at: budget certainty. You know what you’re spending before you start, which helps when you’re raising money or answering to a board.

Where the risk sits: mostly with the developer, at least on paper. If the work takes longer than estimated, they absorb it. That sounds great for you, and sometimes it is. But it has side effects:

  • The developer has to price in uncertainty, so a fixed quote usually includes a buffer.
  • The scope has to be written down in detail, and anything not written down is out of scope.
  • Every change becomes a negotiation, because it affects a number both sides already agreed on.

The subtle risk is incentives. When a fixed-price project runs over, the developer has a reason to finish fast rather than finish well. Good developers resist that. But the pressure is built into the model.

Hourly (time and materials): pay for the work done

In an hourly or time-and-materials model, you pay for the time actually spent, usually with regular reports of what was done.

What it’s good at: flexibility. You can change direction, reprioritize after user feedback or add a feature without renegotiating a contract. Nobody needs to price in a buffer, because you only pay for real work.

Where the risk sits: mostly with you. If a feature takes twice as long as expected, you pay for twice the time. That’s why hourly work needs visibility: clear reports, regular demos and a budget ceiling you check against.

The incentive concern runs the other way here. In theory, a developer paid by the hour benefits from going slowly. In practice, the fix is transparency. If you see working software every week or two, slow progress is hard to hide.

Milestone-based: a middle path

Milestone-based pricing splits the project into chunks, each with its own scope and price. Each milestone ends in something you can install, test and approve before the next one starts.

It combines some of the strengths of both:

  • Each milestone is small enough to estimate well, so the price is reliable.
  • You see progress regularly and can stop or adjust between milestones.
  • Changes are easier: you reshape the next milestone instead of renegotiating the whole project.
  • The developer gets paid as work is delivered, not all at the end.

On a platform like Upwork, milestones map directly onto how payments work: funds for a milestone are set aside and released when you approve the delivery. That gives both sides some protection.

Side by side

Fixed price Hourly / T&M Milestones
Budget certainty High Low to medium Medium to high per milestone
Flexibility to change Low High Medium
Who carries overrun risk Developer (priced in) Client Shared
Needs a detailed spec Yes, up front No Per milestone
Best for Small, well-defined work Exploratory or ongoing work Most new app builds

When each one fits

Fixed price fits well-defined work. Fixing a known list of bugs, adding a clearly specified feature to an existing app, an app update for a new store requirement, a small app with a short feature list and finished designs. If you can write the scope on one page and both sides agree there are few unknowns, fixed price is a good choice.

Hourly fits exploratory or ongoing work. An early-stage product where you’ll change direction after user feedback. Maintenance and support after launch. Investigating a problem nobody fully understands yet, like an intermittent crash in an app you’ve inherited. When you can’t define “done” in advance, pretending you can with a fixed price just moves the problem into a change-request argument later.

Milestones fit most new builds. A typical app sits in between: you know roughly what you want, but details will move as you see it working. Breaking it into milestones keeps the price predictable without freezing the whole plan.

Change requests are where models are tested

Every project changes. Founders see the app on their phone and have new ideas, and many of them are good. How a model handles change is what separates a calm project from a tense one.

What I want in any model is a simple, agreed process:

  1. The new idea is written down.
  2. It gets sized.
  3. You decide: add it (and adjust the budget or timeline), swap it for something of similar size, or park it for later.

In fixed price, that process is essential, or every change becomes friction. In hourly, it’s still useful, because “small” additions add up quietly. With milestones, most changes simply go into the next milestone’s scope.

What I avoid is absorbing changes silently. It feels generous in the moment, but it hides the real cost and erodes trust at the end of the project when the timeline has slipped and nobody remembers why.

Discovery: the bridge between the two

If your project doesn’t feel “well-defined” enough for a fixed price, but an open-ended hourly arrangement makes you nervous, a discovery phase is the bridge.

Discovery is a small, separately priced piece of work before the build. We go through the flows, agree on what’s in version one, check the risky integrations and write a scope with sizes for each feature. I explain how that turns into numbers in how I estimate a mobile app project.

After discovery, the unknowns are smaller, so the build can be priced as milestones with much more confidence. And you keep the scope document, whoever builds the app.

Red flags in either model

Fixed price red flags:

  • A quote for a complex app based on a single short call, with no written scope.
  • A price far below everyone else’s, with no explanation of what’s excluded.
  • No mention of how changes are handled.
  • Full payment up front, or nothing until the very end.

Hourly red flags:

  • No estimate or budget range at all, just “we’ll see.”
  • Vague time reports like “development, 8 hours” every day.
  • Weeks without a build you can install.
  • No agreed ceiling or check-in point when the budget is getting used up.

Red flags in both: the developer owns your store accounts or code repository, there’s no written agreement on who owns the code, or questions about testing and handover get vague answers. Those matter far more than the pricing model. I cover more of this in working with a remote freelance developer.

How I usually structure it

For new apps, I usually suggest milestones. If the scope is fuzzy, we start with a short discovery phase. Then the build is split into milestones that each end in an installable build: for example, sign-in and the core screen first, then payments, then notifications and polish. Each milestone has a written scope and a price, and change requests go through the process above.

For small, clear jobs, a single fixed-price milestone is simpler and works well. For maintenance after launch, where the work is a stream of small, unpredictable tasks, hourly usually makes more sense for both sides.

The model is a tool. The goal is the same either way: you always know what you’re paying for, what’s been done and what’s next.

Takeaways

  • Fixed price and hourly differ mainly in who carries the risk of surprises, not in what the app costs.
  • Fixed price fits small, well-defined work; hourly fits exploratory and ongoing work.
  • Milestones are a practical middle ground for most new app builds.
  • Agree on a change-request process before the project starts, whatever the model.
  • A discovery phase turns a fuzzy idea into something you can price with confidence.
  • Watch for red flags like no written scope, vague reports and developers owning your accounts.

If you’re deciding how to structure your own app project, get in touch and we can work out which model fits.

Comments

Questions, corrections or your own experience — leave a comment below (GitHub sign-in).