The biggest cost driver is rarely the choice of framework — it is uncertainty. Each unanswered question in the specification is converted into a contingency somewhere in the quote. A supplier that does not know what happens on the unhappy path must assume a pessimistic case. Spending a week on requirements work often reduces the total much more than haggling over hourly rates.
Integrations tend to be another reliable source of cost. A screen that writes to your own database is low risk; the same screen wired into an old accounting system is a different problem. The unknown lives in the counterparty: undocumented APIs, slow approval cycles, inconsistent data. Ask the estimator to list every external system, because this is where estimates break.
Non-functional requirements quietly rewrite the budget. An internal tool used by a small internal team has almost nothing in common with the same functionality serving thousands of external customers. Audit and compliance requirements, high availability, load handling, traceability and react native app development company multi-language support add weeks of work. Put them in the brief or expect them to arrive later as change requests.
The mix of people behind the number matters a great deal. A rate card reveals very little on its own: one senior developer at a premium rate is often less expensive in the end than two juniors who need supervision and rework. Ask as well which roles are billed: web based software agency uk coordination, quality assurance, infrastructure work and UX design are legitimate costs, but they must be visible in the estimate.
The build price is never the full cost of ownership. Budget for infrastructure, paid APIs, monitoring and a change budget each year. A reasonable rule of thumb holds that a live system consumes a recurring percentage of the initial investment per year in fixes, updates and small changes. Leaving it out of the budget has always been the most common budgeting mistake.