Tuesday, January 16, 2007

How do You Compensate Programmers?

Here's the tentative plan. I'd love to hear your feedback and discussion on any and all aspects of it.

Fog Creek Software hires programmers at six different levels, Level 9 through Level 14, which roughly corresponds to their level of experience, seniority, and initiative. Programmers are assigned a level when they are hired, and may move up or down in level at any point in time.

Levels are set approximately as follows. These are merely guidelines; the real way they are set is by comparing groups of people at various levels and then adjusting based on a consensus of how good they are.

Compensation consists of:

1. Salary
2. Annual bonus
3. Benefits
4. Stock options
5. Startup bonus

Salary is intended to be very egalitarian, fair, and transparent. Fog Creek will have a simple schedule of salaries (set competitively) based on level. For reasons of fairness, there will be no variations on these salaries from person to person. Everybody knows what the guidelines are for levels; everybody knows what level they are at; and everybody knows what the salary is for their level.

Annual bonus is also intended to be equitable. Each year, Fog Creek management will determine what total dollar amount should be awarded in bonuses. This amount will be prorated according to salaries and percentage of the year that they worked, so every employee will receive a bonus amounting to an equal percentage of their salary: if I get a 11% bonus, everybody gets an 11% bonus. It is our explicit philosophy that bonuses are rewarded based on the performance of the entire company, not the individual. (Also, there is no penalty for quitting the company before bonuses are paid: if you do this, you’ll still get your prorated bonus for the part of the year that you worked. This policy is to prevent getting a wave of people quitting every January and screwing up our lives).

Benefits are equal for all full-time employees. (We may end up with categories like intern and temp with more limited benefits). Some employees may get more "value" out of their benefits than others (e.g., if they use the health clubs).

Stock Options are weighted heavily to compensate the people who take the most risk, namely, the people who join Fog Creek when it's just a wee tiny company. As the company grows, the initial package of stock options offered to new hires will be lower and lower. At any given time, stock option awards are equal based on level.

Since the basic compensation is set in stone, for the purpose of fairness and equity, the only tool we have to lure people who have great offers elsewhere is with a Startup bonus. This can vary wildly from new hire to new hire. It is mainly intended to compensate for cases where the normal benefits package does not appear to be competitive to a candidate who, for example, has an offer from another firm that is disproportional to their actual "market" value. As a typical example, suppose we're currently paying level 10s (new college hires) $60,000 a year + $5,000 startup bonus, and we think that's about fair. If we are having trouble luring a particular hire that we really want, because he or she has an offer from another company for $70,000, we'll just add $10,000 to the startup bonus and keep the salary at $60,000.

To summarize: as a company, we are very concerned with equity and fairness in salaries. We think it will be extremely valuable to maintain salaries, bonuses, and benefits for programmers at equal levels rather than negotiating individually with everyone and then having people upset that they are not getting a "fair" salary. So, at the point of trying to hire someone, if they simply wouldn't be happy with what the rest of the team is getting, we'll dazzle them with a startup bonus but set their actual salary where everyone else's is set. And if we're having trouble hiring because of low salaries, we'll raise the salaries for everyone, even the people we've already hired.