Hiring in-house buys you the most control. The engineers absorb the business domain over time, and offshore vs nearshore outsourcing that knowledge remains inside the company. The catch shows up as slow hiring and fixed overhead: recruiting a strong engineer is slow, ramping up adds several more weeks, and the salary continues regardless of workload.
Handing a project to a vendor means the vendor owns delivery: the provider staffs the roles, they manage the process, and the provider carries the staffing risk. This fits well when the work is a defined project and your side has an available product owner. It breaks down when choosing the right software development company requirements change weekly, since an external team is not able to fill that gap for you.
Hiring individual contractors falls in the middle: you add engineers and keep the management yourself. It is fast — the right specialist is often available far sooner than a new hire — and it scales down as easily as it scales up. The catch is that your engineering managers have to have the bandwidth to manage them. Without that, you end up paying ecommerce solution for edtech industry hours, not results.
In the real world, companies blend them. A common pattern holds the critical decisions and the core system in-house, while a partner covers peaks, well-defined modules or platform work. The principle is easy to state: retain what differentiates you, and outsource the well-trodden work.
A few questions resolve most of these debates. To begin with: it consulting services is this software central to how you make money, or a cost centre? Second: how long will you need this capacity — one project or a permanent roadmap? Third: who owns it once the vendor leaves? Answer these three honestly and the model usually chooses itself.