Offshore Software Development... and Chopped Carrots?
Just imagine you and your significant other are preparing the perfect Peanut Fettucine dish on a Saturday afternoon. Peanut Fettucine is a Thai-style meal with noodles, vegetables, spicy peanut sauce, and chicken or tofu. Very yummy! It's typically prepared with julienned carrots, or for those of us not in the culinary trade, "carrots cut long-ways into strips."
You toss a bag of carrots at your partner and say "wash, scrub and cut these!" What do you think you will get? Well, if your kitchen-mate is familiar with the dish, you'll probably get exactly what you want – perfectly julienned carrots. But if your culinary partner-in-crime doesn’t know how you want the carrots prepared… isn’t it reasonable to expect that you will get traditionally chopped carrots? You know... round slices?
And that, somewhat incomprehensibly, brings me to offshore software development... but stay with me.
Several years ago I was sitting in on a design review in Bangalore, India with one of my offshore teams. We were planning a release to enable the support of gift cards in our online system. I was getting really frustrated. The design that the team was proposing completely missed the mark. Several weeks of work would have to be redone resulting in a schedule slip and cost overrun.
Eventually I couldn’t hold in my annoyance any longer. “Why are we doing this when the whole purpose of the release is to build the foundation for gift cards?” I asked -- well, 'yelled' rather than 'asked,' I fear.
There was an uncomfortable period of silence as the engineers looked blankly at each other and then at me. “Nobody told us that,” one of them mumbled apologetically.
That afternoon, I researched back through my emails and realized they were correct. In our efforts to specify what it was we wanted, we had withheld the big picture. Essentially we had told the team to “wash, scrub and cut the carrots” but had not told them what the final dish was – something that they needed to know to make sensible decisions along the way.
Worse, if we go back to the kitchen analogy and imagine that you glance over and see your partner chopping carrots the wrong way, you can interrupt: “Oh! Not like that – cut them long ways, like matchsticks.” Within minutes you're back on track and the dish can still be delivered to the table on the pre-agreed schedule. But that’s much harder with your offshore development team. You don’t have the luxury of continuous supervision and the nature of the communication tends to be more formal – weekly status meetings, for example. So rather than wasting one or two carrots before you take corrective action, you lose weeks and weeks of work!
I know what you're thinking: "We need to document things more carefully!"
NO!!! The problem is that the document can never be accurate enough, unless you're going to write it to such a level of minutia that you may as well have written the code yourself. Should the julienned carrots be 2" or 2.5" long? Should the strips be 2mm or 3mm think? You can't specify everything. At the end of the day, you need your offshore leaders to be able to make sensible decisions and corrections to keep the team moving forward in real time. And to do that, you need to make sure that they really understand the business.
How do you do this? We need more informal conversation. Too often the majority of communication between geo-dispersed teams is in the form of status meetings. These are unfortunately essential so you need to do them. But they often result in a very bland communication. We need to look for more valuable ways to interact. Some suggestions:
Onshore leaders:
- Try, short, "do you have a minute?" video conversations. Yes, video!
- Make sure you convey your understanding of the end customer goal whenever you can. Tell anecdotes about your customer meetings, for example, so the offshore engineers begin to get to know the customer.
- Foster an environment where individual offshore developers and testers feel comfortable communicating with their onshore peers, and this is difficult... the moment you think you are done, the realtionships will regress. You have to continue to work them.
Offshore leaders:
- Try, short, "do you have a minute?" video conversations.
- Ask "why?" a lot! Why do you want the code organized this way? Why should that module be extensible? Why does the customer think this is important? You need to get beyond executing instructions so that you truly understand the full impact of your team's work. This will also help motivate your team.
- Encourage your staff to engage more. Never give them the impression that a question is irrelevant or stupid. The goal is to make sure that every engineer understands the end customer's vision.
Let me know if you have comments or feedback. Respond below, or email me at andrew@thejacksons.co.
I have experienced this while leading a team from Off-Shore....
loved this
Insightful article Andrew. Thank you for publishing this.