The dominant factor is rarely the choice of framework — it remains uncertainty. Each unanswered question in the brief turns into a buffer inside the number you receive. A supplier that has no visibility into the exceptions and edge cases will assume a pessimistic case. Investing a few days in a proper discovery can cut the total by far more than haggling over hourly rates.
Integrations tend to be the second big multiplier. A screen that writes to your own database is predictable; the same screen connected to a payment provider and a CRM is not. The effort hides in the third party: undocumented APIs, waiting on someone else’s team, fields that mean something different on each side. Ask each bidder to break integrations out as separate items, because that is where the numbers slip.
Quality attributes silently change the estimate. An application used by a small internal team has almost nothing in common with the same functionality serving thousands of external customers. Compliance work, high availability, scalability, data retention rules and localisation all add real engineering time. Write them down at the start or expect them to arrive later as change requests.
The dedicated team vs freelancers you are quoted matters. An hourly rate says little on its own: one senior developer at a higher rate can be cheaper per delivered feature than two juniors who need heavy code review. Ask as well which roles are billed: delivery management, quality assurance, release engineering and design have to be done by someone, but they must be itemised.
The quoted figure is never the full cost of ownership. Expect infrastructure, paid APIs, logging and alerting and a change budget for every year the software development technologies runs. A common working assumption is that any production system requires a recurring percentage of the original budget per year in fixes, updates and small changes. Leaving it out of the budget is the most frequent planning error.
