I just returned from visiting our offshore development team in India. On the plane back I was thinking about why some offshore development projects fail. It's well-known in the software industry that many offshore development projects fail, even though there is still a great deal of debate on how often failures occur. At Shiny Creek we have been using offshore development for years, and before that I was personally part of several offshore development efforts at other companies - with mixed results. I also know personally of several high-profile efforts that were deemed to be failures: projects that were late, over-budget, did not deliver the right functionality, and any combination of these results.
What leads to these failures?
1. Bad development process. By far the biggest cause of offshore development failures is also the cause of many on-shore or in-house development failures: not having an effective development process. The development process should govern everything about how software is developed. Most software developed today uses an agile, or iterative, development process. This means you don't try to plan every feature, screen flow and user interaction in advance. But this also means it is very easy to leave out key information developers need to build the right software and to miss key communication issues. At Shiny Creek we use a modified form of Agile that involves very specific steps every feature goes through. This process involves keeping the end customer in the loop daily on the state of development, turning over feature requirements in a way that developers understand exactly what is expected, testing and QA on those features based on rapid turnaround (usually daily). Remember, every company is using a process to develop software; it's just that sometimes that process is undocumented and poorly thought out.
2. Communication issues. Lack of communication is one of the most often cited cause for offshore development failures. In reality, this is just restating #1 above - it's all about the development process. Adding layers of communication or frequency of contact without an effective - and documented - software development process in place will just make an ineffective process slower. We've found that the keys to communication still rely on documenting how you expect to work and then getting to know your remote team as individuals. One thing we strive for at Shiny Creek is to make our offshore development team members truly be a part of our organization, not just remote "resources" working on tasks.
2. Going purely offshore. One thing we realized early at Shiny Creek was that in order to develop the best software, we sometimes need to handle tasks here. Depending on the project we split up the overall effort between our Asheville office and our offshore teams. In some cases we do initial planning, architecture, project management, QA and devops completely in our corporate office. Depending on the needs of our clients we will split up the work into areas that need to be handled face-to-face with local people vs. work that can be done overseas.
3. Lack of experience (on the part of the customer). There's no substitute for experience. Having lived through bad offshoring development efforts in the past made us aware of the pitfalls in communication and expectations that can arise with offshore development. The other type of experience that matters is just having development experience. Writing software is complex even when you have developers sitting in the same room with you. Understanding how software is written and what good architecture looks like is critical when your development team is on the other side of an ocean.
4. The wrong developers. Note that I didn't say "bad developers". While there are certainly bad software developers (locally and overseas), more often the issue is having the wrong developers. Finding people with the exact skills needed for any given type of project is an art form by itself. For example, for the type of applications and web sites we build at Shiny Creek it's critical to find people with experience in team development, who have know the right tools, and most importantly who fit into the culture we have built up.
5. The wrong attitude. I know people who have tried to get web sites up, or applications built, who said they "just need a developer". The truth is that any successful software never stops being developed. You may have an initial set of requirements, but as real users begin using your website or app new requirements will surface. That's why we say finding the right development partner is more like a marriage than just paying to have a job done. Going into a development project with the idea that you are finding a long-term partner to work with will help you avoid mistakes made by thinking purely about the short term.
Offshore development has many benefits. We clearly believe in it, we have a great team that we work closely with every day. To make offshore development effective takes planning, processes and experience to make sure it is successful.