Do not outsource your software development.
Yes, you read that right. I work for a software development outsourcing firm, and I am telling you not to outsource.
But why not? Everyone’s doing it, and everyone can’t be mistaken, right? The common perception is that outsourcing saves money based on labor arbitrage. There may be other factors, but mainly companies do it in order to get more software, probably faster, for less money.
However, the economics of outsourcing are far less straightforward than the labor rates comparison suggests. There really is no such thing as “labor arbitrage” in software development. Unlike copper or wheat, all developers are not created equal, so you are not exactly trading commodities. Furthermore, outsourcing is definitely not without risk, as discussed below. So the concept of arbitrage doesn’t apply, and with it goes the whole proposition.
First of all, are we comparing apples to apples? Yes, that overseas firm only charges you $20/hr for a developer. But how much value are you getting in that hour? How competent is that developer? Are you getting strong people on your team, or mostly recent college grads with questionable skill levels? What experience do they have? One experienced $100/hr in-house developer may well produce more value for you than 5 or even more junior $20/hr people overseas.
Also, remember that you need to train external resources. Initially, they don’t know your product, they don’t know your process, and you haven’t worked together before, so it takes time before they can begin to produce value. While necessary, the investment in a learning curve definitely eats into projected savings. And that senior in-house developer who is fully up to speed will be outperforming them again.
Now let’s say you are beyond the initial knowledge transfer. Are you realizing those savings yet? Hardly. With software development, communication is key. It's hard enough at times to explain to an experienced person in the same room what you want them to build. Imagine doing the same with someone who is thousands of miles away, relying mostly on email and IM, and sometimes on voice and video Skype calls. Software development is a highly involved social process, with people sharing complex ideas and abstract concepts. And no, documentation won’t completely remedy this: you can’t really document everything about a system up front, and any written text is always subject to multiple interpretations. Plus, the market changes so quickly that, by the time your documentation is complete, it's typically obsolete and new requirements are driving a different system. Software development deals with tacit knowledge and emergent understanding. Again, hard enough in-house and even more challenging with an outsourcing supplier (think cultural differences, accents, communication barriers, etc.).
What about the ability to put more bodies on a project? For example, you are late in your release schedule and tempted to add cheaper offshore resources to meet deadlines. Unfortunately, if you do, Brooks’s Law
is likely to take effect. This famous principle states that adding resources to a late project will make it later
or, as formulated more colorfully by its author Fred Brooks, "Nine women can’t make a baby in one month". Even when a project is not late, more people does not equal more value. With the complexities of communication, a larger team moves more slowly, sometimes significantly so, and productivity is consequently lost. Your investment may buy you more developers overseas, but not necessarily more value in the form of marketable software for your dollar.
Also, don’t forget the extra management costs you'll expend communicating with and monitoring the performance of your supplier. Aberdeen Group’s research shows that over 76% of customers report project administration and vendor management costs to be far higher than expected, which won't come as a surprise to anyone who has done any outsourcing.
Finally, consider the overall risk of project failure. The stats vary but, depending on the source, between 30 and 50% of outsourced projects fail outright: they are either abandoned completely (and the work is brought back in-house at additional cost), or fall radically short in terms of the functionality and business value they deliver. Granted, not all in-house projects are completed either but, with outsourcing, the risk of project failure is higher.
So please, do not outsource your software development.
Unless you absolutely have to. And unless you do it with Agile. More specifically, Scrum.
Sometimes keeping a project in-house is not an option. For example, you may need to ramp up your development team quickly to ship a product by a specific date or risk of the window of opportunity closing, but you know you can’t hire enough high quality people in your geographical area. If you are going distributed, you are essentially outsourcing and at least some of the difficulties inherent in traditional software development apply. Outsourcing to a company using Scrum, however, will help you overcome the obstacles that make the traditional approach unwieldy and inefficient, and that cause endemic project failures.
Inspired by the Toyota Production System (TPS), Scrum was first introduced in a conference paper by Dr. Jeff Sutherland
and Ken Schwaber in 1995. Scrum is designed around several foundational principles and practices, including development in short iterations, incremental delivery of potentially shippable software after every iteration, prioritization of features around business value, and direct customer involvement in planning, elaboration and acceptance.
Unlike the traditional "waterfall" approach, where all software is delivered once, at the tail end of the project, Scrum focuses on providing a continuous flow of value to the customer, which minimizes project risk and increases return on investment. With Scrum, catastrophic project failures like the recent California Court Management System (CCMS) $500 million debacle
are impossible by definition.
Sutherland’s research shows that, when run properly, Scrum can help achieve—even on a large, globally distributed project—the type of hyperproductivity/extreme velocities only thought possible in small co-located teams, velocities that are several multiples of the productivity typically seen in waterfall teams, in-house or offshore. Applied in the context of outsourced, distributed software development, Scrum acts as a catalyst of communication and as a powerful spotlight shining onto every aspect of the client-vendor relationship, forcing accountability on the one hand and unleashing tremendous productivity on the other.
Sutherland, who currently advises the investment team at Boston-based OpenView Venture Partners and coaches OpenView’s portfolio companies in the use of Agile development techniques, explained to me that he counsels OpenView's portfolio companies with this exact advice: either outsource to Scrum companies or don't outsource at all.
Steve Denning at Forbes calls Scrum a major management discovery
and, in fact, contends that its founders should receive a Nobel Prize in management, if there was one. Can it in fact help you add people, including offshore, and go faster rather than slower?
Can it help you reliably deliver software when working with outsourcing vendors? My own answer to these questions is an unqualified “Yes”, but please investigate and find out for yourself. Especially if you are outsourcing,
I don’t think you can afford not to. And I suspect your competitors already have.
Quick Facts: Did You Know?
Scrum achieves velocities up to 5x the industry average for waterfall (Capers Jones, Jeff Sutherland)
Waterfall projects have 3x the failure rate (29% vs. 9%) and 1/3 the success rate (14% vs. 42%) of Agile projects (Standish Group, CHAOS Report 2012)
3. California Court Management System
: High profile waterfall failure where the projected cost was $500M, the actual cost was $2B, which exceeded original estimates by 630%, and the project was completely abandoned.
4. Analysts suggest that IT leadership say goodbye to waterfall (Gartner 2012 Planning Guide: Application Delivery Strategies)
5. Industry leaders using Scrum include Google, Microsoft, Yahoo, Citrix, Facebook, Adobe, Salesforce.com, Nokia, Siemens, and many others