In 1990 there were 595,000 Programming jobs in the US. Today there are less than 320,000 jobs. These numbers are from the US Bureau of Labor Statistics (http://www.bls.gov).
Many of these jobs have been outsourced to India, China, and other countries paying programmers less than 10% of the typical US salary.
As much as I hate the idea of outsourcing US jobs, there is little that any individual company can do to counter this. The only reversal on the trend in outsourcing will be taxation and regulation by government that addresses the issue. Until such time, I strongly recommend that companies get on board and outsource their IT in order to be competitive.
While I maintain that there is no single solution for any specific enterprise which each has their unique requirements, outsourcing and cloud computing should both be on the table as serious potential means of reducing costs while improving IT services.
Don't fall for the argument put forth by many internal IT folks, that offshore people are low quality and cause more problems than they provide benefit! That is simply not true. Offshoring requires strong management and controls at your location and within your company. Note that developers in India and China as well as some other companies are better educated and more highly skilled than the traditional US worker.
So tell me do you want to pay $80,000 and up (plus benefits) to a US worker with a high school education, maybe a year's worth of training a technical school, junior college, or worse a couple of weeks by an IBM SE, or a person with a Masters in Computer Science from Universities that rival MIT and people with IQ's and performance scores equalling or exceeding MIT and other major US universities for $10,000 per year (with no benefits).
The key in successful outsourcing is the agreements you have in place between you and your outsourcing contractor, statements of work governing each project, and clearly stated responsibilities for defect resolution. It is also your responsibility to provide very specific and accurate specifications as well as creating and executing formal test plans with review and acceptance by key business unit managers and executives.
The real key to success is your up front work and planning followed by your oversight on the execution. You can save millions of dollars.