In a previous lifetime (until about 3 years ago), I was a web development contractor as part of a small webdev-shop team of 3. Our focus was building MVPs for aspiring entrepreneurs, while guiding them through specifications, user-experience, product decisions and marketing (we called it "concept-to-launch").
Coming across a heated discussion a couple of days ago on Hackernews over an article titled "30 pounds in 30 days", took me back to the time we were educating clients on the cost of software development. I would like to offer my perspective on outsourcing, cultural difference and the overall cost of outsourcing software product development.
(For the short summary, skip to the TL;DR below)
It takes more than an engineer to build software
If you are a first-time entrepreneur and likely someone with little experience with software development, the chances of you successfully directing the development of a product on your own, are slim.
If I told you the same regarding building an apartment complex or a prototype car, that might have seemed obvious. You would not start such a project without an expert translating your vision into the project requirements (such as an architect or an industrial car designer). In software development, too often vision holders hand off a "vision document", i.e. "The Specifications", to a developer and expect him to translate it to the finished product they have in their mind.
Most software developers or graphic designers are simply not fit for that role - they do not have the experience, skills or vested interest in transforming your vision to an actual product. They know how to write code or design user interfaces, not understand what are the user-flows that achieve the vision you had intended. Not to say those people don't exist - because they do, just saying that most aren't and it's wrong to expect that in advance.
Most outsourced project fail for one main reason (and by outsourced I mean everything developed outside of your internal team) - having no interest holder with the ability to translate the original vision into reality. Fact is that conveying general and abstract ideas in words is difficult, and most people don't do a very good job at it.
The Correlation Between Cost And Quality
There's a catch-all phrase that says "You get what you pay for", and it has merit. Logically, it makes sense - the better a product or service is, the more you would be willing pay for it, right?
Reality is more complicated than that. Brand, culture and competition can affect price just as much as quality. This is true in software development as well - a quote from an Indian developer in Delhi that is 1/10 of one from an American firm in NYC, doesn't imply anything about difference in quality. The Indian developer is competing against the pricing range of his peers in Delhi, and the NYC firm is doing the same in NYC while also taking brand into account (not to mention company overhead). Pricing services such as software development reflects the cost of living as much as anything.
The truth of the matter is that high cost development projects can fail just as much as cheaply outsourced ones, with the failure often not even related to the actual developers. Under-specified product specifications and ideas and business models that were not fully hashed out, bad communication skills and budgeting / cash flow problems - just to name a few.
So Where Do I Find Good Developers?
If I had a dollar for every time I heard this line... well, I'd have a few, that's for sure. As the CTO of Binpress (A marketplace for source-code), I've done code reviews for thousands of developers, from all over the world. And the conclusion I came with is that you can find talented developers everywhere. You can also find terrible developers everywhere. There is no preference to any specific geographical location as far as the quality of code goes. The distribution is, more or less - 70% terrible code, 20% decent / useable code, 10% good to great code.
Think North American developers are the bomb? well, they write plenty of shitty code too. Think Indian developers are worker bees who post incessantly on message boards for quick solutions? well, they can write top-of-the-line code too.
So how do you find good developers? the simple truth is that if you don't know how to assess the quality of code yourself, you just can't tell if you're talking to a good or terrible developer. He might be a good talker, but all of his projects are copy-pasted from some online tutorial. He might be an introvert with communication problems but damn, he can really crank out polished software in no time.
My personal opinion is that it's first about trust - if you know someone you trust who can vet out developers for you, that's your best bet. If not, you need to find a developer (/company) that you feel you can trust to turn your vision into reality. If you do not have the experience or skills to write up the requirements of the product, you need someone on the other side that can do it for you (the so-called "product guy").
In addition, you need to bring cultural differences into account. In many countries, the same response means difference things, and people react and communicate differently. In India, for example, people have a tendency to try to please - so they will say "Yes, no problem" to your requests, while in reality they might not know how to get it done or it might prolong the project significantly beyond the original scope and budget. In Israel, for example (where I hail from), people are very direct, much more so than most Americans. This might seem like a negative if you don't handle unfiltered feedback well, but on the other hand, you can be sure to receive the developer's honest opinion in most cases (on the downside, it does create more friction than necessary, most often than not).
The second important factor to the success of a software development project, is good communication. If I were to outsource today, aside from testing the quality of code (which luckily, I can), I would mainly filter out people depending on how communication with them went.
Do they respond to Emails in a timely manner and with decent grammar? how well do they communicate their thoughts and share their opinions? if it seems I might be discriminating against non-English speakers, that's not a mistake - clear and mistake free communication is very much dependent on being able to understand each other well. Especially when talking about very technical topics and detailing complex processes and interactions.
One small advice - try not to haggle on price with a software developer. Just like you wouldn't ask your lawyer to work at lower rate than they bill other clients (or maybe you would) - everyone has the price they are willing to work for, and you should respect that. If you do manage to get the price lowered, don't expect that not to have trickling effect into the project as the developer might try to cut corners to even out the lost income.
So to sum things up:
- Outsourcing can definitely work and be cost effective if you know what you are doing or know someone who can help.
- If you don't have complete faith in yourself on being able to translate the vision that's inside your head into words that can be easily understood by complete strangers, you should find someone who can.
- Good developers are everywhere - just make sure you understand their culture before making assumptions.
- Communication is key - setting expectations correctly before and during the start of a project, manufacturing easily understood requirements / specifications and related resources (mockups, screens, etc), and making sure everyone is on the same page.
Good luck to everyone setting out to build their product ideas! you are already one step ahead of 99% of the population.