Recently I had the advantage of exploring a side of programming that is becoming all the more popular in the business world of software development, Outsourcing.
Now at first outsourcing may sound like a great idea. Pay others to develop on your product without having to worry about hiring temporary employees. However, as easy as this sounds, there are some things you need to consider before you attempt to outsource your product.
- Learning curves: Unfortunately, your outsourcer is going to be at a huge disadvantage, they have no experience with your code. It is harder for an outsourcer to reverse engineer your software enough to program new features, mainly because they lack the ability to keep in constant contact with you. It is easier for a temporary employee to learn the code because they have access to your best resource, your developers. This issue is even further complicated if you are using resources outside of your country. It is hard for an outsourced developer to ask questions while your development team sleeps.
- Language Barriers: When using an outsourcer outside of your country, communication may not only be affected by time differences, but language barriers. Your outsourcer may not be all too familiar with your language. Items may get lost in translation. This becomes a large issue when you discover the outsourced developer’s interpretation of your design or product requirement document is completely different from the wanted feature.
- Proper Documentation: Most outsourcers have been trained to program an item specifically to the requirements document. Your documentation should cover every detail to help the outsourcer better understand the features you want. This also extends into the realm of your current software documentation. The more documentation you have about your existing code, the easier it will be for an outsourcer to develop and implement his/her assigned tasks.
- Coding Standards: Are often ignored by an outsourcer. Most outsourced developers are required to program as quickly and efficiently as possible. This can lead to your software coding standards to be overlooked. Even though the functionality has been added to the software, this doesn’t mean that the functionality can be easily extended, or even maintained well.
- Loyalty: One thing that can’t be purchased is loyalty. To an outsourcer, you are a client. Next week their will be another client. Their loyalty is with the outsourcing company, not the client. Keep this in mind because loyal employees will be more motivated to make the software better, where an outsourcer is just trying to get the job done.
- Proper Training: Make sure you have the time to properly train the outsourcer, not just in the code, but on the actual software. It will ease development time if the developer knows where certain functionality is in the UI so that it can easily be traced in the code. Without proper training, you are more likely to encounter features that are not fully implemented because the developer didn’t know about another part of the software.
- Development Environment: Outsourcers may not use the same editing tools and operating systems that you develop with. This becomes especially important when an outsourcer uses Windows and your team uses Linux. Line ending differences can cause merge problems in source control systems. Make sure you can have your outsourcer use the same environments that you develop on.
Even though there can be difficulties in using outsourcers, I don’t feel it is a bad thing. Using an outsourcer can provide an easy gateway to get the help you need fast, especially when its difficult to find unemployed programmers. But, also think, is it better to delay your release to make sure everything is right and as bug free as possible, or get the product out the door by using developers unfamiliar with your software.