Saturday, December 13, 2008

A Programmers Guide to Outsourcing

Outsourcing needs no introduction -- it has been covered by news media extensively for the past couple of years. Everybody's doing it, and at some point in life, you figured it's worth a try.

But it's not all shine and glamor. Outsourcing your programming tasks can be a real headache and even a burden. This guide is here to help you identify the pitfalls before you're even making the first step. It's all based on experience and I'm sure many of the readers will agree what what is said here.

There are two types of outsourcing: one-shot (projects) and continual (semi-hired programmer.) Projects are posted on sites such as Elance, where freelancers send you quote for your consideration. Semi-hiring programmers can be done through oDesk, where you get to interview programmers and share svn access.

1. It might take 3 hours to explain a 10 minutes task
When you figure it would take you several hours to explain, listen, pack sources and then merge back the results, ask yourself this question: is it worth it?. When you're outsourcing a single task with no further interaction with that specific programmer, then the answer is simply: no. The only reason that you would do such a thing, is to educate your programmer (semi-hiring freelancers.) Add task, send bug reports, review code, integrate. The more you iterate this, the shorter it will become, so don't lose your head prematurely.

2. It's mentally difficult if you can do it yourself
The person who knows my framework and setup best is me. Moreover, I love my coding conventions, my automatic tests and how well my new code fits with the existing code base. It's awfully hard to look at somebody else's code and not go "I would have done this better." I'm sure you would. The easiest tasks I have outsourced are translating and copywriting. Why? Because I know I'm weak there and I can easily assess other's work. Learn to accept other people's code or shape them as needed.

3. Language barrier is no fun
Not everybody speaks English, and not everybody speak the same English. During my trial-and-error period, I have hired East Asians (India and China) programmers. I know I'm making a bad generalization here, but all of my projects failed. I received code that was either useless or had absolutely nothing to do with my requirements. Bouncing emails back and forth for a long time concluded this as hopeless and as awful as it sounds, I choose not to work with programmers from these countries again. It goes without saying that the same problem might happen with people from other nations as well. It helps to talk to the person, ask her questions about the weather or sports, just to get an idea how well you two communicate.

Here are a few tips I have picked up along the way. They help me calm down and do this process (more) smoothly:

1. When posting a project, make sure the price offers are sealed (hidden from the eyes of other freelancers.) I have noticed the second bidder base their price by the first bidder. Sealing it will make freelancers think and bid as they see fit, without the competition against other programmers.

2. Start small. It's easy to get hooked with the infinite opportunities. Don't shell out more than you can afford, and don't handle more than one task at the time. Use the first few projects for learning from mistakes. They will happen, there is no way around it.

3. Remember why you are outsourcing in the first place. The reason why you are reading this article is because you are not scalable. You are a very talent and creative person, but there is only one of you. Your to-do list is 10 pages long, but you only have one pair of hands. The sooner you realize this, the faster you will get around all of the above and start getting productive.

Got something to tell? I am very interested in your opinion and story. Learning from other people's mistakes is definitely a bonus. I'd be more than happy if you could share your experience. What worked and what didn't.

Good luck!

8 comments:

Yair Bar-On said...

there is a very important aspect of outsourcing that should be covered here - can you really trust freelancers?
When you outsource, in many case you need to tell a programmer you never met and never saw what is your business logic, what are your tricks, the things that you do better than your competitors. not mentioning giving some guy the password to your server so he can install the code he wrote, test it and see the logs.
How can you trust people that you don't know?

Yair.

Gil Megidish said...

That's a very good question. I have my own bag of tricks I use. Not only the things you wrote, but what happens if somebody takes the code she wrote for you and launches a competitor? Then what?

I'll let others comments and then collect all the questions for a follow-up post.

Thanks!

Shay said...

Can you give some collaboration related tips ? such as:
how do you receive your sources ?
how do you integrate with them ?
do you give them an ftp to a staging site ?

what about scheduling and penalties ?

kevin said...

Outsourcing may seem very profitable from a business point of view, but from a programmer's perspective it's a nightmare. Usually the code that is produced is hard to maintain and often times it needs to be re-written completely.

In my opinion, the money you save by outsourcing programmers, you end up losing, because of the time it takes for the team to hack/rewrite that code.

Outsourcing code is only a good idea if you absolutely do not care about scalability or performance.

spopovic said...

Well, in the organization where I worked we outsourced most of the Java programming work to a large Indian company in Chennai and it was not only 70% cheaper, but the code was better quality compared to what we got from the original developers in the US. And they speak perfect English, available 24 hours a day, willing to work hard.

Juan Pablo said...

Gil, Kevin,

I'm sorry for your previous bad experiences. I work for an outsourcing company in Argentina; we've been doing business with several companies in diferent countries and we did really have very good success in our client satisfaction. I think that the language barrier is important, but mostly it's because of the business model that some companies use. Most of the outsourcing companies only cares hirign "coding monkeys" (please forgive me if I'm offending someone, my intention is to be as straight forward as I can be) and feeding them with bannannas. They don't care about the quality of the source code or the released product. We took a different approach and it's working very good; we always look for our customer satisfaction and sometimes (well, mostly) we go beyond our contractual obligations to ensure the success of the project. Maybe you can try us and have a better experience in outsourcing!! :)
Thanks for the post, it really help us to avoid mistakes and behaviours that will tear down our jobs.

Mark said...

You should consider the contract clauses carefully when hiring a programmer. There are 9 clauses in custom software development contracts that you must take extremely seriously or risk losing a lot of money, time, and even your most valuable information. Visit http://www.1stcustomsoftware.com/articles/programming-contract-clauses/ for the full article.

National said...

I have had 70+ projects done at RAC with scores of 10/10 but I’ve got to warn you - as a buyer that if coders don’t want to let their code be tested Rentacoder seems quite happy to let them simply refuse and even threaten violence (so don’t choose anyone physically close to you) or hacking without penalty .

I was horrified about this but rentacoder seemed to accept the coder’s statement that there is nothing illegal about issuing threats of violence over the internet and even penalised me for complaining (politely).