I’ve been thinking about how to answer the question on outsourcing development. Instead of pointing to research or reports on this, I am going to speak purely from personal experience. Both Deltavista and SuccessFactors have been outsourcing development with mixed results. My general preference is to avoid outsourcing, unless absolutely necessary, because I have seen it deliver poor results. I have also seen it deliver good results. If I were to make a short list of key ingredients for successful outsourcing effort, I would list

  1. Communication: it can be hard for a business person to communicate requirements and priorities to engineering even when the person is on site and within easy reach. This is made exponentially more difficult with distance, language and time zone differences. An outsourced development project must foster and encourage communication via quick response time (phone or instant messenger) and frequent checkins (i.e. daily calls with screen sharing).
  2. Motivation: there is a huge difference between a developer who is just trying to meet deadlines and a developer who is passionate about building a great product. I would avoid contracting companies that sell x number of developers for a period of time. Instead, I would prefer full-time employees (onshore of offshore) whose compensation partially depends on their performance and also the company’s performance.
  3. Tools and Processes: Outsourcing development is not new, and luckily there are lots of great free/inexpensive tools that help. There is also standard processes and guidelines on this.

I personally believe that oftentimes executives tend to overestimate the cost savings resulting from outsourcing development. It’s hard to measure productivity and any perceived cost savings need to account for overhead costs.