Begin with domain experience, not the size of the portfolio. Ask to see three or four engagements that resemble your domain and your stack, and then ask which engineers actually built it. A solid partner is happy to connect you with the engineers. Evasive answers at this stage generally mean the delivery team is not the dedicated team or project-based outsourcing you were shown.
The contract warrants more scrutiny than the proposal. A few clauses carry most of the weight: intellectual property assignment, confidentiality, and termination and handover. Everything produced has to transfer to you on payment, along with documentation, pipelines and deployment scripts. Look closely at wording that keeps reusable components in the vendor's hands, as that is often the dependency that makes switching painful.
Ask where their numbers come from. A serious estimate is accompanied by a list of assumptions, react native development services a breakdown per feature and a range rather than a single number. A fixed-price contract only makes sense when the scope is genuinely frozen; when the scope is still moving the supplier adds a risk premium and you pay for uncertainty either way. A time-and-materials model puts the risk on your side, so it needs a sprint cadence, demos and a budget cap.
How the work is run matters more than the number of hire fuelphp developers. Ask how change requests are handled, who signs off on a feature and how testing is organised. A mature team should be able to walk you through a working build every one or two weeks. Written acceptance criteria are the only reliable protection against endless rounds of rework.
Before signing, plan for the end of the engagement at the start rather than at the end. Require that the source repository lives in your organisation from the beginning, and that a readme and architecture notes are kept current as the code changes. A vendor with nothing to hide accepts it without argument; hesitation here tells you a great deal.