I've been a software developer for 20 years (or more if you count jobs when I was in my teens) and while I ridiculed the thought of engineering unions for most of that time, I've recently come around to the completely opposing view. I am an unqualified supporter of union organization in the software and IT industry.
Professional white collar unions work well and are present in almost every type of professional situation. Airline pilots and flight attendants are unionized. University faculty and staff are unionized. Doctors are unionized. A limited number of software professionals are unionized, mostly in Washington state (thanks, Microsoft, for inspiring this!).
I've changed my mind about unionizing because as the industry has "progressed," software engineers, even (especially) exempt employees whose work is not closely overseen, have become units of resource to management. They - we - are no longer individuals with a recognized continuum of expertise and intelligence. Instead, we are "Java programmers," "familiar with LAMP stack," "experienced with Scrum and XP." We are defined by acronyms (misspelled like PERL), and not our experience, creativity, and problem solving skills. And as much as people like to say "we are looking for a good team member who will fit in," and give us detailed personal interviews, we don't get to that point without passing through the dehumanizing hoops that recruiters and managers use.
The past 25 years of development methodologies have focused almost exclusively on predictability. Management wants to quantify us, to be able to say that X programmers * Y skill level * Z days = 1 product. Quality and creativity are secondary unless they can also be quantified. *Reviewers*, not management, are the people who wind up saying "This is an AWESOME product."
It's dehumanizing, and three decades after "The Mythical Man-Month," the treatment of programmers as numerical resources on Gantt charts still doesn't work. You don't write a certain number of lines of good code each day, or a certain number of subroutines or tests, the same way that you pour a certain number of yards of concrete per day. And yet that's how we are treated.
We shouldn't have a working environment that corresponds to our fantasy of how we should be treated. We should have a working environment that corresponds to how we *are* treated. When we are functionally equated with people whose work is interchangeable and quantifiable, we should have the same benefits that those developed over the past century that *PROTECT* them from the impersonal abuse that naturally follows.
We need job security, because we have none.
We need work rules, because we have none.
We need protection from vendor and offshore outsourcing, because we have none. Nor do the vendor (contractor) temps have protection from the whims of management.
We need people to speak for us and our rights and dignity and who can do it with force and authority.
I'm sick of being treated like a number and increasingly sick of it as I've gained experience and flexibility over the years.
I could argue that unionization is good for companies too, in that it imposes a longer-term view and responsibility on them. But frankly I don't care. I care about my workplace, my livelihood, and the same for my fellow employees and all software professionals.