The Ultimate Guide To Salary Negotiation For Software Developers

Written By John Sonmez

This may be one of the most important chapters you read in this book—no, really. As a developer, having the soft skill of negotiating well can transform your financial future.

Using the advice in this chapter, you may be able to earn yourself hundreds of thousands or even a million dollars or more over the course of your career.

The reason why is two-fold.

First, if you negotiate correctly, you can increase your starting salary at a job you take by a fairly large amount—much more than you can ever expect to get from raises.

And second, raises are almost always based off of a percentage of your current salary.

That is why it is absolutely critical to get a good salary when starting a new job and to negotiate as best as possible.

Unfortunately, most developers severely undercut themselves and either don’t even negotiate at all, or immediately roll over and accept the first offer they are given.

I fully understand this mentality, especially if you just want to get a job, but it’s important to think about the long term.

In this post, I’m going to take you from first getting an offer and the things you need to consider, all the way to the negotiation phase, where I’ll give you some of the best advice I have about making a counteroffer.

Know Your Salary Range

Salary Range Software Developer

The first thing you should do is know your salary range, the area of technology, the job title, and the geographic location of the job you are applying for.

Let’s break some of these down.

You should know what the salary range is for the specific job you want at the company. Sites like can help you with that.

You can also ask around.

If you know someone who is working at the company, don’t ask, “How much do you get paid?”

Instead ask, “Is x to y dollars a reasonable salary expectation based on what you know? And if not, what would you say is reasonable?”

Whatever number they say, increase it by at least 10%, since no one wants to help someone else get paid more than themselves.

You are not going to have perfect data on this, but before you go into any kind of salary negotiations or evaluate a job offer, you should at least have a pretty good idea of the range whatever company you are applying for usually pays someone in an equivalent title or position.

In fact, large companies might even have an actual official pay scale that you can get your hands on.

For example, when I worked at HP, my manager had an official pay scale with different pay grades that he could show me.

Sometimes, all you have to do is ask.

However, you shouldn’t use this as your only data point.

You should do additional research to find out what software developers of different levels of experience and working with specific technologies are being paid on average.



Ask around and search for this data. It won’t be that difficult to find.

Yes, I know this is extra work, but it’s also plain old common sense.

Any time you are about to enter serious negotiations on a money matter, you should have your facts straight.

If I’m going to buy a new or used car, you can bet I’m coming prepared with the car’s Kelly Blue Book value, what other dealers or sellers are pricing the same or comparable vehicle at, and the dealer’s invoice, if I can find it.

So many software developers ask me what number they should name when asked about their salary requirement (hint: don’t name any), or whether an offer is good or not, but if they would have taken the time to do a little research ahead of time, they’d already know.

Trust me, this research can pay off well, so do it.

Getting the Offer

So, let’s skip ahead a little bit—since negotiations can happen before or after the offer—and talk about when to expect an offer and what to do when you get one.

Most companies will tell you ahead of time if they are going to send you an offer, although I’ve received a surprise email or courier with one from time-to-time.

It’s debatable whether it’s more beneficial to negotiate before the offer is made or after.

If you negotiate before getting the offer, you risk not getting one in the first place.

But, if you negotiate after, you risk not setting the stage properly and getting an extremely low offer that will be difficult to negotiate out of.

All-in-all, I prefer to do the bulk of the negotiations after getting the offer because at that point the hiring manager has made a firm decision to hire you, which will be an advantage in negotiations.

When you get an offer, it’s important to remember that an offer is just that: an offer.

It does not mean you absolutely have the job—although chances are likely—and it does not mean you are guaranteed anything in any way.

Offers can easily be rescinded, although it rarely happens.

You should carefully read the offer and pay attention to any deadlines for responding. (Those can be negotiated.)

Look for the details like the start date, yearly or monthly salary, job title, benefits like vacation or health insurance, and any other details that are important to you.

All of these points are negotiable, so it’s important to consider everything.

You may be tempted to just immediately accept an offer, especially if you’ve been looking for a job for a while. Don’t.

It’s always worth trying to negotiate, at least to some degree.

Before we move on, let’s talk about one more important point when it comes to getting an offer: the time frame.

I’ve had plenty of job interviews where I’ve waited for weeks before getting an offer or a rejection letter.

Chances are, if you got the job, you will get the offer fairly quickly within a few days of the interview—although this isn’t always the case.

