What Actually Drives Custom Software Development Cost
The biggest cost driver is not technology — it is unclear scope. Every open question in the brief turns into a buffer in the estimate. A vendor that does not know the exceptions and edge cases has to assume the more expensive option. Spending a week on a discovery phase often reduces the overall figure 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 screen wired into an old accounting system is a different problem. The unknown hides in the other system: rate limits and sandbox access, slow approval cycles, data that does not match your model. Ask each bidder to price integrations separately, since this is the usual source of overruns.
Quality attributes silently change the budget. An application used by a small internal team is a very different build from the same idea serving a hundred thousand typescript web framework users. Compliance work, high availability, scalability, software development for fintech audit logging and accessibility all add real engineering time. Write them down at the start or expect them priced as extras.
The mix of people behind the number changes the arithmetic. An hourly rate says almost nothing on its own: a senior engineer at twice the price frequently turns out to be less expensive in the end than two inexperienced developers who require supervision and rework. Also ask what else appears on the invoice: delivery management, QA, DevOps and analysis have to be done by someone, but they must be visible in the estimate.
The number in the proposal is never the full cost per hour for outsourced software development of ownership. Expect hosting, paid APIs, observability and a change budget annually. A useful planning figure is that software development process in active use consumes a meaningful share of its original build cost every year simply to stay current. Ignoring this remains the most common budgeting mistake.