rnrn
rnrnLook first at proven experience, not the length of the client list. Ask to see two or three engagements that sit close to your domain and your stack, and then ask specifically who actually wrote that code. A solid partner is happy to connect you with the engineers. Evasive answers at this stage generally mean you are talking to a reseller.
The agreement deserves more attention than the sales deck. Three sections matter more than the rest: assignment of intellectual property, the NDA, and notice periods and handover. Everything produced should transfer to you as it is paid for, including documentation, pipelines and custom azure development deployment scripts. Be careful with language that leaves so-called reusable libraries with the vendor, since this is frequently the dependency that makes switching painful.
Ask how they estimate. A serious estimate is accompanied by a written set of assumptions, a task-level breakdown and an explicit range. A fixed price only makes sense when the requirements are stable and documented; when the scope is still moving the provider prices the risk in and you fund the buffer regardless. Time and materials puts the risk on your side, so it demands a sprint cadence, demos and a budget cap.
Process beats team size. Ask how a new requirement enters the plan, who signs off on a feature and how quality assurance works. A well-run team will be able to show you running software development hourly rate rather than status reports. Clear, written acceptance criteria are the only reliable protection against an argument at delivery time and materials contract.
Finally, consider the day you no longer need this vendor at the start rather than at the end. Insist that the code repository lives on infrastructure you own from the first commit, and that the documentation is refreshed in every sprint. A partner who is comfortable with this accepts it without argument; resistance at this point tells you a great deal.