Its always a good idea to follow up, especially if you can indicate subtly that you have another option you are considering.

Many programmers are afraid to follow up, but I can’t understand why.

Do you think that someone who wants to hire you for a job is going to decide to not hire you because you sent them an email asking about when to expect a decision or you followed up in some way?

It’s more likely that being aggressive and a go-getter will move a hiring manager from a “maybe” to a “yes,” so definitely follow up.

Salary Isn’t Everything


We’ve already hit on this slightly, but let’s dive a little deeper into what makes up the entire package of a job offer.

Far too many software developers just look at one number—salary—when considering a job and an offer.

Not only does this approach take many negotiating factors off the table and make your position weaker, but it also may cause you to short-change yourself by taking a job offer that appears to be worth more money, but actually isn’t.

Let’s consider a few scenarios, shall we?

Imagine having two offers. One is for $90,000 and the other is for $80,000.

The $90,000 offer, we’ll call it “Offer A,” is from a small company. They are going to give you a .05% equity in their company which vests after three years.

The CEO indicates that, since they are a small startup, typical working hours are around 60 hours a week.

Vacation time is “generous” and is combined with sick days to form a “take vacation when you need it” policy.

Health insurance is provided, but only covered at 80%, and you have to pay $200 pre-tax into it via your paycheck.

There is a 401k retirement plan, but no company matching.

Your job title will be Senior Software Developer.

The $80,000 offer, we’ll call it “Offer B,” is from a pretty large Fortune 500 company. You won’t get any equity in the company, but you may get stock options as a bonus, if the company has a good quarter.

The company seems to have a good culture. Many developers work from home. They usually have social events where they take half-days on Fridays. You don’t get the impression that many people even work 40 hours a week. Work-life balance is an HR policy.

Vacation is being offered at “two weeks,” which increases after several years of service. You also get five paid sick days.

Health insurance is fully provided with no extra cost at 100% coverage.

There is a 401k retirement plan with 2% matching.

There are a few other small benefits like an onsite, heavily discounted cafeteria, discounted child care, gym membership, etc.

Your job title will be Software Engineer II.

We could spend all day talking about the differences between these offers, but I want to start with the most important and best way to compare two offers from a financial perspective.

Hourly Rate

Let’s talk about hourly rate.

You see, salary tends to hide this.

In order to get the real hourly rate you will be paid, we need to take into account the following important factors:

  • Expected hours you will work in a week
  • Expected compensation, including bonuses
  • Vacation time
  • Value of benefits you will use (especially health insurance)

This can get fairly complicated, but let’s try to keep it simple, since we are only looking for big differences. It’s not worth considering that one job ends up being $35 / hour and the other is $36.

Let’s take both offers and try to come up with an hourly rate.

Offer A:

Hours worked in a typical week: 55 (give them the benefit of the doubt)

Straight compensation: $90,000

Bonuses: $0 (equity is usually worthless)

Vacation time: 5 days (when a company has an unlimited vacation policy and has 50-60 hour workweeks, you typically take very little, if any, vacation.)

Health insurance: $700 a month

$90,000 + 0 + ($700 * 12) = $98,400

$98,400 / (55 hour per week * (52 – 1 week vacation))

$98,400 / 2805 (total hours worked per year) = $35 an hour

Offer B:

Hours worked in a typical week: 40

Straight compensation: $80,000

Bonuses: $2,400 (assume 3% average)

Vacation time: 10 days

Health insurance: $1,500 a month

401k match: $400 a month

Other benefits: $200 a month

$80,000 + $2,400 + ($1,500 + $400 + $200 * 12) = $107,600

$107,600 / (40 hour per week * (52 – 2 week vacation))

$107,600 / 2000 (total hours worked per year) = $54 an hour

Now, before you get all upset, I’m not saying a big company is necessarily better than a startup. It could be the other way around, but look at the difference here.

When you look at how much you are actually being paid an hour on one job where the salary is lower, the actual hourly value is about $54 an hour while the other job, which pays $10,000 more, is actually only about $35 an hour.

This is huge!

Even if I am off on some of my estimates, you can easily see how looking at salary alone is deceptive and can lead you down the entirely wrong path.

Always, always do this kind of calculation when you get a job offer.

Now, of course, it doesn’t just come down to money.

You might be much happier at one company, and at another have a bad time on the job, so definitely take that into consideration as well.

