Two slots open this quarter Pune, India / 13:00–22:00 IST React and Node only Book a 30 minute call
reactdevstudio
Contact Book a call
Work Hire React developers Hire Node developers Node services Offshore development Blog About Contact
Book a 30 minute call
Home/Blog/What React development costs, and what moves the number
cost / react 10 min read Updated August 2026

What React development costs, and what moves the number

Integrations, data migration and permissions decide the price. Screen count, which is what every estimate request leads with, barely matters.

Post author

Yogesh Jadhav

Founder, reactdevstudio · Pune

Almost every request for an estimate arrives as a screen count. Fourteen screens, a dashboard, a settings page. It is the most natural way to describe an application and one of the least useful ways to price one: we have built fourteen-screen products in five weeks and eleven-screen products in five months, and the difference had nothing to do with the screens.

The short version

Screen count is a weak predictor. Integrations, migration and permissions are strong ones.

Every third-party system is an unknown until someone has actually called it. "It has a REST API" is not reassurance.

A permissions model added late touches every screen and every endpoint, and is the most expensive common change.

Review latency on the client side is a real line item, and it is the one the client controls.

Ask for a range with the assumptions attached. A single number with no assumptions is a number that will change.

What things actually cost

These are the bands we quote, at our own rates, for work we have done more than once. They assume a competent backend already exists or is being built alongside, and a client who reviews within a day.

Marketing site

2 to 4 weeks

Content, forms, good performance, a CMS. Fast because the unknowns are nearly zero.

Internal tool

4 to 8 weeks

CRUD, tables, filters, exports, a role model. Cost sits in the role model, not the tables.

Customer product

10 to 20 weeks

Auth, billing, notifications, real permissions, an audit trail. Our most common shape.

Rebuild of a legacy app

12 weeks to a year

Range is enormous because it depends entirely on the data, not the interface.

The last row is honest rather than useless. When someone asks us to rebuild an existing application, the interface is a known quantity: it is on screen and it can be measured. What cannot be measured from the outside is what fifteen years of production data contains, and that is where the range comes from.

The four things that move the number

In order of how much they move it, and none of them are the thing most estimate requests describe.

Integrations

Each third-party system is an unknown until called. Sandboxes that behave differently from production are the norm, not the exception.

Data migration

Ten years of production data always contains records nobody remembers creating and no validation ever caught.

Permissions

A role model with exceptions touches every screen, every endpoint and every test. Late addition is the costliest common change.

Review latency

A PR waiting four days costs more than a PR taking four hours to write. Entirely within the client's control.

Notice that three of these are backend or organisational realities showing up as frontend cost. That is the usual pattern and the reason "how much for the React work" is a hard question to answer honestly in isolation.

"Nobody has ever been surprised by how long the screens took. They are surprised by the permissions model and the data."

Two of those four sit on the backend rather than the interface, which is why a quote for React work alone is hard to give honestly. The backend side is scoped on the hire Node developers page.

The permissions trap, specifically

This deserves its own section because it is the single most common way a well-estimated project becomes a badly-estimated one, and because it is entirely avoidable at the start and nearly unavoidable later.

The pattern: the first version has two roles, admin and user, which is simple and correct for launch. Then a customer needs someone who can view invoices but not void them, and someone who manages one region, and a read-only auditor. Each addition looks small. Collectively they turn every list into a filtered list, every button into a conditional, every endpoint into an authorisation check, and every test into a matrix.

When to pay for it

At the start Cheapest. A permission check on every endpoint and a capability model in the UI, even if there are only two roles at launch.
At the first exception Manageable. One customer asks for something unusual and you generalise then, before the pattern spreads.
After three exceptions Expensive. Conditionals now live in components, tests are incomplete, and the refactor touches everything.
After a security review Most expensive, and now urgent, which is the worst combination available.

The advice that follows is not "build a full RBAC system on day one". It is narrower and cheaper: put the check in one place from the beginning, so that adding a role later is a data change rather than a search through every component.

A permission model added late is the clearest example of a cost that arrives long after the estimate. The same pattern, at the level of a whole engagement, is in what an offshore team really costs.

How to read an estimate

A number without assumptions is not an estimate, it is a negotiating position. What you want is a range and the list of things that would move it.

You getWhat it meansAsk

A single number

Either padded heavily or about to change. Usually both.

What are the assumptions?

A range with assumptions

Someone has actually thought about it and is telling you where the risk is.

Which assumption is weakest?

A number per screen

The estimate is a spreadsheet, not an analysis.

What about permissions and data?

"We are agile, so no estimate"

Sometimes principled, often evasive. You still need a budget.

What would a two-week spike cost?

Where our interests differ from yours

We benefit from wide ranges, because a wide range is easy to land inside. You benefit from narrow ones. The honest resolution is a paid scoping week: a narrow range costs real analysis, and a vendor giving you one for free has either done this exact project before or is guessing and will reprice later.

If the estimate is coming from an offshore vendor, the eleven questions that sort vendors covers what to ask before you believe the number.

How to genuinely reduce it

Cheapest levers first

