Pay incentives in the tech industry

Developer paySlate recently posted an article about incentives in the fruit picking industry and how they can increase productivity. Naturally there is a big difference between fruit and scripting, but it begs the question: can we do more in the tech industry to link income to productivity? I think we can.

A hard problem to solve

In most organizations the developers are some of the highest paid employees. They get paid well because their skills are scarce and hard to reacquire. This leads to entrenched “senior” developers who produce little, but “know” (and therefore get paid) a whole lot. It also shifts the emphasis to stability and away from being quick, nimble, and adaptive. Over time this turns your development teams into an occupying force rather than a fighting force.

How can we shake things up?

Code Cookoff

Last spring our tech team (from my day job) engaged in a week long experiment to see how quickly we could clear out old code. We called it a Cash Code Cookoff.

The economics were pretty simple:

  1. Delete commented out code: $5
  2. Delete unused files/functionality: $10
  3. Re-write a bad section of code into a good one: $25
  4. Roll out a bug that someone else catches: -$20
  5. Track over 75 items as a team and everyone gets an extra: $100

We’re a small team in a small company. Two years of scramble coding had left us with a lot of dead wood to clear out. The whole project cost less than $1000 and reduced the file size of our code base by nearly 90%.

Being productive

The combination of the team goal, the encouragement from the business side, the payout, and the novelty of the program helped make the Code Cookoff hugely productive.

In an interesting twist, the guy who got the most done and therefore received the highest payout was our newest developer. Besides being really aggressive he took the idea seriously from the start and was immediately able to see how his effort contributed to his paycheck. It didn’t hurt that I let him wonder through my obese code base to make deletes :-)

Watching the money grow

When you are already valuable to the company there is little reason to move quickly with dev projects. But with a pay incentive this hierarchy turns on its ear and twice the work means twice the reward. While salary information is normally kept secret, work incentives are public. Employees are free to compare themselves with each other and to compete. They also have the satisfaction of being rewarded with each completed item.

You want team members thinking

“I could always do more today”

and not

“I’ve done enough for today”.

Quality as a business aim

In many companies it is difficult for the business folks to see developers as are much more than glorified copywriters. The difference being that they can’t read what we write and so they don’t care about code quality. They care about the next feature, bug fix, color change, etc. But not quality.

The Code Cookoff gave business incentives and overt permission to focus on quality. It let developers scratch that long neglected itch and go back into their code to make things better, cleaner, smarter, and slicker.

It also penalized developers for bugs in a very public way, increasing awareness of how changes impact the customers.

Base it on headcount?

The Code Cookoff was a wonderful success, but could it scale beyond a week? Let me suggest an idea: base it on headcount.

In this system you could offer an individual incentive for each item and a team incentive for each item. Complete an item and you get paid $20. At the end of the period everyone gets $10 for every item the team completed successfully. This encourages collaboration as every item completed matters to each team member.
To make it interesting, you should tie the individual rate to number of team members. Unable to keep up with the work? A new hire means that the individual rate for everyone falls by 50%. But you can make up for it by getting significantly more done as a team.

Example

Consider the following chart:

tech pay chart
So from the business side there would be a sweet spot where increased productivity would “pay for itself” by delaying the need to hire additional developers. Likewise developers would be rewarded for their efforts and would be more apt to keep an eye on each other to make sure “stuff was getting done.” Increased productivity at the team level would offset the drop in the individual rate over time because the team as a whole gets more productive.

A key aspect would need to be manager oversight to make sure payable “items” involved work and not just answering an email or support question.

Thoughts?

What do you think? How would you incentives your tech workers? What holes can you poke in this approach?

* Update:

As Dan pointed out, Joel Spolsky lambasted the whole idea of pay incentives in his own blog post. He makes some good points although I’m not sure I agree with the whole argument. In a small company where your dev team is your operations team it could easily make sense to reward people for driving their area of the product forward. Its hard to tell if that reward should just be your salary or some other kind of incentive to increase productivity/focus.

6 Responses to “Pay incentives in the tech industry”

1

My guess is that the only reason this works well is that it was short term and unpredictable.

If you think about it for a moment, paying for bug removal is even worse than paying per line of code for encouraging inefficiency. Don’t take my word, for it, though.

Try it out and just watch for increased frequency and volume of check-ins… and dramatically higher increased code churn.

My guess is that if the company is small enough, social forces will be strong enough to keep most people from doing this too much.

2

This was well written. I do think there is room for pay incentives in software development, but the application of such would certainly be trickier than for a low skill job. It is also compounded by what you describe as your dev team is also your operations team. If all the incentive is on the dev side, then who will do the ops work? Balance would be necessary. Anyway, I’d like to see a company try this and measure the productivity. I guess you’d need to quantify your productivity now so you have a baseline to compare. Good luck!

3

I really like this idea; I might try to implement that myself at some point.

4

It says a lot about the team that 90% of the code base was dead code and that although it was easy to clean it up, the team required small monetary incentives before the team would do it. Why was the team so unmotivated to keep the code base clean in the first place? I doubt the incentives will change the prevailing attitudes of the team in the future and therefore I predict the quality of the code base will quickly degrade again.

5

Frank:

In defense of the team, they’ve done an excellent job. We are a very “bleeding edge” company and requirements have shifted tremendously over the last two years. This left a lot of features that at the time we might need to be compatible with, but with a new focus it become clear that it was nothing but dead code. We cold press on with new projects, but the Code Cookoff gave us the time to go back and clean things up a bit.

6

The problem is that software development is a variable task. If you paid to fix a bug, people will only target the simpler bugs to get more fixed and to get more reward.

It also encourages people to put problems in there in the first place just as paying per line of code encourages verbose code. If I can write a bad section of code and get $25 for fixing it why wouldn’t I.

Fruit picking is a constant simple task. It’s not like some parts of fruit picking are more dangerous or harder than others which is why it works. This also applies to production line work where you can get bonuses on the number of widgets you produce. However it too can suffer from sloppy work in order to get more items completed.

Leave a Reply




You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>