Software development is its own unique thing. It is not a profession that can be directly equated to any other. This tends to frustrate people who try to understand the profession. This is true even for software developers, who would like an established model to follow. This is why you see some software companies run like a law firm while others are run like a band of pirates.
Architecture is often seen as a parallel to software development, leading to the trend over the last decade for everyone who can design a program to declare themselves a “software architect”. Of course software is also like plumbing and gardening and a bunch of other professions. And yet it is still unique.
Software by its very nature is an abstract concept, and there are only a few professions that deal in abstract concepts. Law is certainly one. Acting is another, and that’s what I’d like to talk about today.
Think about one of your favorite TV or movie actors. Why do you know this person? 99% of the time, you know an actor because of some role they played which you saw and liked. It was probably some great role you saw them in too. You know George Clooney from “ER” or films like “Ocean’s Eleven” or “O Brother Where Art Thou?”. You probably don’t know him from “The Facts of Life” or “Streethawk”. (Remember Streethawk? It was awesome.) In any case, you know most actors by what roles you’ve seen them play, and how well (or in some cases how terribly poorly) you think they’ve done.
The software world doesn’t work like that. Think of just about any well known person in the software world. How do you know about them? Did you see their amazing code? Probably not. More likely you bought their book, or you saw them speak, or you read their blog.
Of course there some exceptions – programmers who are known mostly for their work. These are almost exclusively in the free software field though, like Linux Torvalds or RMS. (Of course RMS is more like a Tim Robbins: Respected and talented with a passion for activism. But I wince when he opens his mouth.) And even in these cases, most people have never seen any of their code, even though they’ve probably used it.
If you’re a great actor, pretty much all you have is your portfolio of work. But that’s ok: If you’re talented and had good opportunities, you can point back to your portfolio and get more work. In software it doesn’t work that way. Sure, you may have a portfolio of work, but nobody cares. Unless you have an existing relationship with an employer, getting hired consists largely of two things: What specific technologies you’ve worked with lately, and how long you’ve worked with them.
No one calls up George Clooney and asks if he has recent experience playing a 5′ 10″ lesbian biker with a mohawk. (Although I am now tempted to make that call.)
That sort of thing happens everyday in the software world. Why? Our representation is different.
In Hollywood, if you’re lucky enough to break in to the movie business, chances are good that you’ve got an agent. You commit to an agent for an agreed upon amount of time. Your agent works actively to find you a part in a movie. You audition, and if you get the part your agent gets a percentage of what the studio pays for you. From what I hear, that percentage is usually in the 10-15% range. Sometimes a little higher depending on what they are doing for you. It is a simple system that seems to work.
The software business in different.
If you’re a contract programmer like I am, things usually work one of two ways: Either you work for a consulting company directly and you let them find you work, or you advertise yourself on places like Dice and negotiate each contract through a recruiter to get a job you want.
That first scenario is most like having a Hollywood agent. You typically don’t commit to the consulting company for any fixed length of time, but otherwise it is the same. The consulting company works to match you to a suitable position. You interview for the position, and if you land the gig your consulting company takes a percentage. Except the percentage they take is more like 40%.
If you work under the second scenario, you generally have more control over things, but you’re also taking more risk of being out of work. More often than not you’re going through the very same consulting companies to get contracts, but you’re not staying exclusively with them so you’ve improved your bargaining position somewhat. You’ll probably be able to negotiate a better deal than 40%.
There is actually a third scenario where you find your own contract. Often you still need representation either because the client requires it or because you don’t want to do billing and cash management yourself. In that situation you have all the bargaining power, but even so, the lowest commission I’ve been able to negotiate is 14%.
So why can’t contract programmers have a Hollywood-style agent? After all, most actors aren’t George Clooney or Tom Cruise. We’re not talking about the top 1% here, we’re talking about the average Joe, the character actor. Why can’t I commit to an agent for a few years, have them find me work, negotiate for me, and only take 10-15% of my earnings?
The answer, as best as I can tell, is commoditization. In our industry the middlemen – hiring managers, HR people, recruiters, etc. – work extremely hard to commoditize labor. To most recruiters, if you’ve got 5 years of experience with C++, you are the same as anyone else who has five years of experience with C++. Never mind that you are an actual person with unique skills and personal qualities that are hard to encapsulate in a resume.
This can be greatly frustrating at times. Most recruiters out there are non-technical people. They aren’t idiots, but most aren’t passionate about what they do and are generally focused on short term goals. Their job becomes one of matching up acronyms in the job requirements with acronyms on your resume. This is reinforced by hiring managers within their client companies, who are almost always in some huge hurry. This system practically guarantees that the best people for a position will never get selected.
Even more frustrating is the need to go through the negotiating process every time you want to work. Really, that’s what an agent is for, and sorry, you’re out of luck there. There are no true agents in this business. Instead, you get a recruiter who either deals in large volume or fat margins. The amount of money they make pimping you is unlikely to be much different than the money they would make pimping someone else. Multiply that by hundreds of developers a year and it all averages out. Why bother to cultivate a personal relationship with talent?
If you’re a movie actor, when you complete a film you have something tangible to point back to and say “I did that”. Not only that, but thousands or maybe millions of people have seen what you did. Your unique skills and personal qualities come through.
If you’re a programmer, when you complete a project, even a highly visible one, you can also say “I did that”. The difference is only a handful of people are really going to understand what you did. Any programmer who has tried to explain what they do to their mom knows what I’m talking about. Is it any wonder that programmers have to turn to non-programming means to stand out?