The dominant factor is rarely the technology stack — it is how much is still undecided. Each unanswered question in the requirements becomes a buffer inside the number you receive. A supplier that has no visibility into the exceptions and edge cases must assume a pessimistic case. Spending a week on a discovery phase frequently cuts the overall figure by far more than haggling over hourly rates.
Third-party integrations tend to be the second big multiplier. A form that saves data is easy to estimate; the same functionality connected to a legacy ERP is not. The unknown hides in the third party: rate limits and sandbox access, slow approval cycles, inconsistent data. Ask any vendor to break integrations out as separate items, as this is where estimates break.
Quality attributes can easily double the number. A tool used by a small internal team costs far less than the same feature set handling a hundred thousand hire memcached developer users. Security reviews, high availability, load handling, audit logging and localisation add weeks of work. State them early 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 can be less expensive in the end than two juniors who need heavy code review. Ask as well which roles are billed: project management, QA, DevOps and UX design are legitimate costs, but they should be named rather than hidden inside a blended rate.
The number in the proposal is rarely what you will actually spend. Budget for infrastructure, third-party licences, monitoring difference between vue and react an ongoing support budget each year. A reasonable rule of thumb is that any production system requires a meaningful share of the original budget annually in fixes, updates and small changes. Ignoring this has always been the classic mistake.
