While outsourced product development generally faces criticism over quality and deliveries, it's no better or worse than buying services locally.

The difference between good quality outsourced product development and one that fails is the knowledge that buyers have, or the lack of, about the software development process.

Processes are core to a good engineering team. It's plain and simple: if a company lacks processes, they lack quality development, akin to a manufacturing outfit wherein without processes, you'd never be able to get a quality product developed.

A startup or a small business that's looking to outsource their product development must evaluate their partners on processes they implement within the organization to deliver good quality products. Processes that involve requirements analysis, architecture and design, sprint planning, coding, testing and deployment. Process = good engineering.

While having an overall understanding of the process is key, if you pay heed to only one aspect, albeit the most crucial, you can be assured your project is in good hands--a functional specification document.

Functional Specifications Document

Functional specifications, according to Wikipedia, is the documentation that describes the requested behavior of an engineering system. The documentation typically describes what is needed by the system user as well as requested properties of inputs and outputs.

One of the primary purposes of a functional specifications document is to achieve some form of consensus on what the program or software is to achieve before making the more time-consuming effort of writing source code and test cases, followed by a period of debugging.

This is called the discovery period in the product development lifecycle, which has a huge impact on the overall scope of work and the effort estimation for the project. A functional specifications document tells the developers what to build, tells the testers what tests to run and also lets the stakeholders know what they're getting.

Take a look at a sample few pages from a functional specifications document that we typically create for a client. Of course, every element is customized based on the nature of the product and the needs of the business. You can see the level of detailing that goes into every element of the website or a mobile app product that we're building--the login/sign-up screen alone is described in 6-7 pages.

Why do you need one?

Why can't the developers get straight into coding after they've assessed your requirements? A majority of the outsourced development companies do just that. And that's where the relationships go sour over the long run.

Joel Spolsky, co-founder of Trello describes failing to write a spec is the single biggest unnecessary risk you take in a software project. He also goes onto describe it as, "It's as stupid as setting off to cross the Mojave desert with just the clothes on your back, hoping to wing it."

"Programmers and software engineers who dive into code without writing a spec tend to think they're cool gunslingers, shooting from the hip. They're not. They are terribly unproductive. They write bad code and produce shoddy software, and they threaten their projects by taking giant risks, which are completely uncalled for."

Here are some important reasons why you should insist on a discovery phase before writing a single line of code:

  1. A functional specifications document brings granular-level clarity to the development team as well as the product owner on how the mobile or web app should function, breaking down and detailing every feature and functionality, the workflow and the integrations in the product.
  2. It removes any assumptions in project scoping and removes any heartaches of additional billing or stretched timeframes that arise out of misunderstanding the expectations.
  3. Once a feature is coded without detailing in a functional specifications document and changes are to be made if it weren't as per expectations, this could set you back in terms of time and money.
  4. It saves you time communicating. You only have to communicate once about your expectations on how the software should work, during the discovery phase. Everyone on the team (designers, developers, testers) just needs to read the document for project understanding.
  5. A project schedule is only possible when you have detailing of the components to be built.

When outsourcing your product development, be it a web portal or a mobile app, break it down into two parts--discovery and development. Start with the first phase to document your expectations in detail and also to assess your development partner's capabilities. Once you've done that, you will be in a better position then to continue with the same partner or work with another--with the added advantage of complete clarity of the project and schedule.