But as far as negotiating is concerned, make sure you are making a fair comparison from a financial perspective.

We’ll talk about negotiating next, but think about how much of a difference this kind of information makes to what you ask for.

Knowing this information, you might ask the startup company for $120,000 in order to make it comparable or a better deal than the large company offer.

Without this information, you might have assumed the startup company’s offer was actually better.


Salary Negotiating

Ok, now that we’ve properly set the stage, we can actually talk about negotiating.

Without having the background knowledge we covered above, I’m sure you can see how your negotiations would be much less effective.

First of all, let’s talk about why negotiating is so important.

I hear plenty of times from software developers that they didn’t want to hassle with negotiating and risk losing the job, so they just took the offer.

Often, these well-meaning developers try to convince me it wouldn’t have made much of a difference anyway.

Respectfully, I disagree. Here’s why.

One big reason is that it is much easier to impact your salary when you first begin a job than through getting raises at your developer job.

If you can raise your overall compensation by 10%—which is usually easily obtainable—you can possibly put yourself ahead by 2-3 years in terms of raises, which usually are around 2-3%, but might actually be 0%.

This alone might not seem like a huge deal, but the power of compounding—what Einstein called the 8th wonder of the world—can make it so. Let’s see how.

We’ll just use salary negotiations for this example, but ultimately you want to negotiate on every factor we talked about in the previous example to influence the overall compensation.

Suppose you took a job for $80,000 instead of negotiating and getting $90,000.

The chart below assumes a 3% raise every year.

Let’s see what the difference would be after 10 years.

Year 1$80,000$90,000
Year 2$82,400.00$92,700.00
Year 3$84,872.00$95,481.00
Year 4$87,418.16$98,345.43
Year 5$90,040.70$101,295.79
Year 6$92,741.93$104,334.67
Year 7$95,524.18$107,464.71
Year 8$98,389.91$110,688.65
Year 9$101,341.61$114,009.31
Year 10$104,381.85$117,429.59

That represents a difference of $114,639. That might not make you rich, but it is a pretty decent amount of money.

That assumes you stay at the same job for 10 years and get 3% raises, but what happens if you switch jobs and negotiate again or you negotiate your raises?

And what happens if you take that extra money you are making and invest it?

Oh, and, if you are curious what the difference might be over the course of your entire career, say 30 years, it’s $475,754.16!


One of the first things to consider when entering any negotiation is the relative positioning of both parties.

This is one of the main reasons why I spend so much time teaching software developers how to build a personal brand and market themselves.

The better your position is coming into a negotiation, the better the outcome you can get from the negotiation.

The person who can most afford to walk away from a deal always has the best position—remember that.

Probably your best possible position is to have a company seek you out specifically and try and recruit you based on your unique talents, abilities, or reputation and for you to already have a very nice, high-paying job along with several other offers.

Oh, and you also have plenty of money in the bank to live off of for the next three months or more.

Does this story seem like fantasy?

It’s not. When I was still writing code full time, before I went out on my own, I was able to put myself in this exact position, and it was great.

Let’s look at the contrast.


The worst position you could be in is to have applied for a job without a referral. You are barely qualified for the job since they asked for someone with a college degree, and you don’t have one.

The interview didn’t go well, and you were the third choice for the position. The other two candidates declined the offer.

You don’t have another job lined up. You are about to get kicked out of your apartment, and you have a bunch of unpaid bills.

Can you see how you’d be in a much better negotiating position in the first case as compared to the second?

Before you even get into negotiations, you want to do as much as possible to try to get yourself as close to the first case as you can.

You never want to be caught in what I call “the squeeze,” or a squeeze situation.

This is a situation where your choices are extremely limited, and you are forced to make some suboptimal choices because of some constraint like finances, a deadline, or some other calamity.

So, what can you do to improve your position?

First of all, you can make sure you are not desperate.

Don’t quit a developer job before you have another job lined up—even if your boss is a jerk.

Try to have a few months of living expenses saved up at all times. Anyone can do this and it will keep you out of quite a few squeeze situations in your life. (Trust me on this one.)

Try to apply for a job from a referral if at all possible. (See the chapter on finding a job for more info on that.)

Be extremely well-prepared for an interview so that you can have the strongest performance possible. If you “ace” an interview, you are going to be in a much stronger position than if you barely squeak by.

