I was first asked to tackle offshore development roughly six years ago while still a relatively new director for development organization at HighJump. This was our first experience with distributed development, and like most organizations in the same situation, we approached it timidly and with a fair amount of skepticism. We were concerned about what this meant to how we organize, how we manage delivery schedules, and what we would see for work quality. We chose to partner with an existing business representative in Chile; this team had shown the ability to use our tools to customize our reference application, so we knew that they could do the technical work, but they had no experience with the processes and tools needed to make offshore successful. The impetus for this investment was led by our board and our CEO, so knowing that resistance was futile, we rolled up our sleeves and started.
Fast forward to today; we’ve had a great strategic partnership for the last couple of years with an outsourcing firm based in Minsk, Belarus and we are in the process of transitioning from working with them to an even larger team that is part of our new merged company based in Bangalore, India. Now confident in our use of Agile, this methodology has proven excellent at managing the pace and communication needs when interacting with distributed teams. We’ve also figured out the structure, roles, and skillsets needed to make it work and we now have roughly two-thirds of our head count offshore. This article will focus on explaining the possible structures, those that we tried along the way, and finally the structure that has proven most productive for us.
We have over the years done a lot of experimenting with different organizational patterns. One possibility is to outsource a “function” such as product management, coding, project management, manual testing, architecture, or automated testing. I’ve seen organizations conclude that certain functions are less strategic to their organization, so they choose that function for outsourcing. Management literature recognizes this approach as a sound strategy, but to choose which functions are less strategic, you need to make certain value judgments about the work that these functions perform.
A common conclusion reached is that code development is the most important function. People reach this result through a flawed process of elimination; without developers, there is no need for testers, architects, or project managers. Ergo, coding is the most important, highest value add activity, right? Of course, I might make the argument that without a product manager, the developers have no idea what to build, but it’s usually the business owner having these thoughts and she of course has no shortage of ideas, so it makes perfect sense to just hire some developers and go.
Nothing can be further from the truth, but this is the mentality that causes people to devalue the other functions. Once devalued, then the natural next step is to conclude that since I have to spend some money on these other activities, I may as well try to get them as cheap as possible. The conclusion? Development is a strategic core compentency. Outsource your testing.

Taughannock State Park - Ithaca, NY
I’ve avoided this option for a couple of reasons – first, it doesn’t scale very well. If you decide to only outsource testing, then you are inherently limited to only saving money on that portion of your R&D spend. If we assume a typical 3:1 to 5:1 developer to tester ratio, then obviously this strategy can leave you with no lower cost option for 75-90% of your resources. My second reason relates to the process and organization – I am firmly opposed to separating the test resources from the developers in the feature time. I use testers as an “in line” participant that works side by side with the developers to design and test the solution. The natural barriers to accomplishing this kind of cooperation are only reinforced if there is a geographic boundary separating the teams. Since the testers need to belong to the team and sit right next to their lead and fellow developers, this has never been an attractive option.
Another option is to choose your outsourcing by product line (which often maps to one or more codebases that support that product line). For example, you may have a new development effort to build your next product or technology platform and conclude that it is best to keep this work local. A common decision is to outsource the ongoing feature development or defect fixing of an existing legacy product so that the attention and energy of the local team can be focused on more strategic work. I have used this approach in situation such as device development where is has been impractical to have the developers and testers offshore as the device is best tested on network during normal use.
From here there are numerous details to consider – can requirements, development, and testing be done by remote teams? How will final product acceptance be done? How will I divide the resources? Have some teams local and others remote, or have all teams have some functions local and others remote?
These decisions form a crossroads for your engineering organization. I’ve seen a lot of energy go into rationalizing and justifying one plan over another, and it is certainly true that any decision made here is subject to strong political influence. Rightly so, as quite literally the future of some people’s jobs lies in the balance, either because the job may be eliminated or the responsibilities change to the point that they may not choose to stay. Either way this is an emotionally charged topic and it is not to be taken lightly – I’ll devote a future topic just to staging and managing the transition to distributed teams, but in order to keep this topic on track, let’s focus the discussion back on the desired end state.
In the simplest and coldest of terms, every organization is looking to minimize the cost associated with product development and maintenance. There are certainly situations in which the product strategy of the company helps to justify the decision to work only with a local and more expensive team, but while most companies start with this in mind as they race to get their initial product to market, few companies choose to pursue this strategy in the long run.
I’m reminded of a great article on this topic that is actually published as part of the literature on supply chain management entitled “The Triple-A Supply Chain” by Hau Lee - you can read it for yourself at http://images.ed4.net/images/htdocs/hbsp/050117/AAA_SupplyChain.pdf. If your organization is a “job shop” that is frequently switched to new and unfamiliar products or codebases and you need to rapidly reconfigure the teams to match rising and falling workloads, then “agility” is truly at a premium and you may need to use local resources indefinitely. However, if you are working on established products with deep product roadmaps, then stability and consistency in the team brings effectiveness, so you may as well also configure the geography of the teams to maximize efficiency (through lower cost) as well.
The net result is that I propose a hollow local organization comprised only of the following roles:
- Senior Product Owner – the product manager that is responsible for the product or product lines; this person works with the director to negotiate release schedules and scope and writes the high-level stories (often epics) that drive the release content
- Director – this person is responsible for the setting the overall rhythm and sustaining the process; this person schedules and moderates the iteration reviews, estimation meetings, and scrum of scrums and works with the product owner(s) to determine the release rhythm, set release scope and schedule, and to make sure there is always sufficient product backlog ready for each iteration.
- Feature team lead aka scrummaster – this person is responsible for the work product and for all communication with the remote feature team. This is usually a senior developer that has also made the transition to a leadership role; the drive the architecture and design, review code, and manage the flow of stories into the team throughout the iteration. This person is responsible for coordinating all team functions including kickoffs, daily scrums, and retrospectives although they may offload some or all of this responsibility to the remote team lead.
- Customer response team lead – this person is responsible for triage and resolution for all immediate reaction and customer driven work that can not be handled by the normal release rhythm. They may also provide the configuration management function for the team as they sit at the nexus of multiple code branches and are responsible for back- and forward-port activity needed to keep these branches functionally complete. See http://craigkn.wordpress.com/2009/09/12/customer-response-team/ for more details.
That’s about it. Everything else, including the stabilization lead, is a candidate for outsourcing. In fact, let’s dwell for a moment on one role that may be a surprise to you – technical product manager. First, to clarify – this role is responsible for converting epics determined by the senior product owner into digestible stories that are granular enough to fit within the iteration interval. This person needs a detailed understanding of the existing product and will produce detailed user interface designs and requirements based on the overall direction of the senior product owner. They need to understand the users of the system, but they do NOT need to understand overall market direction or demand.

