Recently, I was a part of a discussion about which criteria should be used when determining a salary for a programmer: arguments varied from "it is a matter of employer's choice" to other arguments that took into account one's education, experience, understanding of technologies, etc. Not so long ago, I read a great post on the Stack Exchange blog on the subject and I couldn't agree more with it, but not many employers follow the described logic.

In your experience, which elements are the most important ones when determining salary for a programmer? Which criteria are most often applied in those situations? Which criteria should be most often applied? And finally, to which extent is formal education (college, university) important in determining salary?

Good question, but I don't see any way there can be a single "answer" to this. Maybe this should be a community wiki question?
–
FrustratedWithFormsDesignerAug 9 '11 at 19:12

I've reopened this question, as it's potentially the canonical answer to any questions we get about salary, and the only real way a salary question could be asked constructively.
–
user8Aug 28 '11 at 19:30

8 Answers
8

Unfortunately, in most places I've had experience with salary is not so much based on an individual's skill level, but on company policy, local competition and stinginess. Rules are set, the company in question will have a bunch of people who don't know squat about development come up with a pay grade chart. They'll throw a couple levels (i.e. Developer I - Developer III) of programmer somewhere on to the chart, typically higher than your average clerical worker but usually lower than someone who's position requires domain knowledge, even if these are the people you'll be working most closely with.

There will be criteria to fit you into one of those categories, however, it has less to do with skills and more to do with how much experience you have. In other words, the old guy sitting in the corner who refuses to learn jQuery because that's not how he did it when he wrote the original version of the web application will be paid more than someone who is current in technology, because he has more technical knowledge than you, you know because he has more experience.

Ultimately what decides how much you get paid is whether or not you pass the interview and how well you negotiate your salary. That said, negotiation will only yield a handful of percentage points at best. If you pass the interview you'll simply be slotted into the pay grade system based on how many years of experience you have in the industry. If you're lucky they'll give you vacation time based on this as well.

How It Should Be

Ultimately, the problem I have with companies is not that they setup a pay grade. The problem is they set up a pay grade that rewards just getting by and not getting fired. It doesn't really reward learning new information and this how a companies IT division stagnates and you get Bob sitting over in the corner who is totally and completely useless being paid more than any other programmer.

At some point during an interview process your skills relevant to the company would be assessed. If done correctly, it would be not only your ability to get through an interview that is judged but your ability to solve some real world development problems given recently faced by the company. Based on the speed and accuracy with which you're able to solve a problem should reflect where you lie on the pay scale. Any test given should allow you to demonstrate the following:

Ability to solve simple to complex programming problems

Ability to write clear and consistent code

Ability to understand existing code

Creativity expressed in solving the problems

Ability to communicate the solution to others

Higher Education

A college degree is important only so far as it will increase your ability to get a job with no experience. When determining salary, experience and negotiation rules all.

In Brief

In many situations, unfortunately, the rule is experience. Everything else is an exception to the pay scale. Your skill set only affects your salary in the way that affects who will give you a job. Most salaries, not just for programmers, work this way. It doesn't matter if you go to company with XYZ skills, they'll still only pay you X dollars, which might actually be 1.05 * Y that they offered another guy, but most salary ranges are set in stone and usually your years of experiences tells you which range you'll be in.

Sadly, I think Location matters most. It factors in to cost of living, but, more importantly, into what companies are hiring.

If you are in a location with multiple technical companies -- companies that live and die on their technical workers -- salaries for the workers will be higher. Competition for the good workers will drive salaries up.

If you are in a location primarily dominated by "IT Shops" -- companies that need software to do their business, but it's primarily an expense -- salaries will be lower. These companies look for warm bodies, and are not particularly likely to assemble a world-class technical team.

Even if you work at the technical company in a city full of IT shops, your salary will still be lower -- where else would you go?

If you are a "rock star", it just means that you have the option of competing for the better/advanced jobs at the employers. To really get a difference in salary, move.

+1 in that, in general, market forces set the price. One observation on tech companies vs. IT shops. I agree tech companies understand the value of good developers whereas your typical IT shop doesn't. However - at least round here (Scotland) - that doesn't necessarily translate to higher rates from tech companies. Even after the credit crunch, IT rates in finance companies are still higher than dev roles at tech/engineering firms.
–
sfinnieAug 9 '11 at 20:39

it's also driven by interest i think. many of the best developers aren't doing it for the money, so you don't always need to compensate heavily.
–
Matt JoinerAug 10 '11 at 2:08

1

so, really, the only way to get a higher salary is to move? :/
–
MaggieAug 10 '11 at 6:53

While you can get more money in another country, you will probably end up with increased cost of living also. Here in Denmark, we have pretty high salaries, but Denmark is also a very expensive place to live.
–
Niklas HAug 10 '11 at 10:47

The company finances, current local market rate and the importance of the position to the company are probably the biggest.

Company Finances: You can't get blood out of a turnip.

Current Local Market Rate: People have a problem paying more for something if they don't have to, and they are less likely to comprehend the value if they're not knowledgable in that area.

Importance of the Position to the Company: The need for a certain level of developer skill and experience gets driven by this. Can't a college grad do a simple web site? A non-software company may see custom software as a nice to have. In some situations they're tired of hiring a contractor and feel they can get someone full-time at a lower rate. That and it's so much nicer having them here all the time so we can constantly add new features whenever they want (They really believe that.). Having an in-house developer leave often puts a halt on the current project and there is consideration of buying something off the shelf. Consulting firms may feel they don't have to hire the best when their clients don't know the difference and if they did will still hire the lowest bid. There are some companies that have such poor management and business models that no developer's skill level can overcome. They just don't see how important it is to find and keep good people.

Location / Experience: The location and level of experience would provide the baseline for what I would pay someone. If I want low-quality workers I would stay at the low end of the scale, or if I wanted high-quality workers I would go for the high-end of this scale.

Coding Speed: The quicker they can accomplish a task, the faster we can move it into production and improve productivity. This increases business revenue, which allows me to pay employees more.

Coding Quality: If someone can code quickly, but it is a mess and hard to maintain, well then I don't consider that person to be an asset to the company. If they can do stuff quickly AND code in such a way that is easy to maintain, then they are a great asset to the company and I would pay them more.

And I would definitely not base someone's pay off their education level. I wouldn't even base it off past experience if the employee doesn't show that they have the knowledge base to go with that experience.

It comes down to how little a programmer who meets your needs is willing to accept and still want to work for you. If your work environment is roughly the same as the company next door's and they pay $5k a year more than you, developers are probably going to want to work for them and not you. If you are doing really cool things and are an awesome place to work, and the the company next door pays $5k more, then it may be more of a balanced decision. If the company next door pays $50k more, you'll probably still have a problem.

It's a balance of what your competition pays and the desirability of employment at your company based on other factors.

To decide what to pay the Programmer,only this thing I see which matters:

( characteristics which can be measured after hiring the programmer.):-

How Fast the Programmer learns something New and adapt in an organization ?

OR

(characteristics which can be seen before hiring)

how the programmer responds to a question containing some real problem issue of the organization project ?
:-
I mean what all ideas are generated by him in few minutes,which give some glimpse of whats the programmer's approach and does the programmer capable of Listening.

Determine a programmer's salary depends on many factors: first the place that the developer will work in. For example, in USA, working in Iowa state is different than working in New York or California. Because states differ in living standards, expenses, taxes, etc.

A second factor is the company reputation, working at a startup or mid-level company is not like working at large corporations! Definitely salary at the later is higher.

The thirds factor is the programmer skills itself, his work experience whether it's related to the job description or not, his achievements, his education (high ranked universities should deliver high qualified students).

The importance of the project and its revenue to the company is another factor, if the project is very important for the company, you want developers to be devoted to it, to make them devoted you need to feed them more!

Also the current market status, you won't offer high salary on a financial crisis time!

If developers are in demand (as they typically are in large metro areas), a developer is going to only move for N% greater than a current salary. It hardly matters what the current salary is or what N is, because it's different for each person. If a company decides that they want the engineer, then they must decide if they'll pay. I get the feeling that there's some sort of weird justification that goes on, where regardless of what the prior salary is, the prospective employer uses it to gauge the prospective employee's value. This sort of thing sucks (and feels incredibly unfair) early in a career but is quite nice later on!

This does not necessarily apply if the company can gain some sort of leverage. Some examples of leverage are: the developer is unemployed currently, or the developer wants to switch to some technology or language that he has no skill in.

At some point an engineer reaches a peak salary at which employers are not willing to pay N% more. Then the engineer either stays put, moves to management, considers lateral moves, etc.

I realize that this isn't the logical, rational, evaluate the employee by intrinsic merits type of answer you were looking for, but I do think its the way it really works.