Resources: Outsourcing

In addition to contracting a lot of external consultants, large companies tend to outsource some parts of the development to smaller companies. The idea behind outsourcing is that we, as the customer, specify the requirements, negotiate the contract and send the external team away with them. When the deadline arises, we hope the external team will show up with the working software we asked for. However, there is a high risk that our requirements or architecture will have changed. Both of these are reason enough for us not to be pleased with the result, although the external team might have delivered exactly what we asked for.

Reasons for outsourcing

Despite this risk, there are several good reasons for a company to outsource parts of the development:

  • Specific skills: The external team provides skills that are not available internally.
  • Faster development: External teams are typically much smaller and therefore more flexible. This flexibility could result in faster development.
  • Delegating risks: This is often related to missing internal skills. For instance, the technological risks could be covered by an external team if it has the necessary skills.
  • Reducing fixed costs: Typically, the external team is not located on-site, which reduces the costs in terms of space and technical resources.

However, outsourcing is always problematic because the external team’s actions are completely out of our control. Typically, it delivers only at the very end of the contract. So only once the deadline arrives and no product is available will we realize that the team had any problems.

Advantages of outsourcing

What we really want is to have all the advantages of outsourcing—faster development, specific technological skills—plus the ability to steer what the team is doing. Generally, however, it would be more appropriate to develop the project without outsourcing. If we are in need of external support, it is better to insource the people and integrate them into our project team and culture. So, we should always favor insourcing over outsourcing. If this is not our choice, we will probably need to change the basic contract with external teams, in order to take agile development into account.

The basis for the contract is that we, as an agile customer, want to be able to change requirements during development time, and want to give feedback early and often. Moreover, we want to be asked if things are unclear, instead of being regarded only as a negotiation partner. We are more likely to accomplish all this if we work on-site with the external team. This means if we want to outsource something and expect this external team to follow an agile approach, then we do have to act as an agile customer as well. Do not ask for fixed-price development but for a system of payment based on delivered functionality. By receiving the iteration and release plan, as well as the deliverables, we can decide after every release (even after every iteration) if we would like to continue the contract.

Get hands-on with 1400+ tech skills courses.