What Candidates Get Wrong About Salary Negotiation (And Why It Costs Them $20K or More)
Salary negotiation for software engineers is one of those skills that pays for itself in the first ten minutes of use, and yet most engineers who run practice sessions with us on LastRound AI treat it as an afterthought, something to figure out after the offer lands. That ordering is the mistake.
According to the Bureau of Labor Statistics, the median annual wage for software developers in the United States was $133,080 as of May 2024. The median total compensation across companies on Levels.fyi sits at $192,000 for US-based roles as of April 2026, which means the gap between “what most engineers make” and “what top-of-market engineers make” is wide enough that a single negotiation conversation, done well, can close a large slice of it.
Patrick McKenzie’s 2012 essay on kalzumeus.com is probably the best single piece of writing on this topic. His framing, that engineers treat bad negotiation as a “perverse badge of virtue,” still applies in 2026. What’s changed is the market context around it.
The Mistake We See Most Often in Practice Sessions
We run interview coaching at LastRound AI across technical rounds and offer-stage prep. The pattern that costs candidates the most money isn’t saying the wrong thing during negotiation. It’s preparing for the technical interview for weeks and then spending thirty minutes on the offer conversation. The offer call is also a performance. It rewards preparation just as much as the system design round does.
Specifically: most candidates anchor too low before they even open their mouth. They hear a number, feel relief that an offer exists at all (which, honestly, is understandable after a long process), and the first thing they want to say is yes. The first thing they should say is “thank you, I’d like a day or two to review the full package.” That pause alone, consistently, changes outcomes.
There’s a second version of this that we see less often but that hurts more when it happens. Candidates who do negotiate sometimes anchor to a number they came up with intuitively rather than from data. A recruiter at a Series B company and a recruiter at Google are working with different band structures, different signing bonus flexibility, and very different equity mechanics. Treating them the same way is a category error.
How to Figure Out Where the Offer Lands Before Countering
Before saying anything about what you want, know what the market actually pays for the role, the level, and the metro. For big tech companies, Levels.fyi is the only source I trust. It’s crowd-sourced and verified, and for roles at Google, Meta, Amazon, or Microsoft it will tell you not just median but 25th and 75th percentile total comp by level. That range matters more than the median.
For companies that are smaller or not well-represented on Levels.fyi, the best proxies are H-1B public salary filings and direct conversations with peers in similar roles. Neither is perfect. H-1B data reflects base salary only and typically lags 12 to 18 months. Peer conversations are accurate but require actually asking, which most engineers won’t do.
One thing people often overlook: the comp structure varies by company type in ways that make raw numbers misleading. See the breakdown in our FAANG salary comparison and salary by level guide for how the mix of base, bonus, and RSUs differs enough to make a “higher” number sometimes worth less in practice.
What Actually Moves the Number
Competing offers move numbers the most. This is not a controversial claim. A real competing offer shifts the conversation from “what do we feel like paying” to “what do we need to pay to close this candidate.” If you have one, say so early, be honest about the number, and be specific about why you prefer the company you’re negotiating with. That specificity matters; it makes the recruiter believe you’d actually take the offer if they meet you.
If you don’t have a competing offer, market data is the next best anchor. “Based on Levels.fyi data for this level in this market, the 75th percentile is X” is a legitimate anchor that recruiters will engage with seriously. “I was expecting a bit more” is not.
A few things that move numbers at the margin but that most candidates don’t try:
- Signing bonus flexibility. Signing bonuses come from a different budget than base salary at most large companies. A recruiter who genuinely can’t move base can often add $20K to $40K in signing. Ask about it separately.
- Equity cliff and grant size. At pre-IPO companies especially, you can sometimes negotiate the initial grant up by 20 to 30% without touching base. The company’s cash outlay doesn’t change, so there’s less friction.
- Early review cycle. If a company says the band is genuinely maxed for your level, ask for a six-month rather than twelve-month review with a written confirmation that a step increase is on the table. Some companies will agree to this; most won’t, but it costs nothing to ask.
- Start date and relocation. High flexibility here. Companies routinely give four to six weeks. If you’re relocating, you can often get direct reimbursement or a lump sum in the $5K to $15K range, especially at big tech.
The Conversation Itself
I’ll be honest about what I think matters most here, which is not the specific words but the mental model. Recruiters are not adversaries. They’re trying to close a candidate for a role their hiring manager wants filled. Being direct, professional, and specific about what you want makes their job easier. Most recruiters will tell you this themselves if you ask.
The things that actually go wrong in negotiation calls are mostly confidence failures. Saying your number and then immediately softening it. Apologizing for asking. Accepting a “no” on base before checking whether signing or equity has room. Practicing this out loud, with someone pushing back, is worth more than reading five more articles about it. (I’d rather you do three practice rounds in the copilot this week than spend another two hours researching scripts.)
That said, a few phrases that work:
When asked for your number first:
“I’d rather understand the full scope of the role before discussing numbers. What range does the company have budgeted for this level?”
When you get the offer:
“Thanks so much. I’m genuinely excited about this. Can I have until [day after tomorrow] to review the full package and come back to you?”
Counter:
“Based on Levels.fyi data for [level] in [metro], 75th percentile total comp is around $X. Given my background in [domain], I was hoping we could get to [$Y]. Is there flexibility there?”
If they say no to the counter: “I understand. Is there room on signing bonus or equity while we keep base where it is?” That’s it. One follow-up question. If the answer is still no on everything, you have to decide whether the offer is worth taking as-is.
A Note on the “They’ll Rescind the Offer” Fear
This almost never happens for a professional, data-backed counter. I’m not going to claim it literally never happens, because occasionally a startup with a fragile hiring process will read a counter as adversarial when it wasn’t meant that way. But at any company with an established recruiter process, a reasoned counter is normal and expected. Recruiters sign up knowing candidates negotiate.
The companies where a polite counter genuinely risks the offer are usually not companies you want to work at. That’s a debatable opinion and I hold it fairly confidently.
Where to Go From Here
If you’re still in the interview process, knowing which companies pay highest at your target level before you get to offer stage changes how you prioritize your pipeline. Running multiple processes in parallel matters more than any negotiation tactic you can deploy after a single offer arrives.
The prep that most reliably produces good outcomes is boring: research comp data for your specific role and level two weeks before you expect an offer, not two hours before the call. Write down the number you want and the reasoning behind it. Practice saying it out loud at least three times. Then make the call.
Salary negotiation for software engineers doesn’t require a special personality type or unusual confidence. It requires preparation, a real number anchored to data, and willingness to ask a follow-up question when the first answer is no. That’s most of it.
