There is no simple answer to that question for all cases, but there certainly are some key considerations which will help you select the optimal solution for your case. In fact, the considerations are not unique to software development – they apply almost as well to any product or service you have:
-
Control of core competency. Don’t outsource your core competency. If your software is your solution and “secret sauce,” don’t entrust it to outsiders of any kind. It’s like giving up control of your company. If the software is ancillary to your mission, proceed through the rest of these considerations.
-
Intellectual property content. Some country cultures have little appreciation for software as intellectual property. For example, 90% of the software used in China and Vietnam today is pirated. Near-shore and local outsourcing alternatives are manageable with contracts and non-disclosure agreements. Protect your intellectual property.
-
Technology level. If you expect your solution to incorporate the absolute latest in software technologies, scalable to millions of users, with multi-system failover and recovery, don’t count on out-sourcing. On the other hand, if it is maintenance and testing on non-core software, use the lowest cost solution.
-
Cost factors. Companies in Asia and Eastern Europe can still provide direct cost reductions of up to 75%. In these calculations, be sure to include indirect costs of remote work, such as more project management, more travel, and less efficient communication. The net may be less cost reduction than you thought.
-
Product or services. Once product software is written, it doesn’t take much effort to deliver it to customers. Software services, on the other hand, involve the creation of software customized for a specific situation, with a relatively low level of leverage and reuse. Outsourcing for services needs to be carefully managed, and almost never works.
-
Creative or operational. Creative products, like chip design programs, architectural rendering, or consumer games are not easily outsourced. Operational products, like process automation or reservation systems, may be large but mundane, and more easily outsourced. In all outsourcing cases, a detailed specification is required.
The typical software startup these days is a one or two person operation, founder and co-founder, who do the work themselves on the first product with no salary. With today’s tools, they can do the work of a six or eight-person team 10 years ago, so software outsourcing is not appropriate.
On the other hand, if your startup is not software oriented, but you need some work done (not central to your product and core competency), it is usually better to outsource, either locally or remotely, than to hire employees, manage them, pay benefits, and maybe have to lay them off later.
If you do decide to outsource, build the relationship first, and manage the project carefully. Watch for evidence of inadequate staff and training, high turnover, poor or inadequate process, and lack of vendor project management. On your side, the killers are poor specifications, no acceptance criteria, and scope creep.