Somehow the topic of unions came up at work yesterday, and, in particular, why unions have totally failed to become a force in the high-tech economy of the Bay Area. I had put some thought into this a few months ago when I made the mistake of deriding unions in front of a friend whose entire family was strong union members. After shamefacedly extricating myself from the situation, I tried to figure out why I didn’t think unions were a good idea for somebody in my position. Here’s my stab. You be the judge.
I postulate that unions are a necessary force in situations where there are few differentiating factors among workers. Taking the prototypical example of the assembly line, I would imagine that it may take a few months to learn your role on the line, but after that, your ability to do your job faster or more efficiently isn’t going to improve significantly. In fact, no amount of natural ability is going to really differentiate one employee from another – the line moves at the same speed regardless of who’s on the line. I’ve never worked in a factory, so this may be a total fiction, but let’s take it as an assumption for now. In the absence of unions, it would make sense for the company to fire people after a few years as they demanded more money, because they don’t get appreciably more economic return with the greater experience of those more senior employees. Unions, by enforcing seniority and by organizing the workers, provide a balance to the company’s firing power.
In such a world, unions don’t make a lot of sense. There is little incentive for the company to fire people as they become more senior, because their productivity goes up faster than their salary demands. Furthermore, a union would hold back the superstars, because unions are based around the idea that all workers are equal, whereas that is manifestly not true in the world of software engineering; again, the superstars are demonstrably more productive than their coworkers. In fact, superstars elevate the level of your entire team; for instance, they might design a more efficient architecture which the rest of your less talented software engineer team can fill in the details. And since software engineers are full of hubris (and laziness and impatience), they all believe that they’re the superstars, so they look down on the concept of unions and all workers being equal.
That’s been the state up until now. However, I think it’s possible that things may change radically in the near future. Why? Because those “average” programmers don’t necessarily have to be here. You could have your superstar software architect design things, and then outsource the actual implementation out to a firm in India. All of those less talented programmers are now out of work. Let’s re-examine the two qualities to an employee pool that I said contributed to unions: (1) experience makes little difference, and (2) all workers are equal. In this new outsourcing world, (1) is less true than it was before, since if you’re not a superstar, and are merely implementing the superstar’s design, then your experience is not as useful. You have to know enough not to make dumb mistakes, but the learning curve levels off fairly quickly. And as far as (2), again, if you’re not a superstar, you’re equivalent to any of the other guys, so they may as well farm that work out to India. Thus, the conditions are now in place where unions might thrive.
I’m not saying this is necessarily an accurate picture of how the software engineering industry looks right now. For one thing, I’m exaggerating the difference between the superstar and the average programmer for the sake of this argument. Of course it’s going to be more of a continuum. However, several companies already operate with this two-tiered model in place. Oracle and Sun are well-known for hiring hordes of kids straight out of schools as programmers to implement the software designed by their more senior folks. The kids generally last about two years before they realize they’re getting overworked and underpaid and move on. And the next wave of kids rolls in. The two years is important, though, because it gives Oracle and Sun a chance to spot any potential superstars and find a way to keep them. Microsoft does the same thing on a grand scale; they generally try to hire the top graduates regardless of whether they need them. They figure that, if nothing else, they’re keeping the superstars from their competitors.
So I think it will be interesting to see how the software engineering industry develops. Will unions or some other sort of collective employee bargaining be in its future? Regardless, I don’t see a lot of future for any software engineer that is not of superstar quality; those implementation jobs will continue to flow to China and India where programmers get paid 10% or less of what they do here. This is why I currently specialize in instrumentation software, where developing the software requires physical presence. But long term I may have to consider whether software engineering is a field with a future.