Recently, I created a blog post on developer interview questions I ask as weed out questions. I'm back on this topic because Jeff Atwood blogged on it recently and I figured I should follow up on my own experiences.
All in all, I phone screened 17 candidates for the software developer positions that were open. Here are the results:
3 candidates answered most the questions and passed the fizzbuzz coding test in person. One was senior, one was midlevel, and one was fresh out of college.
3 candidates did reasonably well on the questions, but failed the fizzbuzz test completely.
1 candidate answered most the questions, but when presented with fizzbuzz they created a solution, but didn't follow the instructions given (went from 0 to 100 instead of 1 to 100).
10 candidates failed the phone screen being unable to describe basic OO principles.
So basically we had a 76% outright failure rate. I was still trying to decide if that's acceptable or if my interview process is too difficult but then looking at Steve Yegge's post, maybe it's not difficult enough. I was quite happy to see though that on the question set that the questions I came up with were pretty similar to his. I'm definitely going to borrow some of his other simple code questions though too so I don't have to rely on FizzBuzz all the time.
Some of you movie buffs will get where the title of this post is going, so I'll refrain from filling in the blank. :)
I got kind of jazzed up this morning when I was going through my blog feeds and I saw a post from my buddy Ray which is becoming far too common in my opinion. I've been keeping my finger on this undercurrent of backlash against mortal developers for quite some time now, and its growth in popularity in the community is becoming quite disturbing to me. Now let me just preface this that it isn't an attack on Ray, who I consider a friend, but I really need to address the idea he is putting out.
Is there too much money to be made in software development? No. Of course not. We live in a free market where developer talent is difficult to find and the tasks required by developers are not easily filled by off the shelf or low skilled solutions. The pay is simply a reflection of the basic supply vs demand in the market place.
Assumption #1 that is made in the opinion is that the high compensation is at odds with the desire to learn and grow your skills. If anything, I would assert that money is not a good indicator in IT of motivation. The concept that many developers will give away their time and skills for free to open source projects etc suggests that compensation while important, is not a primary piece of the puzzle. When compensation gets much higher in a particular field than others, what it does is bring people into the field who may have other aptitudes, but enough aptitude to survive in our field.
Assumption #2 is that having these non-elite developers in the field is a bad thing. It certainly is not. These are the people that drive companies like Microsoft to make tools that are easier for everyone to use and make common tasks more simple. The problem with people in our community here is that being better than average skilled tends to make you a control freak, and I see a lot of backlash against simplification tools because you lose granular control. Making software development easier lowers costs, improves reliability, and allows development talent to focus more wholly on the problem to be solved than the mundane details. I drag and drop all the time when I'm prototyping, if I didn't have the simple tools to do these tasks, it would be much more costly to do proof of concepts and a lot of ideas would end up being rejected out of hand.
Assumption #3 is that every software project being worked on is considered core and critical to a business and deserves highly skilled developer talent thrown at it. The reality is that all businesses are operating with limited time and resources, and must allocate those resources for the best overall gain. Many software projects start out as "nice to haves" but aren't critical to the business. The business throws these to the low bidder in order to try out a concept, and if it works and becomes critical to the business they want to pull focus on it. Then they bring in the big guns who proceed to sit around and bitch about the architecture, quality of code, whatever instead of realizing that businesses and people do not deliberately attempt to create bad software, but sometimes unimportant software evolves into something more. As a manager I've had this decision cross my desk many times, and it's not an easy one to make. Do I take my superstar developers off the money making projects to work on a proof of concept for the marketing department or do I toss the smaller unimportant project to cheaper, lower skilled talent and see if it takes off? Generally the best use of my resources is the latter.
Assumption #4 is that skilled people like Ray even want to do the work that the "mediocre" developers are doing. I know coming up the chain in my career I avoided maintenance projects like the plague. I hated doing maintenance and loved doing new architecture and development. You couldn't have paid me enough to maintain an existing application because it was so damn boring! I also tend to prefer business applications and logic as opposed to other types of software. Could I work on a product like Vista? Probably, but I don't want to, I don't have any interest in it. Does anyone think Scott Guthrie would leave his role at Microsoft to be a maintenance coder on 15 yr old bank software? Someone has to do it though.
Assumption #5 is that being mediocre is a choice. People are different, we have different aptitudes, different intelligence, different social aspects. Not everyone can be productive in every environment, not everyone learns at the same rate, and not everyone has the same max potential. Does that mean these people have no place in the field? These arguments usually make me think of what would happen to a company if every 3 years they went through the performance reviews and fired the bottom 80%. Sure you'd only have the top 20% working at your company, but you'd probably be overwhelmed by the amount of work to be done.
I think the community needs to take a deep breath and realize there is value in developers of all skill levels and tasks which are best suited for them. They also need to realize that the project you are working on may not have been, is currently, or ever will be considered key to their client's strategy, and thus simply may not be all that important to get perfect. Lastly, let us all realize that the 80/20 rule on skilled people isn't a symptom of IT, it's a symptom of the world you live in. We can't all be valedictorian, nor should we need to be.