You don’t need to provide complete software specifications, but a clear vision for your software is essential. Sketch out the basic requirements then take advantage of the experience and skill of your outsourced team. They can help you get to a final design much more quickly and cost effectively than you could on your own. And they learn the details of your software in the process.
An acceptance test that your software must pass before new code can be released as part of your software is crucial. Use appropriate standards and require documentation of your source code as it’s written to facilitate a quick ramp-up by new engineers and employees. This is essential in a dynamic world where code development is frequently collaborative and shared.
Use Agile, Scrum or Kanban project management methodologies to get your software development started quickly and keep your development on track with frequent builds and releases.
Require frequent software builds and release milestones with a clear definition of the features and fixes targeted for each. It’s better to have an intermediate release with new functionality that can be tested long-prior to your consumer release than it is to wait twice as long for complete functionality that is incorrectly implemented or too complex to test effectively.