I admit to frequently harboring unrealistic expectations. With that in mind, here's my early take on why hiring managers are having a hard time finding good tech workers in the United States.
IT careers require an understanding that the purpose of commercial computer systems is to serve people. Not to serve one another, not to serve database rows or HTTP packets, but to make people glad they're using their computers instead of grappling with the latest work-around. I'm concerned that we're drifting from that target, that we're treating newcomers as interchangeable cogs with narrowly defined skills. This present-day mind-set sanctions learning the trade by skipping apprenticeship and leaping straight into coding or certification, as if rote knowledge were all that's required to excel. Basic competence is valued above creativity, imagination, and communication skills.
More and more, companies are sending the message to IT workers that they're eminently expendable, sandbags to be tossed overboard when stock prices need a lift. Under those conditions, workers swiftly discern their employer's threshold of acceptable performance and make that their target, plus 0.01. Competence is valued above all, so there's little incentive to exceed expectations or define a more demanding job description. Instead they'll maintain only those skills they can transfer from job to job.
I have two examples that point to this. Consider the decline in the quality and consistency of user interfaces. I look at the hideous UIs on many commercial applications and it's obvious the interface was slapped together just so that the design tool would crank out the code for handling user events. The code was finished, but the barely capable UI went out the door with just a little polish. Also take a look at the sorry state of documentation. The ability to write coherently and express technical ideas to nontechnical users or to professional tech writers used to be a clear-cut requirement for the job.
Since the recovery, I've wondered why, when faced with the possibility of being outsourced or replaced with consultants, in-house IT workers haven't risen up and pointed out all they've done to affirm their commitment to and intimacy with their employer's goals. And why do I keep hearing that outsourced code is of identical quality to that produced in-house?
I'm leaning toward the notion that American companies lowered their standards to ensure that they had no irreplaceable staff. A vital IT field is fueled by people you can't afford to lose and workers competing to achieve that status.
I don't claim to have a definitive solution, but I think I know a good place to start. Ask around for names of driven individuals who bring ingenuity to their jobs. Talk to them and find out what motivates them. Put some smaller projects "up for bid" by allowing two teams to work the same spec to completion -- code, docs, user training, and all. If you don't see enthusiasm, quality, and imagination that outsiders couldn't bring to the work, then you've figured out why you can't find impassioned workers. How about telling your people that you won't outsource, contract, or H-1B anything that workers prove can be handled in-house? Ask your best workers to refer new job candidates, and let people excel into positions of job security. In other words, when layoffs come around, keep the people who put their hearts into staying on. Build a bullpen of people you can't afford to lose -- or risk losing them all.