The single largest cost driver is rarely technology — it is unclear scope. Each unanswered question in the brief turns into padding inside the number you receive. A vendor that has no visibility into the exceptions and edge cases will assume the more expensive option. Spending a week on requirements work often reduces the final cost by far more than haggling over hourly rates.
Integrations remain the next major multiplier. A screen that writes to your own database is easy to estimate; the same feature talking to a legacy code maintenance services ERP is a different problem. The cost lives in the other system: undocumented APIs, waiting on someone else’s team, data that does not match your model. Ask the estimator to list every external system, since that is where the numbers slip.
The requirements nobody writes down quietly rewrite the estimate. An internal tool used by twenty people is a very different build from the same feature set serving thousands of external customers. Security reviews, high availability, performance under load, data retention rules and localisation add weeks of work. Put them in the brief livewire or alpine js else expect them to arrive later as change requests.
Who actually does the work matters a great deal. A rate card tells you almost nothing on its own: a senior engineer at a higher rate frequently turns out to be cheaper overall than a pair of junior developers who require constant review. Also ask what else appears on the invoice: delivery management, testing, DevOps and analysis are real work, but they should be itemised.
The quoted figure is never the full cost of ownership. Budget for cloud costs, paid APIs, hire developers in russia logging and alerting and a maintenance allowance annually. A useful planning figure holds that a live system needs a noticeable fraction of the initial investment per year in fixes, updates and custom affiliate tracking software small changes. Treating the launch as the finish line is the most frequent planning error.
