Begin with domain experience, not the size of the portfolio. Ask for three or four case studies that sit close to your technology stack, and then ask specifically whether those engineers are still with the company. An honest provider will introduce you to the people who would work on your project. Vague answers at this stage usually mean the delivery team is not the team you were shown.
The agreement deserves more scrutiny than the proposal. Three sections matter more than the rest: ownership of the code, the NDA, and termination and handover. Every artifact should transfer to you as it is paid for, together with source code, .net dedicated teams designs and infrastructure as code. Look closely at language that keeps framework code in the vendor's hands, since it is usually the part you cannot replace later.
Ask how they estimate. An honest estimate comes with the assumptions behind it, a breakdown per feature and a range rather than a single number. A fixed-bid deal is only reasonable when the scope is genuinely frozen; otherwise the provider adds a risk premium and you pay for uncertainty either way. Time and materials puts the risk on your side, so it demands visible weekly reporting and vue.js development company a spending cap.
How the work is run beats headcount. Find out what happens when the scope changes, who writes the acceptance criteria and what the QA setup looks like. A team can demonstrate a live build at the end of each sprint. Clear, written acceptance criteria remain the practical protection against an argument at delivery time.
Last, plan for the end of the engagement before it becomes urgent. Require that the repository stays under your account from the beginning, and that the documentation is refreshed in every sprint. A vendor with nothing to hide says yes immediately; resistance at this point says most of what you need to know.