Instead of hiring full-time programmers, it is often very tempting to turn to outsourcing. Sites like getafreelancer.com or rentacoder.com hawk a plethora of services- everything from graphic design to PHP coding. What’s more, once you post you project, you are sure to get dozens of bids at absurdly low prices, often as low as $30, within days. Outsourcing online may appear to be the perfect way to build almost anything. There are many benefits to outsourcing some tasks online, but there are also many pitfalls. Ultimately, outsourced labor can supplement in-house developers, but it cannot completely supplant them.
My first experience with outsourcing was a couple of years ago. It started with my idea for a web application that could scrape, aggregate, and analyze certain financial data. The idea was not big enough to launch a startup around it, or to hire a bunch of professional developers to build it. But it was also too big a project for someone like me to undertake–I have little coding ability. I knew that this tool could become popular in certain investing communities, but I did not want to invest significant resources in building it. Outsourcing was the perfect solution.
I began by posting a simple ad detailing the project on GetAFreelancer.com. Within hours, it received dozens of bids, most of them on the low side. However, upon reviewing the bids I found that most of them were spam bids- they did not reference the project whatsoever, instead leaving a generic “Our company can take care of every web development project” type ad. These junk bids plague outsourcing sites, and should be avoided. Outsourcing companies often act as middlemen — they decrease efficiency because all communication with developers has to go through them, and drive up costs. Instead, I opted for an individual who provided a reasonable bid, a quick timeframe, and listed previous expertise designing similar applications. I selected his bid, which estimated completion in three days and e-mailed him project requirements.
I received my PHP code three days later, as promised. However, the code was incomplete– it did not gather all of the data I wanted. A day later, the developer refined the project, but there were still problems. I had run into the biggest problem with outsourcing:it is difficult to communicate. The developer and I were in disparate time zones, and I had a busy schedule, so any kind of real-time communication was impossible. Thus, each minor change to the code took at least a day. I was in no hurry to bring my idea to life, so I waited patiently as the code was further refined.
Finally, the project appeared completed to my specifications. Eager to be done with development, I paid the developer and posted positive feedback. A couple of days after, however, I discovered a major bug — the script did not function properly in Internet Explorer. I emailed the developer, but he was unresponsive. As far as he was concerned he was done with the project — he had been paid, the transaction was completed, and he wanted nothing more to do with the project. In the end, I had to hire another developer to go through the code and fix bugs. The project ended up being both over time and over budget.
The main lesson I learned about software development from this project is that code is rarely, if ever on time and on budget. I had unrealistic expectations for outsourcing, and was punished for them by a prolonged project. I learned that outsourcing is best for small, simple tasks like design of a logo, a single static template, or even fixing bugs in existing code. Throwing a full application development project at outsourcers and saying “here, do this!” is much less effective, because any problems that come up cannot be addressed quickly.
Outsourcing is not a panacea for all of your development problems. Ultimately, if you want to build a successful web application, you will need a staff of full-time developers to maintain it. However, for quick tasks that are not mission-critical, or to fill some gaps in your application, outsourcing can be a very quick and inexpensive solution. Just remember to check on progress frequently, and address any bugs or problems before the project is completed.