Saturday, November 17, 2012

Agile Outsourcing is Like Dating & Marriage - A 5-Step Agile Outsourcing How-To

There's a lot of horror stories in offshore outsourcing of software development, but every once in a while you hear of excellent partnerships. Sounds a lot like marriages, doesn't it?


There's actually parallels to marriage – You have to spend a lot of time in getting know a lot of potential partners until you find one. Then you're still not sure so you need to go through an extended period of “getting to know each other”. Finally, you make a commitment, but you need to invest a lot of time and energy to sustain and grow the relationship. And just like marriage, if it goes bad, it's just a big drain in energy, and you can't end it without feeling you've wasted so much time.

Step1: The Checklist


All single people have an initial list of “must-haves” for people they're willing to date. You should have the same in the search for an outsourcing partner.

Here's an initial checklist of things that the outsourcing firm should have, otherwise you should just cross them off your list:


  • Direct Voice Contact to Individual Team Members


There's a dirty trick in outsourcing where you think you're emailing or chatting with a particular person, but the person behind that email address or chat ID may have already been replaced several times. Outsourcing companies that have problems with attrition try to hide this from their clients by pretending it's still the same person that the client is communicating to. In the age of free voice conferencing, this danger is easily avoided. Of course, cross-off any firm that insists on a strict “single-point of contact” for all communication.


  • Training and Mentoring


The firm should have a training and mentoring program that reassures you that its people are consistently grounded on the practices that you are looking for. Don't hire a firm that just hires people and then lets them loose on your project without any training or mentoring, since such inconsistency in their practices can leave landmines in your code.
  • Sourcing of Talent

The company has to have some sort of competitive advantage in sourcing talent, otherwise it provides no advantage over others. Does it have any special relationships with universities or developer communities? Are the company leaders prominent personalities in the tech community?

  • Methodology

Almost all outsourcing companies say they're Agile now. Find out if they really know what they're talking about by speaking with someone. Don't talk to salespeople, talk to the operations people.

Step 2: Screening ("First Dates")

After short-listing some potential partners, it's important that you actually vet the individual developers who would be potentially assigned to your team. Before scheduling an interview, you can have them take a programming exam – after all, if they can't code, no point in wasting your time in an interview. We use the Codility online service for our programming exams.

If the developers pass the exam, set-up time to interview them, again ideally over video conference. It's fine to interview them all at the same time – it saves time and you also get an idea of the group dynamics. Group interviews also helps give confidence to those developers who are actually very good, but tend to get nervous during interviews. Ask the questions you would normally ask if you were hiring developers in-house.

Step 3: Starting the Relationship ("Going Steady")