See if you can get multiple offers lined up at the same time.

Make sure you know the job market, the company you are negotiating with, and the salary information we talked about above. Knowledge is power. In any negotiation, the party with more knowledge is in a much better position than the party who lacks it.

Establish a good reputation. The better your reputation is, the better your position will be. This is one of the main reasons I advocate for every software developer having a regularly updated blog and learning some basic marketing and branding skills.

Before you begin any negotiation process, evaluate your position and the position of the company you are negotiating with.

Whoever Names a Number First Loses

Remember how I said knowledge is really important in positioning?

One of the biggest pieces of knowledge you or a company can have about you is salary information.

In just about any negotiation, whoever names a number first loses, or is at least at a distinct disadvantage.

Under no circumstances should you reveal your current salary and you should never name the salary you are looking for until you’ve been given an offer first.

Yes, I know this is easier said than done.

Yes, I know companies will directly ask you both your current salary and what salary you want for the job you are applying for, but there are several ways around this.

First of all, if you are asked what your current salary is, you can say that it is confidential information from your current employer and you wouldn’t feel right giving out that information.

You could simply state you prefer not to say.

If pressed why, you could say that you consider the entire compensation package which includes benefits and other non-tangible items, so you wouldn’t want to talk in terms of salary alone.

You could also take a more blunt approach and simply state that you feel like talking about your current salary would put you at a distinct disadvantage in negotiating your salary at this job, because if your salary was significantly lower you would get less than you are worth, and if it were significantly higher, you might not get an offer which you might have considered.

This exact same advice can be applied when you are asked to name a number for your current salary expectations.

In addition, you could say that you will entertain any reasonable offer or that you would like to know about the entire compensation package rather than to just name an arbitrary number.

(This is actually a very smart thing to say when you consider how much of a difference the overall compensation package made to the hourly value of the two offer examples we looked at above.)

Here’s an example from a blog post I wrote on this topic:

“Suppose you applied for a job and you expected that the salary for that job was $70,000. You get offered the job and the first question you are asked is what your salary requirements are. You state that you are looking for something around $70,000. Perhaps you are even clever and say somewhere in the range of $70,000 to $80,000. The HR manager immediately offers you a salary of $75,000. You shake hands, accept the deal and are pretty happy—only there is one big problem: the HR manager had budgeted from $80,000 to $100,000 for the job. Since you named a number first, you ended up costing yourself potentially as much as $25,000 a year—whoops.”

Don’t Be Afraid to Counteroffer

Counteroffer salary

In just about all situations, when you do get a job offer, you should counteroffer.

This is what is known as an arbitrage situation because there is very little downside but a very large upside.

What I mean by this is that you have very little to risk and a large amount to gain.

It would be rare for an offer of employment to be revoked simply because you made a counteroffer.

In most cases, the worst they can do is say “no.”

So, you should almost always make some kind of counteroffer.

What kind of counteroffer you make will greatly depend on the situation and context.

You should, however, have a clear goal in mind for what you would like to get out of any negotiation and the minimum you are willing to accept, before going into negotiations.

This will make it much easier for you to know what your counteroffer should be.

I’ve also learned that, when it comes to negotiations, usually whoever makes the biggest move or concession ends up losing in the long run.

In one of the only legal battles I’ve ever had to seriously entertain in my career, I was in negotiations over a settlement that was in arbitration.

The original damage to me was around $10,000, but my lawyer came in asking for an initial settlement of $50,000.

The first round of negotiations ended with the other party countering our $50,000 request with his own offer of exactly zero dollars.

My inclination was to immediately drop the ask to $25,000 or so, so that he’d at least start coming up.

To my shock, both the judge and my lawyer agreed that the best number in this case would be around $45,000.

What happened next was magic.

Suddenly we were looking at a counteroffer of $9,000.

Again, I was inclined to counter back at around $15,000 or so to “meet in the middle.”

My lawyer and the judge both agreed that coming back with $39,000 would be the best number.

This continued back and forth with the other side coming up and us barely moving down, until we ended up somewhere close to $16,000. (Remember, my original goal was just $10,000.)

What I learned from this negotiation is that you should be extremely careful moving down from what you want and instead try and force the other party to come up.

I also learned that by having someone represent you, through the power of agency, you have much more leverage than representing yourself.

So don’t be afraid to counteroffer and when you do counteroffer, know what you want, aim much higher than that number, and come down slowly.

