I’m asked this question by folks quite often, and the short answer is yes. There are a few key things to consider though, before challenging your agile efforts with an outsourced component.
First, is your organization already competent at agile software development and agile project management? If not, outsourcing a component of your efforts will only make this more challenging. Why? because agile approaches require a high degree of open communication, collaboration and trust between the business, customers and development. If you don’t have at least some semblance of this, inviting an outsourced component to the party will lessen the experience for everyone involved, and more times than not, the savings that were hoped for are not realized.
What if you’re just starting out with agile and you currently have outsourced components? Will this be more challenging than if you had all the development in-house? I think the answer to that is pretty common sense; Yes it is more challenging, but still doable. Anything that complicates open communication, collaboration and the establishment and maintenance of trust challenges agile organizations.
So assuming that we must work with an outsourced component of our product development, what can we do to help ensure success? There are two areas to focus on: vendor evaluation, and agile contracts.
- System quality
- Collaboration level
While these qualities of a vendor are not easy to measure, they are relevant in selecting a vendor for an agile development partnership, which is what an outsourcing relationship should be in an agile environment.
Tom DeMarco and Tim Lister pointed out in the 1980s  that productivity ranges by a factor of 20 between individuals in software development . If you exchange a vendor with another that has only a third of the productivity, it is a bad deal, even if their rates are 40% lower, and they are much nicer in negotiating these rates.
Remember that agile development is about building mutual trust between the business experts and the software people. If you contract development to another company, this maps to mutual trust between your organization and the vendor.
So you have to ask yourself, are you capable of developing contracts with your outsourcing vendors that make them partners and not adversaries? Traditional outsourcing contracts are written by lawyers to help ensure that their client will receive maximum damages in the event of a lawsuit. They have little to do with helping to ensure the delivery of value.
Traditional outsourcing contracts, from my experience, usually encourage inflexibility and prohibit change, both of which are toxic to agile. Ironically, because of this, they usually help ensure that some form of legal action or at least posturing takes place…all of which erodes trust and open communication. Interesting that the only parties that always benefit when this happens are lawyers 😉
Things to consider when developing an agile contract:
- Contract for a process that leads to a result instead of for a specific result. Targeting a specific result doesn’t allow for change / improvement. You have to have been right up front (rarely the case).
- Close customer collaboration is more important than contract negotiation, so the project can fulfill your business objectives instead of your lawyer’s.
- Agile contracts should maximize the efficiency of software development and thus minimize the risk of a lawsuit occurring.
- Identify what to contract first. This should be done by those who understand agile processes and the value the customer is truly looking to have delivered. Once this is understood, then consult your lawyer to put it into legal-speak.
Ok, so once you have selected a vendor and have put in place a contract that is conducive to an Agile relationships, then what. Well here are a few best practices that I have found can assist in making outsourced development work better:
- Minimize dependencies
- Train everyone on common team practices & tools
- Integrate work on regular basis
- Consider integration teams
- Deliver value through vertical slices of architecture
- Include outsourced partner on customer feedback and continuous improvement
In the world of software development, outsourcing is still a common occurrence and it does add additional challenges to agile development efforts. However, if you apply more agile-relevant criteria in the selection of your partner and contract with them in a manner that focuses on delivering value, following a process and not impeding collaboration, you can certainly minimize the risks.
1. DeMarco, Tom, and Tim Lister. Peopleware: Productive Projects and Teams. Dorset House, 1987.