Wednesday, July 20, 2005

Creating Great Software Teams

I read Joel On Software. Occasionally, he tells you how he goes about creating great software, which is to get great programmers. He was a Microsoft intern back in the day, and perhaps epitomizes Microsoft thinking more than anyone, even those in Microsoft.

The thinking goes, hire smart people, and you get great products. It's not such a bad way to go, until you think of how they get great programmers. Imagine you have a computer science department with 100 students ready to graduate. Only hire the top 5 students. The rest are useless.

OK, I should be more fair about this. In general, Microsoft doesn't care about grades or past experience. They believe very much in their interview process. The typical interview is really about 6 interviews. The first is with a recruiter who asks some non-technical questions and appears to be 9 times out of 10, a woman.

Then, two more interviews with one group at Microsoft, followed by three more interviews with another group. Lunch is one of the interviews.

The questions asked depend on the group that interviews you. Microsoft has many groups. I'd guess at least fifty, but one hundred wouldn't surprise me. They try to act like fifty small start-up companies. Some groups ask lots of brain-teasers. Some ask lots of coding questions.

If you're just graduating, you don't interview for a particular job position. You interview for a job type. For computer science majors, those three types are: SDE, which are programmers, SDET, which are testers, and PMs, which are feature spec designers. SDEs are called "devs" for short, and are the elite. In a group of 80, maybe only 20 are devs. 40-50 more are testers. The remaining are PMs.

PMs are program managers. Despite the name, they are not managers in the conventional sense. You could, on your first day of work, be a PM. Your job is to manage a project, not people. You design the features. Then, the dev works on the APIs and fleshes out more details. The tester tests code written by devs.

An interviewee is assigned two groups by Microsoft who interview them. They prefer to hire smart people who will do the job assigned, rather than listing all of their jobs and having potential hires select which job they want. They figure smart people can work on anything, and everything can be exciting.

Occasionally, they interview a superstar, and when they recognize them, they try to sell them on working for Microsoft. My cousin appears to have gone through this route. They do a better job of selling themselves than most companies.

Perks include your own office, free membership to the local gym (which is very nice), free bus passes at Seattle (convenient). They generally treat their employees very well. In exchange, they get to work them like crazy too.

Spolsky, who is the head of Fog Creek software, wants to tap into the same kinds of college students that Microsoft does and that Google does. The biggest problem for him is, well, who's heard of Fog Creek software? They don't write particularly innovative software. They have a bug tracking system (which is really a project management system). They have a program to manage webpages. They have Co-Pilot to help debug Windows problems using VPN and webpages.

Yet, they write the stuff very well, and they make money. They try to write easy-to-use stuff that doesn't break.

Many companies looking for superstars tell you, it's better to reject ten great programmers than hire one average one. If in doubt, no hire. Thank goodness the rest of the world doesn't work that way. Essentially, they want the software industry to resemble professional sports, where only the thousand or so best players can make a living, and the rest do something else.

I'm at a startup, but at this point, our name recognition is not that great. We're also not located in California, or in a big city (though we are near a big city). To find great programmers, you have to convince them to move to where you are. Unlike college football, which can convince great athletes to go to Happy Valley or Morgantown or many an isolated town, it's too hard to get great programmers to move to Iowa. A few might do it, but not enough.

Lesson one. Fog Creek Software is located in New York City. Even if some people despite NYC, more people like its city amenities.

Lesson two, which Spolsky doesn't exactly mention, but which is becoming key in his strategy to get the best. Blog about yourself. This allows you to show off to anyone who finds you, and through word of mouth (and the three books he wrote), he can begin to build a reputation that he wouldn't have otherwise. Right now, he has some project called Aardvark where college interns get to design their own project from scratch.

If and when they finish their project, the company can use this to convince more to work for Fog Creek. He has someone filming the intern experience so he can use this to advertise to others. In order to pull this off, he has to be completely concerned about the work environment. Coincidentally, they've just built some extremely nice digs for the programmers to work in.

In this day and age, you advertise the heck out of your company, to get the best. The question I have is, what do the rest do? Even as many elite programmers lean left, many lean right when it comes to hiring programmers.

Ah, well, they're all going to be outsourced anyway, eh?

No comments: