Cost down, risk down, quality up. These are the valid reasons for outsourcing. If you have a resonable expectation of getting all three, it should be a no-brainer. Often it is a trade-off and, at the margin, you can get the decision wrong on either side of the equation. Be quite clear, if you are not outsourcing, you are making a decision not to outsource. If you have no tangible data to confirm your current position, then you are not managing your business properly.
I think most people would be surprised at how much a business already ‘outsources’. Do you generate your own electricity? Provide your own water supply and drainage? Make your own pens and paper? Operate transport infrastructure to take employees to and from the office? Do you even own your own offices? A simple management technique for sidestepping the issue is to divide everything into ‘core’ and ‘non-core’ activities. So, for the above list most businesses would classify everything as ‘non-core’ and have done with it. Actually, if you ran the cost, risk, quality rule over the list you’d probably get the same answer, but at least it has some empirical justification.
In the business context, cost is often seen as the overriding variable. Yes, it can be the most important element in the decision but it should always be balanced against the potential impact of introducing lower quality and/or increased risk into the business. Never outsource on price alone, but don’t be afraid to consider changing the process to achieve cost savings rather than just trying to do the same thing, only cheaper. This is a point that many small ISVs fail to grasp. Independent software testing brings benefits across all stages of the software development lifecycle. This means that if you include effective testing into the software development process, the overall cost of development, support and maintenance can be reduced, even though the direct costs of a better software testing process might rise. How could this be the case? Well, better testing means less defects in the released software. This means less developer effort assigned to defect remediation. When customers find defects, the time between the defect being created and the developers recalling the intention of the code causing the defect can have real impacts on fix time and code quality. The sooner the test team find the defect, the more chance the developers have to recall how the code was developed and thus have a better chance to make a more robust and quicker fix. Also, if customers are not finding defects, that makes for happier customers which reduces support calls and produces greater customer retention. Thus, allocating sufficient budget to acheive truly effective testing can improve both the top and bottom line figures!