Who actually does the work matters. An hourly rate tells you little on its own: a senior engineer at a premium rate is often cheaper per delivered feature than two juniors who require constant review.
Staff augmentation is the middle option: you add engineers but keep responsibility for delivery on your side. It moves quickly — a suitable engineer can join in weeks rather than months — and the commitment ends when the work does.
Non-functional requirements quietly rewrite the estimate. An internal tool used by a small internal team is a very different build from the same feature set handling public traffic.
Integrations are the second big multiplier. A screen that writes to your own database is predictable; the same functionality wired into an old accounting system is another matter entirely.
Ask where their numbers come from. A credible estimate is accompanied by the assumptions behind it, a task-level breakdown and an explicit range.
Project outsourcing implies the vendor owns delivery: the provider staffs the roles, the provider manages the plan, and they absorb the delivery risk.
Look first at domain experience, not the length of the client list. Ask to see a couple of engagements that match your stack, and then find out whether those engineers are still with the company.