Is Outsourcing Software Development Effective?

This is a complex question. Before addressing it directly, we must examine software development itself. Software development is a broad field, but people typically associate it with "writing code."

Yes, developers write code. Often, they write more than necessary to solve a problem. Many developers love writing code; I enjoy it personally. For others, it's merely a tool—a means to an end. This mirrors my father's experience as an electrician: he solved problems by building electrical contraptions. My grandfather, a solderer, crafted objects from steel because he mastered the material. You use the tool you know best. This makes sense.

TL;DR

NO—outsourcing is ineffective for most cases. If you suspect you might be an exception, let's talk.

Writing Code

From a purely economic perspective, code written and maintained internally is a significant liability. It requires creation, comprehension, maintenance, modification, and eventual disposal. This represents a substantial investment, yet many—developers and managers alike—fail to recognize it as such. Managers may overlook it because code lacks physical tangibility, while developers often enjoy coding regardless.

What does this have to do with outsourcing software development? Everything.

Code ultimately solves the problem you need addressed. With code, we create a program that accomplishes the task. Here lies the fallacy:

Business people believe that more developers mean more code written and more problems solved.

This seems logical and straightforward.

The next step is hiring more developers to accelerate slow progress. Due to resource constraints, companies often outsource development instead of hiring. As noted in The Mythical Man Month

Adding people to a late project makes it later.

Beyond Writing Code

As a developer, I've learned that writing code is not the hardest part of software engineering. The real challenge is understanding the problem domain and designing a solution accordingly. No code is required for this critical phase. While many developers (myself included, less so now) jump straight into coding, this inevitably leads to rewrites. As your understanding of the problem deepens, you'll repeatedly revise the code. This iterative refinement is normal.

Outsourced developers face the same hurdle: they must first understand the problem. If you expect them to work independently without constant communication, you must provide comprehensive reference materials—requirements specifications, test cases, architecture designs, etc. Creating these materials is time-consuming. When properly prepared, coding becomes a fraction of the total project effort.

Without these materials, outsourced developers can only succeed by:

I'm currently considering outsourcing for a software company I advise. I recognize I'm falling into the same trap as many before me—it's tempting.

When Outsourcing Can Work

Despite the challenges, outsourcing may be preferable to in-house development in specific scenarios:

Back