Is it reasonable to outsource software development?

This is a pretty gnarly question! Before I jump right into the that question we need to talk briefly about software development itself. Software development is a very broad field but the first thing people might think of is "software developers write code".

Yes, software developers write code. Often they write more than what is necessary to get the problem solved. Many software developers love writing code. Personally I enjoy writing code. For others it's just a tool and a means to an end. It's like what my father did. He was an electrician and solved many problems by building some electric contraption. On the other hand my grandfather was a solderer and he made a lot of things from steel because he knew how to work with it. You use the tool that you're most familiar with. Makes sense!

TL;DR

I'd say NO for most cases. In case you're not sure whether you are the exception: ask me!

Writing Code

Back to software! From a pure economic view I see code that you write and maintain yourself as a big liability. It needs to be written, understood, maintained, changed and eventually discarded. It's a big investment but many don't see it as such—especially devs but also managers. Maybe managers don't see it because it's nothing physical that you can touch and devs love coding anyway. Vibe Coding I see you.

Now you might ask: what's that to do with outsourcing of software development? Quite a bit!

Code is what ultimately solves the problem that you want to get solved. With code we create a program and the program (hopefully) accomplishes the task. And this is where the fallacy happens:

Business people tend to think that if we have more software developers then we can write more code and get more problems solved.

It sounds so logic and easy, right?

And the next logical step is to hire more developers because we are slow and want to speed up. Because of resource constraints we cannot afford to employ developers and therefore we need to outsource the development work. The famous book The Mythical Man Month talks about what the implications are when you hire more developers. One of the sentences that stuck with me is:

"Adding people to a late project makes it later".

More Than Writing Code

As one who develops software myself I learned the hard way that writing code is not the hard part of software engineering. It is the understanding of the problem domain and designing a solution off of that problem. No code necessary to do that! Obviously you can jump right into the code—admittedly which a lot of devs do (including myself although less so now). But the problem that you will inevitably face down the road is that you will re-write the code a thousand times. You will need to re-write it that often because you're figuring out the solution as you're understanding the problem better and better. It's just a normal process that you get a better understanding of the problem over time.

The same happens to developers that you outsource to. They first need to understand the problem. If you want them to work rather independently hence no back and forth communication many times a day you need to provide them with material they can read and use as a reference. Such material can be requirements specifications, test cases, architecture designs and more. This is the time consuming part. If you have such material in good-enough shape then coding becomes an effort that is a fraction of the time of the whole project.

If you don't provide this kind of material to outsourced developers than their only chance to hand you over a successful solution is to:

I'm in the situation where I'm thinking about outsourcing work for software company that I advise. It looks like that I'm falling into the same trap as many people before me. It's just too tempting to fall for it!

Still Outsource

Despite all the negativity now I still see situations where outsourcing software development may work better than doing it in-house:

Back