The dominant factor is never the technology stack — it is almost always how much is still undecided. Each unanswered question in the brief is converted into a contingency somewhere in the quote. A team that has no visibility into what happens on the unhappy path must assume a pessimistic case. Investing a few days in requirements work often reduces the total by far more than negotiating the rate.
Connections to other systems tend to be the next major multiplier. A feature that touches only your own data is easy to estimate; the same feature talking to an old accounting system is another matter entirely. The cost hides in the counterparty: rate limits and sandbox access, web development outsourcing slow approval cycles, data that does not match your model. Ask the estimator to list every external system, as that is where the numbers slip.
The requirements nobody writes down quietly rewrite the budget. A tool used by a small internal team is a very different build from the same feature set handling thousands of external customers. Compliance work, high availability, load handling, data retention rules and multi-language support add weeks of work. Put them in the brief or expect the estimate to move later.
Who actually does the work matters a great deal. An hourly rate says little on its own: one senior developer at a premium rate frequently turns out to be less expensive in the end than two juniors who require constant review. Check too who else is billed: project management, testing, infrastructure work and design are real work, but they must be itemised.
The quoted figure is rarely the total cost. Budget for infrastructure, third-party licences, monitoring and a maintenance allowance each year. A common working assumption holds that a live system consumes a meaningful share of its original build mvp development cost every year simply to stay current. Leaving it out of the budget has always been the most common budgeting mistake.