01 Write acceptance criteria including empty, error and permission-denied states.
02 Name one reviewer with a 24 hour target. Review latency is the largest cost you control.
03 Put the permission check in one place at the start, even with two roles.
04 Call every third-party API once, in a spike, before it is estimated.
05 Profile the real production data before quoting the migration.
06 Cut screens rather than depth. Half a product done properly beats a whole one done thinly.
07 Do not change the design system mid-build. It is invisible to users and expensive to everyone.

Spike before you scope

Two weeks of investigation on the riskiest integration removes more cost than any negotiation on rate.

Fix the data early

Cleaning the source is nearly always cheaper than writing code to tolerate every historical oddity.

Decide the roles

One afternoon listing every role and exception you can imagine pays for itself several times over.

A performance target is worth agreeing at the same time as the scope, and setting a performance budget covers how to write one both sides can enforce.

What a scoping week actually produces

We keep recommending a paid scoping week, which is self-serving enough that it deserves a concrete description rather than an assertion. Here is what comes out of one, and what it costs relative to getting the estimate wrong.

  1. 01

    Call the riskiest integration for real

    Not read its documentation — call it, with credentials, against a sandbox. Roughly half of integrations behave differently from their docs, and finding that out in week one costs a day instead of a month.

  2. 02

    Profile the actual data

    Row counts, null rates, duplicates, orphans, encodings. Every migration estimate that goes badly wrong was written without someone looking at the real table.

  3. 03

    List every role and exception

    One afternoon with whoever knows the business. This is the cheapest hour available anywhere on the project.

  4. 04

    Write the scope as a document

    What is in, what is explicitly out, what is assumed. The out-list is the valuable half and the one usually missing.

  5. 05

    Give a range with the risks named

    Narrow, with the two or three things that would move it stated plainly, so a change later is a conversation rather than a dispute.

Where our interests differ from yours

A paid scoping week is revenue for us before you have committed to anything, which is a good deal for a vendor. The reason to do it anyway is that the alternative is a free estimate padded to cover what nobody investigated, and you pay for that padding across the whole project rather than once. Ask for the scope document to be yours regardless of whether you continue. Ours is.

Scoping is also how a paid pilot is priced: a fixed fee for a fixed fortnight, refunded if you do not continue.

Fixed price, time and materials, or capped

The commercial model changes the cost as much as the scope does, mostly by changing what each side is incentivised to argue about.

ModelWhat it optimises forWatch for

Fixed price

Budget certainty. The vendor prices your scope risk and keeps the difference if it does not occur.

Every change becomes a change request, and the relationship becomes contractual quickly.

Time and materials

Flexibility and honesty about uncertainty. You pay for what happens.

Requires you to actually track it. Without a burn-rate conversation it drifts.

Capped time and materials

Most of both: you pay for time, the vendor carries overrun past an agreed ceiling.

The cap becomes the estimate. Vendors pad it, so it is rarely as cheap as it looks.

Retainer

Continuity. A fixed monthly capacity for ongoing work with no re-scoping overhead.

Only honest if unused capacity is acknowledged rather than quietly billed.

Our own default is time and materials with a written scope and a weekly burn figure, because it aligns the incentive on both sides towards finishing rather than towards arguing about what was agreed. For clients who genuinely need budget certainty, usually because the money is grant-funded or board-approved to a number, fixed price after a scoping week is the honest way to give it.

"Fixed price does not remove risk. It moves it to the vendor, who charges you for holding it, and then both of you spend the project arguing about what was in scope."

Whichever model you pick, the contract terms behind it are the same, and the contract checklist sets out what to agree before the first invoice.

Questions people ask

+Why can you not give a fixed price from a specification?

We can, and we do for well-defined work, but the price includes the risk of the specification being incomplete, which it always is in some respect. If you want a genuinely tight fixed price, pay for a scoping week first. It is cheaper than the padding.

+Does using a component library reduce cost?

At the start, meaningfully. Later, less than people expect, because the expensive parts are behaviour and state rather than appearance. It also introduces a dependency you will fight the day your design diverges from its assumptions.

+Is TypeScript worth the extra time?

Yes, on anything that will exist in six months, and the extra time is smaller than it looks: roughly a few per cent on writing, recovered many times over in refactoring and in onboarding the next person. On a two-week throwaway prototype, it is arguable.

+What does a scoping week actually produce?

A written scope with a narrow range, the riskiest integration actually called, the data profiled, and a list of what we could not resolve. It is paid, it is yours regardless of whether you continue, and it is the honest alternative to a confident number produced from a call.

Where to go next

If a performance target is part of the scope, setting a performance budget a client will accept covers making it a contract term. If the framework choice is still open, React or Next.js has the cost implications. Our own engagement shapes are on the Node development services page.

Sources

Post author

Yogesh Jadhav

Founder of reactdevstudio. Ten years as a working full stack developer, across SaaS products and client work.

Related, Group B only

Three more on engineering

Engineering posts only, scored within Group B, so a technical reader is never handed a procurement checklist.

react / hiring 14 min

How to hire React developers, the process written out

nodejs / typescript 9 min

Node.js versus Python for your backend

performance / react 9 min

Setting a performance budget a client will accept

Two slots open this quarter.

Send the ticket you would hand over first. You get a written approach in two working days.

Book a 30 minute call

Two paid weeks, one written scope.