What you'll learn
By the end of this you'll know how salary negotiation works from the company's side, what's actually negotiable in a typical offer, how to respond to the first number without tanking the relationship, and the specific language patterns that make these conversations less adversarial and more effective.
This isn't a script. It's a mental model plus the handful of specific phrases that help developers — who often find this kind of conversation uncomfortable — navigate it without guessing.
Who this is for
- Developers who have an offer and aren't sure whether or how to negotiate
- Developers who've accepted offers without negotiating and want to do it differently next time
- Developers who've tried to negotiate before and had it go awkwardly — and want to understand why
You can skip this if you already negotiate comfortably and you're looking for advanced tactics like competing offers or equity modeling. This is the basics, done correctly.
What salary negotiation is
Plain English: negotiation is a short conversation where you and the company adjust the offer until both sides can say yes.
The first number is almost never final. Recruiters expect a counter. You are not being difficult — you are completing the process.
Prerequisites
Before you counter, gather:
- The written offer (base, equity, bonus, start date, title)
- Market range for role + level + city (Levels.fyi, Glassdoor, two recruiter chats)
- Your target number and walk-away floor
- A specific date you will respond by (buy thinking time)
Do not counter without data. "I want more" is weaker than "Market for L4 backend here is $X–Y; can we reach $Z?"
Setup from zero
Step 1 — Pause before accepting
When you hear the offer live, say you are excited and will review the full package by [day]. Never accept on the call unless it is wildly above your ceiling.
Step 2 — Build a one-page comp sheet
List base, equity (annualized if RSU), bonus, signing bonus, benefits that matter (401k match, remote). Compare total comp across any other offers.
Step 3 — Script your counter in one sentence
Write: number + brief reason + desire to join. Rehearse until it sounds like you, not a template.
Little tip: send counters over email when possible — you keep a paper trail and avoid improvising under silence on a phone call.
Why developers under-negotiate
There are a few specific reasons developers leave money on the table: assuming the offer is final (it rarely is), treating negotiation as conflict (it's expected), and not knowing market ranges (data beats guessing).
The mental model
The mental model: the offer is a proposal, and you're collaborating on terms.
You're not trying to "win." You're aiming for market-aligned comp you'd feel good showing up for. Be specific — "I was hoping for more" is not a counter; a number with data is.
Key terms
Base salary — the fixed annual or monthly cash component. The number in the headline offer. Usually the most negotiable part of an offer.
Equity / stock options / RSUs — ownership in the company, usually in the form of options or restricted stock units. At public companies, RSUs have clear value. At startups, options have speculative value. Negotiable separately from base.
Signing bonus — a one-time payment made at signing or after a short period. Sometimes offered; sometimes available if you ask when base is inflexible. Useful when the company can't raise the base but wants to close the gap on total compensation.
Total comp (TC) — total compensation: base + equity value + bonus + benefits. The number worth comparing across offers, not just base salary.
BATNA (Best Alternative to a Negotiated Agreement) — from negotiation theory: what you'll do if this negotiation fails. Having a real BATNA (another offer, a current job you're okay staying in) gives you genuine leverage. The psychological state of "I'll be fine if this doesn't work out" comes through in how you negotiate.
Competing offer — an offer from another company used as explicit leverage. Using it well requires being willing to actually take it. Using a fake competing offer is a relationship-burning move if discovered.
Step-by-step
Step 1 — Receive the offer, acknowledge without accepting
When you receive an offer verbally, the right response is not "yes" and not "let me think about it" in a tone that reads as "no." It's:
Thank you — I'm genuinely excited about the role. I'd like to take a day to review the full package before responding. Can I get back to you by [specific day]?
This buys time without signaling rejection. Never accept on the spot unless the offer is so clearly above your expectations that there's nothing to discuss. Even then, it's fine to take a day.
Step 2 — Do the market research
Before responding, find out what the market range is for this role and level in this location. Levels.fyi for tech roles (especially at larger companies), Glassdoor, Blind, and recruiter conversations all feed into this. You want a range, not a single number.
Identify where the offer sits in that range. If it's at the top of the range, you have less room but can still negotiate equity or a signing bonus. If it's at the midpoint or below, you have clear room.
Little tip: levels.fyi is the most reliable source for total compensation data at tech companies, especially for engineering roles. It breaks down base, equity, and bonus separately. The aggregate data there is more reliable than Glassdoor for tech roles specifically because the submissions are more structured and more granular about level.
Step 3 — Make the counter
Your counter should include: the number you're asking for, a brief reason grounded in data (market, experience, or both), and an expression that you want to make this work. The expression of wanting it to work matters — you're not issuing an ultimatum.
I've looked at the market range for this level and location, and I was expecting something closer to [X]. Is there flexibility to get to [specific number]?
That's the whole thing. Short, specific, non-aggressive. Give them a number, not a range — a range anchors the negotiation at the bottom of your range. A specific number anchors it where you want to land.
Step 4 — Handle the response
They meet your number: accept if satisfied.
They meet partway: accept, ask for signing bonus, or propose six-month review with raise target.
Base firm: ask about equity, signing bonus, remote terms, or title.
Little tip: if a company says the base is firm and they won't discuss equity or signing, they may be telling the truth or they may be testing your pushback. A single follow-up — "I want to make this work — is there truly no flexibility on any component?" — is appropriate. Two follow-ups feel like pressure. One is just confirming.
Working examples
Acknowledgment script:
Thank you — I'm genuinely excited about the role and team. I'd like to
review the full package and get back to you by Thursday EOD. Does that work?
Counter script:
Based on market data for [role/level/location] and my experience with
[specific impact], I was expecting base closer to $185,000. Is there
flexibility to get there? I'm motivated to accept if we can close the gap.
Common patterns and when to use them
Specific number counter — default for base salary. Anchor high within researched range; let them meet you partway.
Signing bonus ask — when base is firm but total comp is short. Common at large companies with rigid bands.
Equity refresh / review timing — when cash is maxed. Ask for six-month performance review with stated raise target.
Silence is not rejection — recruiters often need approver time. Follow up once on your committed date, not daily.
What's actually negotiable
Base salary, equity, signing bonus, start date, remote terms, title, and professional development budget. Less common but worth asking: review timing, team assignment.
Common mistakes
Anchoring too low — ask near the top of your researched range; they'll negotiate down.
Negotiating against yourself — drop "I know this is a lot to ask." Market rate needs no apology.
Personal need vs market value — student loans aren't leverage; comparable comp data is.
Going dark — give a specific response date and hit it.
Troubleshooting
They rescinded the offer after negotiation — this is rare and almost always a signal that you're better off without that company. A company that rescinds an offer over a polite counter has created an adversarial relationship before your first day. It happens; it's not your fault.
You accepted without negotiating and regret it — this is the most common scenario. The next conversation is the one that matters. Six-month and twelve-month review cycles are opportunities; so is the next time you change jobs. Build the habit for next time.
Your counter was rejected and you still want the job — accept the offer or ask for one more thing (signing bonus, earlier review cycle) and accept the answer. Don't negotiate forever. At some point you're either in or you're out, and drawing it out harms the relationship going forward.
Checklist
- [ ] Market data found for role, level, and location before responding to the offer
- [ ] Counter prepared with a specific number, not a range
- [ ] Time requested to review the offer (don't accept on the phone)
- [ ] Response sent by the specific date you committed to
- [ ] Full list of negotiable components reviewed, not just base salary
Practice task
Before your next negotiation — or as prep if you have an offer now — write down the number you'd ask for and the one sentence of reasoning you'd give. Not a paragraph. One sentence that references market data and your experience. Say it out loud until it sounds like something you'd actually say, not something you're reading. The rehearsal is uncomfortable; the conversation is less uncomfortable than the rehearsal.
FAQ
Does negotiating hurt my chances of getting the offer?
Almost never. A polite counter by a qualified candidate is normal hiring behavior. The rare company that rescinds an offer over a respectful counter was not going to be a healthy work environment.
How do I negotiate a raise in my current role?
Most of the same principles apply: research the market, bring a specific number, make it about the role value rather than your personal needs. The additional element: document your impact concretely before the conversation. "I led the migration that reduced API latency by 40%" is a reason to pay more; "I've been here for two years" is not.
What if I don't have another offer?
Market data is sufficient leverage for a negotiation — you don't need a competing offer to ask for market rate. The competing offer is stronger leverage, but the absence of one doesn't mean you have nothing to work with.
What to learn next
- Junior to mid-level developer — leveling up the skills that create the leverage for the next salary conversation
- Freelance developer starter — applying negotiation principles to client project pricing
- Resume tips for developers — building the record of impact that supports the salary conversation
Related on Baseline
- [Junior to mid-level developer](/career/junior-to-mid-level)
- [Freelance developer starter](/career/freelance-developer-starter)
- [Resume tips for developers](/career/resume-for-developers)
Takeaways
Salary negotiation for developers is not adversarial and not complicated. It requires research (know the market), a specific counter (not a range), and a tone that communicates you want to make the offer work — not that you're ready to walk.
The money left on the table in most developer negotiations isn't lost because the developer couldn't negotiate — it's lost because they assumed the offer was final, or they made the conversation about personal need instead of market value, or they simply didn't ask.
If you remember only one thing: ask. Politely, specifically, with a number. The worst likely outcome is that they say no. The best likely outcome compounds for the rest of your career.