So a couple people asked for this so I thought I'd summarize the process of how reviews in general work here at MS, plus some specifics about how we handle software developers.
First off, evaluating software engineers relative to each other is a bit tough to do purely objectively. Most of this is our own doing, because of the way software development has often been done over the last 20 years. Deriving metrics for large, complex projects can be difficult. You'd like to say "well, it's the number of bugs", but that's got issues because one dev may have a harder feature than another, or less QA support to ensure there aren't bugs. Or you can say "it's if they get their features done on time, " which is tough because people often get sidelined with all sorts of other things, and time without a quality bar doesn't mean much. So it's difficult, and one of the reasons that we're working hard about how to fix the process so you can get to a point where you can use some of these metrics. In general, in my world I see a few attributes in software engineers that are more successful than average:
- A "gimme the ball!" attitude. Regardless of what the challenge is or what else they have on their plate, they think they are the best person to handle any given issue.
- Raw smarts. When push comes to shove, can I throw anything that needs to be done at them and feel confident it'll get taken care of properly.
- Thouroghness and responsibility. We don't have processes just for the sake of process, and when people skip them out of lazyness or pass issues on without making sure it's not theres, it wastes time.
- Thinks like the customer. The more a dev is able to put themselves into a customer's shoes, and design and test their code like a customer would use it, the better their results will be.
So, onto the process here. And this is the same for pretty much everybody.
At the beginning of the process everyone writes their own review, talking about what they've accomplished for the year relative to their goals, sets new goals for the next year, etc. Their manager usually helps them with their new goals and writes a set of feedback and/or assesements and delivers that with the numbers above. The whole process really takes a lot of time and effort -- generally reviews have to be written and given to managers by mid-June, and pay raises/bonuses don't come into effect until mid-September.
Everyone here is graded annually on a rating system out of 5. I guess techically there are ratings below 2.5 but basically you shouldn't have a job at that point so not really. The ratings shake out like this:
- 5.0 - you saved the world from an alien takeover, and cured cancer. There are very few of these given out.
- 4.5 - not many of these either but they do happen, especially at more junior levels. You rock pretty hard.
- 4.0 - you consistantly perform above expectations in all your job functions and a few that you weren't even asked to do. This is the rating most people shoot for.
- 3.5 - you're cool, you're meeting all your expectations and exceeding a few. This is the rating most people get most of the time.
- 3.0 - you're meeting expectations. You don't really want too many of these on the record or someone important will notice. Growing and exceeding expectations is kind of an expectation.
- 2.5 - you're not meeting expectations, and you're going to be managed pretty aggresively, and you either pick up the pace, or, well, you know.
But everything here is a strict meritocracy, and therefore all of this is done on a curve. That's right, you can be on a super strong team and not get the 4.0 you thought you were getting because relative to your peers, that's where you ended up. My team is just awesome, for example, and this could be the situation for us going forward. Now, we definitely try to take care of people. If everyone on the team really rocks, you're not likely to get a 3.0 or a 2.5.
We look at the whole team and rank each member according to their job level -- we have pay/seniority levels here, roughly analogous to how the gov't or military does it -- and then based on that stack, out pop the numbers above as their percentages dictate. But if everyone is just really excellent and it would be a injustice to just meet the curve, you need to make sure that the curve works at the next level up the chain,e.g. your bosses organization or his bosses organization. If you can make a case that everyone on your team deserves a 4.0, then some ranking across teams may happen to figure that out. In almost every case, the right thing happens.
So this set of ratings is called "the model" and it gets "pushed" up the chain and aggregated at each level. If there are parts of an organization that don't meet the model, they're generally asked to make adjustments. A bunch of math is done on the model to make sure it's right, then it's finalized, and the results are sent back down and communicated to each person, along with any raises, promotions, bonuses, and/or stock grants.