There are several types of outsourcing, and the concept of BPO (business process outsourcing) is almost as old as the computer itself. Today I would like to be talk about a specific type of outsourcing; agile outsourcing.
Anyone that is dedicated to software project management, (whether we’re talking about a startup, an established company or a company that develops software for others) has had to work/collaborate with another software company at a certain point of the process. I can say that in 20 years of experience that I have dedicated to software development, I have never worked in a company that has not outsourced the development of a software component to another company. It was always different situations of course, but the idea was mainly to get the expertise of others to add some value or even just add to the team some missing resources.
The concept of agile was originally for software development but over the time, others got inspired to apply this philosophy. Today we talk about agile marketing, agile BI, agile infrastructure, etc. But let’s stay focused and talk about agile outsourcing. I would like to start off by saying that I know that the agile label has been used a lot lately, pushing some people to think that it’s usage has been abused. In fact, not everything is agile. It’s one thing to “do agile” and quite another to “be agile”. In fact, doing agile is mainly about using agile practices & methodologies while being agile is our way of being, how we behave and what we value.
So why have I chosen to talk about agile outsourcing? Over the years I have done some outsourcing using waterfall methods as well as Agile outsourcing and I can say that one works and the other has the tendency no to. Agile methodologies, all have in common the use of short iterations where feedback is very important. And I believe that feedback is key.
Main disadvantages of Waterfall outsourcing
A waterfall project is actually quite easy to manage due to its rigidity and it’s easiness to be understood. But that implies disadvantages when outsourcing using those methods, it’s really the opposite of flexibility! Can’t handle change. It’s almost always difficult for customers to specify their exact requirements in once. Those requirements can very often change, but with a waterfall method, change becomes a problem. In fact, the process is not iterative and doesn’t give the possibility to change requirements during the development cycle. It’s therefore expensive and difficult to re-engineer. No minimum viable project (MVP). In waterfall methods, we can’t talk about working software before the project is done or almost done. Again, it’s not iterative and this makes it a poor model for long and ongoing projects. Can’t go back. All phases are dependent on each other so once we’re in the testing stage, you almost can’t go back. Also, the fact that this model freezes software makes it difficult for long-term projects; technology changes quite quickly and being stuck in a project that doesn’t adapt to change becomes a problem.
A good way to define agile outsourcing may be to redefine the agile manifesto from an agile outsourcing perspective: Individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, responding to change over following a plan.
4 agile principles to be applied to obtain high performance agile outsourcing
It’s important to get the most you can from an outsourcing situation. Only by applying effectively the 4 principles mentioned earlier to the definition of agile outsourcing, we can achieve higher performance collaboration with the subcontractor:
- Prioritize people and relationships over processes and tools It results in making the outsourced work as a real extension of the department involved. It’s about giving developers visibility on both sides through face to face meetings or videoconferences and modern methods of continuous communication. Developing a collaborative and trusting relationship between the external and internal resources is fundamental. We must make sure that the objectives are clear to everyone, transparency, visibility and communication are key.
- Prioritise working software over documentation It’s a very important part. It means that at anytime, the client should be able to see the development installed on a machine test, staging or demo… I would like to add that without a good coverage of tests (unit, integration and functional), a system of continuous integration and automated deploys, you’re not on the right track!
- Prioritise collaboration with the client over a contract negotiation In older systems, functional analysis and development for a closed period of time were actually quite unfair; customers paid much more for something that cost less and developers were negative because they didn’t know every detail…Today, the project is based on sprints that are decided with the client. The client prioritises and decides the scope of each user story or functional increment. This point doesn’t imply that there is no need to define agreements about other aspects of the relationship with the customer. Contracts are still needed.
- Prioritise the ability to respond to change over following a plan It translates into being able to meet the customer’s needs based on the feedback of the project. For example if he decides to pivot or change functionalities. In practice, it is correct and necessary to draw a roadmap for the product and estimate some numbers, but we can’t really draw a comprehensive roadmap of one year long. As developers, we can’t really predict the future and neither can the customer, but we can be prepared to situations where for example we have to change the technology or the entire front-end, costing as little as possible. This also has a very technical backdrop and no agile development is difficult if not impossible.
Outsourcing is one of the sectors that has been evolving a lot. In my opinion, it is clear that outsourcing is a necessary strategy. The question is when to hire services and how to chose who will undertake this strategic process. Finding the right partner in each sector and knowing how to anticipate costs and calculate risks is a very important part in managing software projects. It is in fact an indispensable skill for a project manager.