It's kind of like Mission Impossible, but with less Tom Cruise and more outsourcing. Specifically outsourcing programing and other development work to people in different countries. Let's get to it.
I'll start by saying that outsourcing development to a cheaper location initially seems like an attractive option to many. Finally got some money for that startup you've been dreaming about? Need a helping hand before the big launch? You can save el mucho dinero by outsourcing away! Why pay some fool developer in your home town what seems to be a very unreasonable amount to do the same thing a couple of guys in some far away place can do at a much much lower rate?!? That would be just plain stupid. Pennies on the dime.
Savin' the Benjamin's. Good on you.
One developer or another, it doesn't make much difference right?
No not right. Very not right. What you don't yet realize is that you really do get what you pay for. Let's look at some key issues that generally crop up when you "save money" by outsourcing to a less expensive locale.
Communication: Really reeaallly important. Like really.
If you outsource to somewhere be prepared to have a blast when you want to talk to your "team". Do you enjoy holding meetings at midnight? Great! Like trying to explain a feature or bug for the upteenth time? Yes! Ecstatic about being not entirely sure what the remote team is up to these days. Moar! And don't stop there, oh no, the fun is just getting started.
I'm exaggerating somewhat, but the fact is communication is hugely important in software development. No two ways about it. And outsourcing puts up significant barriers to said communication. These barriers manifest in time differences, language differences, geographical differences, and cultural differences. What happens if (when) requirements change? How often do you get updates on how things are progressing? How well can you convey to your team what you are trying to build and what exactly you want?
There is nothing that can replace actually meeting with someone and discussing your project. Or as a developer, actually working together with your teammates in person. Whether that be pulling someone aside to discuss a technical issue, pairing together to write a particular feature, or prioritizing your work with product management. Having regular interaction and feedback throughout the development cycle is key, both for developers and non-developers. Any barrier on that communication is a significant impediment to doing good work, and lessens your chances of being able to create the product you truly want.
Quality: It's a nice thing to have.
As long as the product works that’s fine right?
Nooooope. Your investment (the code) is kind of a big deal. It's sort of pretty much the entire product you are paying to create. It determines how your product can grow and scale and be usable for the foreseeable future. The amount of bugs. The long term pace of development. Code quality affects all of these things, and standards of coding and coding best practices can be decidedly different place to place, person to person.
There are some wicked smart people all over the world. Obviously. But with outsourcing it's harder to know if you've got a wicked smart super guru working for you, or scooby doo with a keyboard. More to the point, no matter the country, these wicked smart folk generally come at a higher cost. The people you can hire for the prices that are most appealing are generally not incentivized to write maintainable, quality code. True story.
Quantity: It's a nice thing to have..?
More developers equates to faster deliverables! Duh.
Does it though? Hmmm… Well yeah sometimes. First of all it depends on the developers being added. And no matter what, at some point (usually sooner than you would expect) you start to get diminishing marginal returns, and even negative returns, as you continue to add more and more developers. Often five $20/hr developers will generate more mess and produce less value overall than a single developer that understands your requirements and works with you to get the product working and out the door. Source: me.
Actually savin' the Benjamin's.
I do believe there are certainly situations where outsourcing software development actually works and does save money. You just have to judge and manage your particular situation very carefully. Going along with that, there are exceptions to all of my examples above. To be fair though, they are the exceptions not the rule.
It may not seem like it at the time, but the cheapest and fastest way to do something is to do it right the first time. At the end of the day outsourcing away major projects from your area generally costs quite a bit more than you would initially assume, throws up barriers to communication, and makes it harder to get the product you truly want. What this means is that in the end the project is not as likely to succeed. And that's no good for anyone.