Start with relevant experience, not the number of logos on the website. Request a couple of projects that resemble your technology stack, and hire pyspark developer then ask specifically who actually wrote that code. A serious vendor will put you on a call with the people who would work on your project. Answers that name nobody at this stage usually mean you are talking to a reseller.
The paperwork warrants a slower read than the pitch. A few clauses carry most of the weight: assignment of intellectual property, the NDA, and exit terms and handover. Every artifact must transfer to you once invoices are settled, together with documentation, pipelines and deployment scripts. Be careful with wording that leaves so-called reusable libraries in the vendor's hands, as it is usually the dependency that makes switching painful.
Find out how the estimate was built. A credible estimate arrives with a list of assumptions, a breakdown per feature and a range rather than a single number. A fixed-price contract works only when the scope is genuinely frozen; in any other case the vendor pads the number and you pay for uncertainty either way. Hourly billing shifts that risk to you, so it demands a sprint cadence, demos and a budget cap.
Process matters more than team size. Establish how a new requirement enters the plan, edtech development company who defines done and what the QA setup looks like. A mature dedicated team model will be able to walk you through a live build at the end of each sprint. Acceptance criteria in writing are your only real protection against endless rounds of rework.
Finally, think about the day you no longer need this vendor before it becomes urgent. Require that the repository sits under your account from day one, and that the documentation is refreshed in every sprint. A vendor with nothing to hide will agree quickly; resistance at this point says a great deal.