The dominant factor is not technology — it is uncertainty. Each unanswered question in the brief is converted into padding inside the number you receive. A supplier that cannot see what happens on the unhappy path must assume the worst. Putting two weeks into requirements work can cut the overall figure much more than negotiating the rate.
Integrations remain the next major multiplier. A screen that writes to your own database is predictable; the same screen wired into a payment provider and a CRM is a different problem. The effort hides in the third party: poor documentation, long certification processes, fields that mean something different on each side. Ask the estimator to break integrations out as separate items, since this is the usual source of overruns.
The requirements nobody writes down quietly rewrite the estimate. A tool used by a handful of staff is a very different build from the same idea handling a hundred thousand users. Compliance work, uptime targets, performance under load, traceability and accessibility add measurable effort. State them early or you can expect them priced as extras.
Who actually does the work changes the arithmetic. An hourly rate tells you almost nothing on its own: one senior developer at a higher rate is often cheaper overall than two inexperienced developers who require heavy code review. Check too which roles are billed: delivery management, quality assurance, release engineering and analysis have to be done by someone, but they should be itemised.
The build price is rarely the full cost of ownership. Plan offshore development team for moscow hosting, node js real time development third-party licences, monitoring and an ongoing support budget each year. A useful planning figure holds that a live system needs a recurring percentage of the initial investment annually simply to stay current. Leaving it out of the budget has always been the classic mistake.