Start with domain experience, not the size of the portfolio. Ask to see three symfony or spring boot four engagements that match your stack, and then find out which engineers actually built it. A serious vendor is happy to connect you with the tech lead. Answers that name nobody at this stage almost always mean the delivery team is not the team you were shown.
The paperwork deserves a slower read than the pitch. Three clauses do most of the work: ownership of the code, confidentiality, and exit terms and handover. Everything produced must transfer to you once invoices are settled, including source code, designs and infrastructure as code. Watch for language that keeps so-called reusable libraries with the vendor, as it consulting services is usually exactly the piece that locks you in.
Ask how they estimate. An honest estimate is accompanied by a list of assumptions, outsource azure development a task-level breakdown and an explicit range. A fixed-price contract works only when the scope is genuinely frozen; when the scope is still moving the vendor pads the number and you pay for web development company germany it anyway. Hourly billing moves the risk back to the client, so it demands visible weekly reporting and a spending cap.
The delivery process matters more than the number of developers. Find out how change requests are handled, who writes the acceptance criteria and how quality assurance works. A well-run team can demonstrate a live build at the end of each sprint. Written acceptance criteria stay the practical protection against the it-was-never-in-scope conversation.
Before signing, consider the handover at the start rather than at the end. Insist that the repository sits under your account from day one, and that the documentation is refreshed in every sprint. A provider confident in its own work will agree quickly; a long negotiation over it says quite a lot.