And don’t be afraid to make more than one counteroffer.

There is a limit. I probably wouldn’t make more than two or three because, at that point, your prospective employer will probably be questioning how badly you actually want the job, but you should at least make one and, in most cases, two.

Everything Is Negotiable

When you negotiate, do not just negotiate on salary alone.

Remember how we broke out all the components of an offer and actually figured out the hourly rate difference between Offer A and Offer B? Even though Offer B was for $10,000 less salary, it turned out to be a much better deal than Offer A.

If you only negotiate on salary, you’ll be leaving a large amount of your negotiating power off the table.

It’s always important to remember that different aspects of a deal have different values to different people involved.

While salary might be really important for your prospective employer because they have a set range and HR policies that prevent them from going above it, they might be able to be much more flexible with vacation days, medical benefits, or some other perks that could impact the overall deal just as much or even more than salary alone.

It’s crucial that you not only look at every component of a compensation package or offer, but also negotiate on as many points as possible if you want to maximize your opportunity.

Even working hours can be negotiated ahead of time.

It is very possible to negotiate that you will only work 40 hours max per week at a job with a startup company where most employees work 50 and 60 hour weeks.

It’s also not unreasonable.

Negotiating something like this ahead of time can be extremely valuable, especially if you can put those other hours to good use.

The point is to negotiate on all points. You will have more to work with and can increase your overall compensation much more than you will by just negotiating on salary.

Don’t Succumb to Time Pressure

Time Pressure

One of the best negotiating tactics possible is to put the other party under time pressure—artificial or real.

When you are under time pressure, you feel rushed, so you are more likely to make a bad decision.

You’ll notice used car salesmen and timeshare vacation salespeople heavily employ this tactic, along with a large amount of pressure.

Make sure you always have time to think about and consider your options.

One of the best way to do this is to ask or to simply state that you need more time.

Just because you received an offer that has a deadline three days from now doesn’t mean that you have to make a decision in that time frame.

If you need more time—or if you are waiting for other offers, see below—just say you need a few more days to consider the offer.

If the company you are working with won’t “play ball,” you can try making a fairly high counteroffer right at the deadline.

This can often buy you more time as they will have to come back with another offer and give you more time to think about it.

Just make sure you are not making a rushed decision based on the time limit. In many cases, it’s better to pass in life than make rushed decisions.

Multiple Offers

If you are fortunate to be in a multiple offer situation, you might find it stressful because you don’t know what to do.

It’s great to have options, but is it ok to play your options against each other?

And how do you do it?

First of all, you should have multiple offers if you are doing things right.

Try and make it so that you have more than one offer on the table at the same time.

Schedule your interviews and apply for jobs in such a way that maximizes this potential.

In the real estate business, some savvy agents will “premarket” a house by advertising what date it will go on the market.

When that date rolls around, they get multiple offers at the same time and often can trigger a bidding war.

So, there is value in having multiple offers, but you have to play it carefully.

I think the best way to play it is to let the parties involved know that you do have multiple offers you are considering, but not to directly use or reveal that information to each party.

What I mean by this is that you should be honest that you are considering other offers because you want to find the best opportunity for your future and where you can make the best contribution.

This is perfectly reasonable, and it puts a certain amount of pressure on a prospective employer to give you the best offer possible and raises your value in their eyes since you are a “hot commodity.”

Nevertheless, you should not go to one prospective employer and say, “Well, so-and-so company offered me X amount of dollars and Y amounts of vacation, so you’d need to at least offer me Z. Plus, they have a cafeteria. What do you have?”

That is a really good way to have the pending offer withdrawn and to have them say, “No, thank you.”

No one likes to feel like someone is putting the squeeze on them.

It’s one thing to be honest that you have more than one offer, but it’s another thing to use that information to try and bully someone and force their hand.

If a prospective employer asks about how big another offer is and what you are considering, it might be ok to reveal a little bit of information, but you’ll have to be really careful to do it in a modest way that doesn’t sound like you think you are all that.

Use discretion and consider the situation and context.

Ultimately, the real value in having multiple offers does not come from directly playing offers against each other, but in having options.

Having options gives you the most valuable negotiating position: the ability to walk away.

When you have two or three offers, you can confidently negotiate each one hard and not worry if you lose one or two.

Just tread carefully and don’t be a jerk.