Hiring a company to do software development is risky
Hiring a company to do software development is risky.
Why? Because "Done" is hard to define.
Consider aspects of software quality:
Fast
Secure
Usable
Robust
Readable
Reusable
Accessible
Configurable
Covered via tests
All the above are a spectrum.
So, "done" is a gray line.
These sorts of things are very difficult to outline clearly in a contract.
How do I specify that the code uses a sufficiently clear coding style? Or that the app is accessible enough? Or that it's fast enough?
It's difficult and time-consuming to outline these in detail.
In contrast, when software development is performed in-house, we don't have to agree on such details up front. We can iterate based on feedback. We can improve over time, and focus on what seems most important.
Result? Agile is easier to accomplish in-house.
A hard truth: The companies most likely to pay another company to do software dev are the least prepared to address this issue.
Evaluating software quality requires significant expertise.
If you’re paying someone to build it, you often lack the expertise to evaluate the result.