Signing the first contract isn't marriage yet, it's just "going steady". It's important to start small, so that both sides have time to learn about each other and adjust. There's no set formulas for the group dynamics of geographically-separated teams, and each relationship will need to come up with their own ways of doing things as they go (I'm starting to feel like a relationship counselor here).

  • Small Team

Start with a team of just two or three people, for a project that will last around three months. Make sure at least one of the members of the team has a minimum of two years experience – you don't want to be hand holding an entire team of fresh grads, no matter how talented or trained.

  • High Interaction

Have as much interaction as possible during the start, ideally to the point of engaging in daily video scrums or even remote pair programming! There are already numerous articles and tools on remote pair programming, so I won't elaborate on it here, but please do search for them and check them out.

These daily interactions can seem stressful, especially if the remote team's timezone is not a match for yours, but this is just for the first few iterations. You can safely gradually reduce the intensity of the interactions towards the end of the “going steady” phase. Please remember the concept of “shared inconvenience” when dealing with timezones - if you can't find a common convenient time, take turns in sharing times that are inconvenient.

  • Engage the Management

Be sure to be engaged with the management of the company at this time. Meet with the company's management weekly to give feedback, so that they can perform the necessary interventions on their team, or give deserving performers a pat on the back. This is also an opportunity to request for specific resources that you are not happy with to be replaced.

Step 4: Committing ("Marriage")

Now that the “going steady” phase is over, the “marriage” phase can begin. This is typically where you negotiate longer contracts with a larger team size, in exchange for some flexibility with rates. As a side note, you can probably get more concessions from your partner if you agree to hire more junior developers onto your team, since these are usually easier for your partner to source.

You can scale down the intensity of the interactions during this phase, but as in marriage, you still need to put in effort to keep the relationship rich and growing.

  • Product Demos and Retrospectives

If daily scrums or remote pair programming is too intense, at a minimum, all core stakeholders from your side need to participate in Product Demos and Retrospectives at the end of each sprint. It's also advisable for the team to have retrospectives on their own so that they can speak freely among each other, but they need to share their feedback with the stakeholders on your end.

  • Visits
If schedule and budget permits, a great way to kick-off the “marriage” phase is a visit to your partner. There's no better way to build mutual trust and confidence than being face-to-face. This is a good time to conduct product training or domain training.

Some team-building activities between yourselves and your outsourced team would also be a good investment – anything from playing Laser-Tag or going to a beach resort together. You'd be surprised at how cheap recreational activities are in most outsourced destinations. This is also a good time for people on your side to unwind.

Also take the time to get to know the company's management. Schedule at least one lunch or dinner with them. Get to know their philosophy and vision for their company so you'll have a better idea on how to collaborate with them as your relationship progresses. You might even discover business synergies that you hadn't considered.

  • Allow Time for Training

One of the top things that motivate talented people is opportunities to learn. You can help your outsourcing partner retain the people on your team, as well as make your team sharper, by allowing them time for training. You can negotiate in your contract the maximum training days per year, so it doesn't go too far. If the company doesn't provide any training for its people at least once a year, you might want to reconsider.

  • Continue to Engage Management

The management of the firm are your partners in managing your team. Engage them early and often, not just when there's a problem. Share both positive and negative feedback. If there are problem team members, let them early so they can plan interventions – don't wait until you need to have him swapped out. If you have high performers, let the management know so he can be properly acknowledged.

Give the management advanced warning of team composition changes, either up or down. If you need to scale up, you need to give them time to recruit, train, or at least earmark certain people for transfer to your team. If you need to scale down or change people, don't give them a problem of what to do with people on the bench – give them an opportunity to plan where to reassign these people before you release them from your team.

Step 5: Allowing for Growth

The two people who enter into a marriage don't just stay the same people. They continue to grow as individuals, such as growth in their careers and career ambitions. This often puts a strain in a marriage, but as long as the core values of the couple remain intact, each person in the couple needs to adjust and support the growth of the other.

  • Promotions

I often encounter resistance from clients when we tell them that one or more of their well-performing team-members will be likely be promoted. They resent that it comes with an increase in billing rates. We tell them in advance, of course, so they can either make changes in budgets or decide to interview more junior people to take soon-to-be-promoted person's place, but it's still never taken well.

Keeping a well-performing person in a team without promoting him is a situation that can't last long. Eventually, the person will leave to find employment more deserving of his skill and professionalism. When that happens, both you and the outsourcing company lose.

Therefore, don't make it so hard for the outsourcing firm to promote its people. Even if your budget doesn't allow you to keep the person on your team, the person is still within the company, and can be called on by his colleagues in your team for advice.

  • Rotation

Even more difficult for clients to accept is the need for outsourcing and consulting firms to rotate their people between projects. As I mentioned earlier, talented people want learning and growth. If they can't get it in the company they're working for, they'll get it somewhere else, and then both client and provider lose.

The frequency of rotation is inverse to the seniority of the resource. Clients should expect movement of junior developers around once a year, mid-level developers around two years, and then senior developers around three years.

I hope you found this primer on Agile outsourcing helpful. If you have any questions, just drop me a line, and I'll be happy to answer.


No comments:

Post a Comment