A number produced without questions should be treated as a warning, not a service level. An experienced provider responds with clarifying questions before any number: about users and volumes. A provider that prices before understanding the scope is working from a template, and react native development outsourcing that guess resurfaces as a change order — on your budget.
Watch for a gap between the team in the pitch and those who eventually appear in the repository. Request specific people rather than roles in the agreement, with a clause about substitutions. A team that only offers roles and refuses to name people is keeping its own flexibility at your cost.
Ask for the source repository from day one. A provider that hands over code only at milestones expects you to accept a black box. Visible commits tell you how many people are really working far better than a slide deck. The same holds for the automated test suite: if it does not exist, quality claims are unverifiable.
Vague phrasing around IP is never a formality. The contract must state in plain terms that the code, designs and documentation belong to your business as they are paid for. Check also the governing law and the milestone terms: heavy prepayment with no milestone tied to it takes away the only leverage you have.
Finally, pay attention to how they communicate. Establish how to select a software development company many hours you will share with your working day, which person handles questions and within what time. Four hours of overlap generally works; no overlap converts every clarification into a lost day. Sloppy written English in the early emails does not improve under delivery pressure.