Taughannock Falls - Ithaca, NY
When we first formed this team structure at Gearworks, the most common complain during our retrospectives was that the developers did not have enough access to the product owner. We could have opted to try to convince marketing to spend more money to hire another local product manager, but instead we opted to use development funds to bring on staff a technical product owner on site with the remote team. The difference was phenomenal – not only did we start receiving much better defined stories, but the remote teams had access to a decision maker that also understood the details of the requirements they had defined. The product owners scrummed daily to review progress on definition of detailed stories and to answer any questions that had been escalated over night by the remote team, but over time the remote product owner became confident enough that she could handle these questions without help and just get her decisions confirmed by the senior product owner later.
Now let’s take a look at this from the point of view of your board or CEO. Assuming that your organization scales somewhere from 15 to 100 FTEs, you are going to see the following distribution of headcount between local and remote resources:
|
Total Size (in FTEs)
|
Local
|
Remote |
Percentage Remote |
|
10
|
4 |
6 |
60% |
|
30
|
7 |
23 |
76% |
|
60
|
13 |
47 |
78% |
|
90
|
20 |
70 |
78%
|
As you can see most of the real coverage comes from scaling the team above 10 people; I have a hard time recommending the use of offshore for product organizations with less than 15 people as you are not getting a lot of leverage from the onshore staff. I’ve found that offshore efficiencies of at least 2.5 are very reasonable to expect, and in some geographies you can do even better than that. Using even 2 as a very conservative estimate of the cost multiplier you will experience for remote staff, let’s look at the two extremes and summarize the leverage both as a potential cost savings or as increased head count for the same cost. In the case of an original local team of 10 people, you can either reduce your costs by 30% or keep your spending the same and increase your headcount to 16 people. At the other extreme, if you are starting with a local team of 90 as your “before” state, then you can either reduce your cost by 40% or increase your headcount to 160 people! Of course, you are most likely going to choose some compromise between cost savings and increased headcount, but either way the business case is compelling.
I am assuming the use of an outside contractor organization providing the resources – part of the efficiency comes from the fact that they are responsible for all aspects of compensation, performance, and benefits. As a result, your much leaner local organization is focused almost exclusively on determining what will be built and architecting, accepting, distributing, and supporting the final work product. One final note – the team that is “local” only needs to be local from the point of view of the customer base that is served. If your product is going to be sold into a different market, then it may make sense to put the entire development organization into that geography.