Five Tips for Software Outsourcing

Insights

Access to global talent pools, potentially at lower hourly cost than at home, makes it likely that you will consider outsourcing as a way to stretch your software development investment. Beware though - cheap labor does not guarantee better value per dollar. If you want to get the most from adding outsource developers to your mix, read on.

There are many reasons to consider outsourcing some or all of your development work. Outsourcing gives you access to global talent that may help you scale more rapidly than if you are restricted to a local labor market, and can allow you to add new skills quickly. The usual motive though is to save money with a lower-priced labor pool. The unstated assumption in cost reduction is that cheaper labor will deliver more value (or profit) per dollar invested. This is not necessarily true. A more precise objective is to improve quality adjusted value delivered to the market per dollar invested.

Note: Before taking on outsourcing (or concurrently if you have already started), look hard for ways to improve the delivery effectiveness of the team that you have. Bad habits that are in place now will worsen when you scale up or outsource.  

Here are five critical things to keep in mind as you consider outsourcing, or even if you are already doing it, to get the most for your money.

Develop Domain Expertise

When you select outsource partners, it’s important to account for the amount of tacit knowledge involved in your field. It’s not enough that your dev team understands how to make reliable, scalable, secure code. They have to know something about your customer and your dev/test environment. If your customer works in a specialized field, this may be significant. This puts an extra burden on your employees who specify what is to be done and acceptance test the results. It also puts a premium on retention of the outsource developers, so turnover is a key consideration. If you want your outsource team to maintain legacy code, you have a similar issue: it will take time for anyone to know their way around that code and how to alter it while minimizing unexpected consequences. Like it or not, when you outsource, your time investment in getting people familiar with your work, market, and code will be no less than it is with employees. If you have greater turnover, or are in a very different timezone, it may be much larger.

Manage Timezone and Turnover

It would be a waste of money to have an outsource development team work unsupervised. Even if waterfall development were a good way of getting software development done (it’s not, and here’s why), someone who understands the customer problem will need to write the specification and test the code that purports to implement it. In reality they will also need to be in regular communication with your outsource team to monitor progress, correct misunderstandings, do course corrections, review intermediate results, deal with turnover and other emergencies, and more. For that reason, timezone overlap is critical.

The more work hours your outsource team has in common with your employees, the more likely it will be that the communication cycle time is short, resulting in better thoughput of work. The very worst possible situation is when you or your employees have to work with outsource teams at both ends of their day - early morning and late evening, as happens when somone in the Western US works with people in Eastern Europe and India, for example. If your outsource team is across the International Date Line, you will only have a four day overlap each work week unless someone works weekends regularly.

Do yourself a favor and look for outsource people in a nearby timezone (3 hours at most in one direction only). They don’t necessarily cost more. If you must work with more than one timezone, this is even more important, and I would recommend a smaller window to make sure everyone can be on the same calls for a significant part of their workday.

Turnover - the rate at which people leave for other roles - imposes a tax on the price of labor, especially when it takes a long time for a new person to receive enough training and experience to become productive. Multiply the annual turnover rate by the training time as a fraction of the year. This is one part of the tax that turnover imposes on your annual labor rate. The other part is the time required for other people to train the new people. New hires don’t usually train themselves. Those people may be your employees, already struggling to manage their own work. Consider both costs carefully and budget for them, or you will see workforce burnout and reduced productivity.

Budget for supervision and acceptance

It’s absolutely critical to have staff dedicated to managing the outsource work and the relationship. Outsourcing work and then failing to test it within the acceptance window is a good way to waste money. I have seen it happen, and it will happen to you if you don’t have people dedicated to making sure the work that comes back meets your needs. Employees who understand the product and market must work with outsource partners to develop stories, interact frequently, and check the quality of the work. As noted above, they may also have to contribute to training new hires.

Budgeting and hiring for this depends on how you do development, and the extent to which the outsource partner understands the problem you are trying to solve and the context of your business and market. As a guideline, budget at least one employee for every 6-10 outsource developers or testers, and no less than the fraction of people you have internally to represent the market and customer to your internal dev team if you have one. The fraction will be greater when your outsource partners don’t have intimate knowledge of your code base and business.

Integrate Fully

Expect transparency and collaboration from your outsource team. Rather than having them work with parallel work tracking systems, have them use your internal ones so that your team can see what’s going on as well as the outsource team can. Use the same development approach too. If you are just starting out with outsource, I recommend integrating outsource developers closely with your internal development team(s) rather than separating them. This puts a premium on timezone and turnover, but it lets your team better evaluate the quality of the work they are getting and greatly tightens the feedback loop and training cycle.

Measure the Results and Review Often

Have an outsourcing dashboard and review it quarterly with your leadership team. If you are working with an outsource firm, include their leaders too. Here are some things to watch:

  • The rate of turnover in your outsource team compared to your employee turnover rate

  • The fraction of employees you need to supervise the outsource work, if this can be separated out

  • The quality-adjusted productivity of your outsource team. Look at the rate at which defects leak out of outsource code into your customers’ hands, plus the rate at which your internal team is finding those issues and preventing them from leaking into the field, and multiply each by the time and labor cost to resolve. Defects that leak into the field involve many more people and much more time than those caught at the developer’s desk or even in QA. Add these costs to your outsource and supervisory labor costs and compare with internal development.

  • The experience distribution of your outsource people compared to that of your internal team. You want to have confidence that there are enough senior people on the outsource side to develop the new people

  • Automated test coverage in code developed or maintained by outsource - look for improvement and inspect the tests periodically to make sure they are useful rather than cosmetic

  • Defect leakage and regression rates of code compared to in-house standards

  • Release timeliness

Checklist to make the most of outsource talent

  1. Consider what problem you are trying to solve by outsourcing, and what new problems outsourcing may entail. 

  2. Cheap labor is not sufficient to improve your software development productivity per dollar invested. Model quality effects, turnover, and in-house leadership and acceptance costs into your outsourcing projections, then measure actual results and focus on continuous improvement.

  3. Contract-driven sourcing that relies on detailed plans and specifications is failure-prone. This is not new information. Learn from Toyota and other Lean pioneers how to build flexibility and collaboration into your outsourcing. 

  4. Consider timezone when selecting outsource partners. There must be substantial workday overlap between the outsource people and the employees who lead them, or productivity and quality will suffer.

  5. To be productive, contractors must learn your software and something about its use. This is especially true of legacy and specialized products. Budget the time appropriately. 

  6. Budget adequate Product and QA/test capacity to lead and accept outsourced work. You are likely underestimating 

  7. Manage turnover. Turnover rate multiplied by startup time is a “tax” on your outsource labor rate. 

  8. Use the same work tracking tools and practices that you use at home so you have a clear view of how work is progressing. Allowing contractors to use isolated or duplicative systems creates fog and manual work, increasing cost and unpleasant surprises. 

  9. Automate testing as an ongoing investment, measure coverage, and work to improve it. 

Your situation is not the same as anyone else’s, but in my experience there are strong common patterns. The tips above will help you reduce the bumpiness of the ride as you consider or mature your outsource practice.

Cheap labor alone does not guarantee better value per dollar.

A more precise objective is to improve quality adjusted value delivered to market per dollar invested.