Outsourcing software development is fraught with risks. It is hard enough to build software with a team of seasoned developers co-located in your office. Once you add a new vendor relationship, online communications and potentially some timezone and cultural differences, it’s even harder. This is not a complete guide to successful outsourcing, but it should help you to avoid some of the most common mistakes.
1. Pick the right project
Outsourcing works best for projects where you really know what you need to have build and where you don’t need to iterate much. It’s important to have a clear understanding of what needs to be built. If you’re a startup that will need to iterate frequently to achieve product/market fit, outsourcing is a particularly risky strategy.
2. Pick the right team
Ask to speak to the developer who will actually write the code. If your developers don’t understand the project, a project manager will just turn the process into a game of “telephone” with requirements being misunderstood at every step. Also, ask your developers what version control and unit testing frameworks they use. You don’t need to understand their answers, but if they are not using a test framework and version control of some kind you shouldn’t be working with them. Also chat with the developers about the vision and the goals of the software. If they don’t “get” it, the software is unlikely to end up satisfying you or your customers.
3. Own the product decisions
Great engineers add the most value by helping you to figure out exactly what to build. Most outsourced teams don’t have great developers, so you’ll be much more responsible for providing detailed wireframes and thinking through visual design, usability and other key product decisions. If you’re not a strong product person, find one locally to help you determine what you should really be building.
4. Specify the software using user stories
“As a <role>, I want <feature>, so that <benefit>”. Called the “connextra” format, this is the best way to start out by specifying your user stories. For example “as a returning customer, I want to be able to check my order status so that I know whether the projector will be delivered by the weekend in time for the conference”. Wireframes are useful, but they don’t fully specify the functionality of a website or mobile app. A series of user stories that describe who can do what (and why they’d want to do it) is the best way to deliver your requirements to your development team.
5. Include a clear definition of done with scenarios
For each user story, you should describe a couple of concrete scenarios where you describe step by step what a user would do and see. This makes it more likely that your developers will really understand the stories and will deliver something that meets your need. Ideally get them to write automated acceptance tests using something like Cucumber or Selenium. In that way you can be sure that as they add new features to the application the old features will continue to work.
6. Get weekly deliverables
If you have a 3 month project, week 10 is not when you should first see working code. For some complex projects it might be two weeks before you see the first user story or two up and running on a secure staging website for you to test them on, but after that you should see new user stories delivered and passing your acceptance tests every single week. In that way you’ll figure out very early on if there are any misunderstanding about what to build, if what you specified isn’t what you want, or if the development team is unlikely to deliver the project on time.
7. Put the code on Github
While it is important to see the running code on the web (probably using a hosting service like Heroku or Amazon EC2), it’s also really important to be able to see the code that your developers are writing. Go to github.com, sign up for a free account, and before you start the project, ask a technical friend to create a “repo” (a repository – a place for storing the software written for a project) and to add your developers as collaborators. Then ask your developers to “push to github” at least once or twice a day. This brings many benefits but most importantly you will have access to the code in case you have to change development teams and by clicking on the “commits” tab you will be able to see what they have been working on to ensure they’re regularly adding code to the project.
Outsourcing software development is not easy and there are many risks, but by following the steps above, your likelihood of success should be increased. And if you want to know more about hiring developers or managing software development, please sign up for more information at Speak Geek.
About the Guest Blogger:
Peter Bell has been responsible for delivering over 400 web and mobile applications over the last 18 years. He was SVP Engineering at General Assembly, CTO at PowWow, he co-founded CTO school and is a regular speaker at international business and software development conferences.