[A picture of private offices at Fog Creek Software] Alert! This ancient trifle retrieved from the Joel on Software archive is well-past its expiration date. Proceed with care.

Joel on Software

How do You Compensate Programmers?

by Joel Spolsky
Sunday, August 27, 2000

Editor's note: This article originally appeared August 28th, 2000. Based on a tremendous amount of great feedback received from my readers, I've completely rewritten the policy. This article appears as a matter of historical record only.


How do you compensate programmers?

I'm designing the compensation package for programmers at Fog Creek Software, and I could use your advice!

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.

Level

Years of experience

Technology exposure

Initiative and architectural skills

9

0

Two programming classes and incredible aptitude

Can develop code with significant mentoring and review. Intended mainly for summer interns and high school kids.

10

Recent grad – 1 year

Coding for one OS like Unix, two or three programming languages, no API experience

Can execute on a plan or write code that someone else specified, requires some mentoring

11

1 years – 3 years

2 platforms (e.g. WinAPI and Unix); RDBMS; two or three other programming platforms (like ASP, JSP, PHP, perl, etc)

Can work independently on a feature and can suggest improvements and shortcuts

12

3 – 5 years

Enough different technologies to be able to make excellent choices of architecture

Can design and architect a feature independently; given an interesting problem to work on, can architect, lead, and build the whole thing; can mentor less experienced developers

13

5 – 10 years

All the above, plus, knows enough about other disciplines to be able to lead specialists in those areas (e.g. networking, wireless, hardware, datacenter, telecom, etc)

Can conceive, design, architect, and lead a team to implement an entire product or company. CTO-like skills.

14

10 years plus

Significant experience inventing and architecting new technologies which are widely used throughout the industry

A "Fog Creek Fellow": Invents whole new programming languages like C++; extensively known through books and articles.

This level is reserved for hiring people like Bjarne Stroustrup or Linus Torvalds, or promoting geniuses to an independent research position.

  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.

So, what do you think? Am I crazy? Is this naïve? Should I hire "compensation consultants" to charge me more than I bill annually just to set salaries? Let me know!


Read some responses
Have you been wondering about Distributed Version Control? It has been a huge productivity boon for us, so I wrote Hg Init, a Mercurial tutorial—check it out!

Want to know more?

You’re reading Joel on Software, stuffed with years and years of completely raving mad articles about software development, managing software teams, designing user interfaces, running successful software companies, and rubber duckies.



About the author.

I’m Joel Spolsky, co-founder of Fog Creek Software, a New York company that proves that you can treat programmers well and still be highly profitable. Programmers get private offices, free lunch, and work 40 hours a week. Customers only pay for software if they’re delighted. We make Trello, insanely simple project management, FogBugz, an enlightened bug tracker designed to help great teams develop brilliant software, and Kiln, which simplifies source control. I’m also the co-founder and CEO of Stack Exchange. More about me.

© 2000-2014 Joel Spolsky