Let me be clear about this: I love my work. Programming has been very good to me, and I've loved the challenges it presents. But I wonder if industry is making short-sighted decisions that will eventually bring crisis to our profession.
I work for a fairly large company (6,000 employees, a little over $1B in revenue). For the past few years we've been following what I think is typical industry practice: currently employed programmers are largely domestic, while new hires are sourced almost entirely from offshore data centers. At first, we had new-hire data centers in India, then we started in Poland and most recently in China.
By the way, this is not a rant against the offshore programmers. Who can fault anyone for seeking employment and providing for their families? Today's column is about a business problem, not the offshore debate.
Anyone who's ever worked with consultants will recognize that effective programming is comprised of two primary pieces: knowledge of the toolset (language, frameworks, configurations, etc.) and knowledge of the business domain. High-end consultants typically start an assignment with a lengthy debriefing in which business knowledge is described to them. This is necessary because it's impossible to make informed strategic decisions without a good understanding of the business context you're working in. The same is true of stay-in-place programmers: only entry-level coders bring value solely through toolkit knowledge. Mid-to-upper level coders have to understand the business, so they can make informed architectural level decisions. The higher up the ladder you go, the stronger the business/technical see-saw tilts towards business knowledge.
OK, here's the problem: With our moving-low-dollar-hiring model, we've effectively cut off the business domain accumulation pipeline. Today's entry level coders are tomorrow's application subject matter experts. What we have done is constantly moved the bottom rungs of the ladder, so nobody is being given the time to thoroughly understand how the complicated applications work. We've still got domestic experts on the top end of the ladder who learned the ropes while bottom-level jobs led directly to the top-level jobs. But noone is going to be able to climb to the top of the ladder in the future-- the bottom rungs keep moving.
What will happen when today's set of application architects retires or moves on? There won't be any mid-level experts in India-- those experts took other jobs when the coding work went to Poland. And there won't be any domain experts in Poland, either-- that feeder pipeline was shut down when the low-end work went to China. I'm sure China's surging economy will eventually price the Chinese coders out of the business too, and we will again move the bottom rungs of the ladder somewhere else.
I guess a pure capatilist would say that this is forcing efficiency somehow, that the business will adjust to this problem as it seeks to become more efficient. I just don't see that working out-- the people who know how to make effective strategic decisions are invariably those people who have had years, maybe decades to understand how a company's applications power the enterprise. I think it's a short-sighted business anti-pattern, and short-term greed is driving it.
Maybe the end result will just be sub-optimal business performance in the long run. Like all engineers, I just hate to see inefficiency, especially if it's something that's shaping up to manifest itself years down the line.
But for today, I've got a couple of new books to read. One's on Plone, the other on DSLs in Groovy. So I'm going to go study a little just-for-fun low level coding, just for the joy of learning new things. That's something all programmers across the globe can enjoy!