Matthew Butler (Entelect General Manager: Managed Solutions)
Outsourcing is becoming an increasingly popular way to power your latest visionary idea in-house. However, how can you be sure that you’ll end up with exactly what you want, before you run out of money?
Unless you’re a specialist in the field, developing the software required to power your latest visionary idea in-house is simply not an option. And so, lacking the time, money and skills required to get the job done, you will probably outsource the development to a specialist, thinking that your problems will be solved. But how can you be sure that you’ll end up with exactly what you want… before you run out of money?!
Here are some tips that could help you to be one of those businesses:
1. Stay true to your vision
Your vision sets out the reason that your project is important and defines its successful outcome. It is vital for each and every project to have a single, unified vision to keep it on track and ensure that everyone is pulling in the same direction.
Remember, projects start out as novel ideas focused on results. But along the way, details tend to cloud the vision as more ideas come up and workarounds are implemented. Your vision is under constant threat of being forgotten as new, shinier paths open up ahead of you.
Don’t go there! Your vision must be aggressively guarded and managed as it informs almost all decision making, including requirements, scope and budget. Your vision statement is one of the few things documented right at the start of a project. Be sure to promote and protect it throughout.
2. Understand the requirements
Kicking off a project before your requirements are crystal clear is a certain path to disaster when outsourcing software development. As a general rule of thumb there are three critical attributes to consider when setting out the requirements for a software build.
• Stability – How well do all parties understand the requirements? Are we all on the same page? Ultimately, this is an indication of how likely it is that requirements will change.
• Criticality – Requirements with high criticality are the ones that the overall success of the system hinge on. Without these requirements achieved, the project cannot function. It takes great wisdom to realise not all requirements are critical, to truly pick out the primary elements of what success will mean. Achieving this balance across a set of requirements will lead to strong delivery wherever software is built.
• Priority – Note that there is a difference between priority and criticality. Priority really means how important the requirement is to stakeholders. A requirement may not be critical to success, but could still be a stakeholder priority. Again, a balanced grading of priority across requirements will make for a fluid development process as high priority items are treated with respect, and low priority items are useful to be traded off when conflicts occur.
3. Track progress smartly
Software markets and projects often move too quickly for documentation to be kept up to date in a meaningful way. Be sure that the tracking system you choose is able to keep up with the speed of progress on your project. Diagrams and models are often better than reams of text, but both are still open to multiple interpretations.
This doesn’t mean documentation is obsolete. When used in the appropriate context it could actually prompt us to be smarter about what we pen down. For example, slower changing information on a wiki can be hugely valuable, and remove key-person dependencies.
4. Keep your team small
A common misconception is that adding bodies to a team can bring calendar dates forward. Doing this, ironically, actually slows delivery down.
Fred Brooks famously stated that “nine women can’t make a baby in one month.” The truth is that while large teams are needed for broad projects where a level of parallelism can be achieved during development, communication is complex – so a larger team actually moves more slowly.
There is a careful cost:benefit ratio to be weighed up here, but the point to understand is that great software takes time. We often recommend that a client, instead of approaching a project with mindset of x resources over y months, use y resources over x months. Rarely is a few months’ delay (with no impact to total cost of project) going to dramatically change market reception. In fact, extending the launch actually provides more time to understand, process and polish software, usually resulting in a better end product.
5. Understand the Agile methodology
Agile is a time-boxed and iterative approach to delivering software that works incrementally from the start instead of trying to deliver everything at once near the end of a project. If you’re not using it, or recommending that your vendor use it, you should be. Scrum has already comfortably proven to be more effective than a traditional all-in, top-down approach.
6. Be actively involved
Participate in the process. Outsourcing doesn’t mean simply throwing your requirements over the fence and waiting for delivery. Outsourcing means you’re using another team’s expertise and knowledge, blending it with your own subject-matter understanding and, through this partnership, creating something truly mutually beneficial that perfectly meets the needs of your business.
At the end of the day, outsourcing should save you money and result in better products. After all, you’re getting a team purpose-fit for expert software development to do it for you. It’s important to bear in mind, however, that outsourcing software development isn’t a fire-and-forget exercise. The businesses that are shaking up our markets with innovative solutions and products are the ones following an interactive, disciplined and participatory approach to building software.