Software Development conducted a survey of subscribers in 2004 on their experiences with offshore software development. Fifty-six percent of the responses indicated that the software that came back was either unusable or worse than in-house software development results. If the same survey was done for outsourced software development efforts (not offshore but nearshore), I don’t think the results would be that different. Problems arise more with the nature of the outsourcing itself. Offshoring may only make it that much more difficult to manage because of distance, time-zone differences and cultural differences that may become amplified.
In this month’s column, I outline 10 factors that can ensure the success of outsourced software development. Some of these factors are related to agile methodologies and some are not. Assuming that the goal of software development (whether done in-house, outsourced or performed offshore) is solving a business problem, some of this advice may sound counter-intuitive or may seem to go against commonly accepted software development wisdom. However, we practice these every day in our software development efforts and they seem to work well for us.
Success Tip #1. Match Software Development Methodology to the Project
Waterfall model, rapid prototyping or the more recent software development methodologies like pair programming, test-driven software development or Scrum are all useful in different contexts for different software projects. We should remember that software development methodologies are all milestones in the continuing evolution of software engineering. This evolution is still continuing and there will be more variants in the future. And, depending upon the nature of the software development project, the choice needs to be different. If the software project is a re-implementation of a well understood business problem such as accounting, a waterfall model may be the best choice. If precise requirements aren’t available today and the time available for the project is short, an agile methodology may be the best choice. Just remembering that there is no single silver bullet for all projects will save a lot of heartache on all sides.
Success Tip #2. Have the Right Expectations
The service provider usually is a separate company with its own goals, motivations and agendas. The onus for the success of the software project still rests with the buyer of the outsourcing services. It is still your responsibility to make sure that the requirements are well defined and that appropriate course corrections are made early on in the project’s lifespan. Blaming the service provider is easy, but making the whole exercise successful can only happen if the right expectations are in place from the beginning of the project. Legal documents, agreements, contracts and lawsuits can bring monetary redress. In the meanwhile, if companies lose valuable time, the opportunity costs may be a lot higher than what the service provider can compensate for legally.
Success Tip #3. Base Sourcing Decisions on More than Just Cost
Cost is a major factor in many outsourcing decisions, especially offshoring. Selecting the least expensive vendor often backfires and ends up costing the client much more than initially thought. Offshore vendors are all facing cost pressures from wage inflation. Choosing the least expensive vendor just means you have chosen a company with very little leeway in its profit margins. This will affect everything adversely: hiring the right people, retaining the people who are working on your projects and providing the right resources for people to do the work on your development effort. Successful vendors may be better bets even if they’re bit more expensive, given the realities in outsourcing and offshoring.
Success Tip #4. Build an Effective Communication Pyramid
The figure below shows different communication methodologies that may need to be used in any outsourcing or offshoring project. Periodic and systematic communication among all stakeholders in the project, including the service provider, is absolutely essential at every stage of the development effort. The project manager on the buyer side is eventually responsible for the success of the effort and may need to use every communication mechanism available to communicate freely and often with every member of the development team. Using only any one method exclusively may not work as effectively as using all of them on a schedule. From being available as needed on chat or instant messaging (IM) to visiting with the development team and having face-to-face meetings periodically and systematically is the only way to make the effort succeed. As I’ve outlined in other columns, agile methodologies are more realistic when it comes to making sure communication is facilitated properly and often with real code sent back for verification, reflection and fine-tuning.
Success Tip #5. Trust but Verify
Recently I saw an anecdotal story from an outsourcing customer who thought everything with the outsourced project was going fine only to discover that the project was way off-track after about six months’ time. Vendors can be trusted but it’s still the responsibility of the buyer to verify that the progress is real!
Success Tip #6. Use Independent Testing and Quality Assurance
Testing and quality assurance should be done either by the client’s in-house team or by outsourcing it to another vendor. This isn’t just a question of trusting the vendor, but it’s simply good software engineering to separate the development and testing functions. Agile methodologies help this process much better since more testing/quality assurance can be done and course corrections can be made earlier, getting the project back on track if it gets off.
Success Tip #7. Involve End Users Early on
There’s no better way of ensuring the success of outsourced software development efforts than involving end users early on — even at the requirements and design stages if a waterfall methodology is used. In cases where software is deemed unusable, it’s likely that the vendor is guessing about what the end user really needed to solve their business problem and may have made some bad guesses! Agile methodologies help in this regard by actually getting earlier versions of the software in the users’ hands. Any guesses that are way off the mark may have a good chance of being corrected earlier in the project lifespan.
Success Tip #8. Understand Cultural Differences and Adjust Project Plans
Sourcingmag.com has run many articles about how cultural differences affect software development projects. From a practical point of view, cultural holidays may just be as important. Understanding local holidays and festivals on both ends of the outsourcing effort always helps in proper planning. If the client is in the United States, the last two weeks of December and the first week of January are bad for planning any major activities in the project, given holiday and vacation schedules around Christmas. The second week of November is time for Diwali festival in India, which, if your vendor is located there, is just as big and equally as important as Christmas.
Success Tip #9. Achieve On-site Coordination
Given the expense, having an onsite coordinator from service provider all the time may not be possible in all outsourcing efforts. However, if it is feasible, it’s the best way to enable excellent communication between users and the development team.
Success Tip #10. Learn and Fine-Tune Approaches
Project methodologies should be subject to periodic review and adjustment, especially in the earlier stages of the project. In practice, a lot of time is whiled away during the requirements and design stages of a development effort. Learning what is working and what is not as early as possible helps fine-tune the approach that will be followed for the rest of the project’s lifespan. Agile methodologies excel in enabling this fine tuning since working software is delivered earlier on and often in the cycle.
Many software development deals fall apart because proper attention isn’t paid to the many dimensions of project management that need to be in place for success. By understanding that successful outsourcing of software development is much more than just picking a vendor and writing an iron-clad contract, you’ll go a long way in addressing every ingredient that makes it successful.
Software Development magazine’s “Offshore by the Numbers”