12 min read
You got the verbal yes, sent a counter, and now the thread went quiet. That isn't always a no. Mid-level SWE offers stall when your number outruns what your resume and loop feedback actually proved, when comp talks start before the hiring manager signs off on a band move, or when the recruiter, comp analyst, and hiring manager each think someone else owes the next reply.
The salary negotiation checklist for US mid-level software engineers isn't a list of pep-talk phrases. It's a diagnostic: spot which stall you're in, send the fix that matches, and stop spraying counters into a thread nobody owns.
Check your resume for free while you're waiting on the written packet. If bullet one still reads like a junior task list, your counter email will sound louder than your proof. This page maps three stall causes, how to tell which one is yours, and what to send next.
Job searching is hard enough without guessing why Greenhouse went silent. This won't turn a rescinded offer into a staff package. It stops qualified candidates from freezing themselves because they countered base on a call while equity sat in an attachment nobody opened yet.
Quick Wins
- Ask for the full written packet before your first counter. Base, bonus, equity, vest, sign-on.
- Mirror one loop scope line and one resume bullet in the same counter email.
- Send one follow-up with a deadline. Name the blocker you can answer, not three new asks.
Salary negotiation checklist for US mid-level software engineers: the stalled-offer symptom
Recruiters recognize the stall before you do. The candidate countered within an hour of the verbal call. The email thread has no hiring manager on it. The counter cites staff-level scope while the resume still lists ticket throughput under the current role. None of that means you're greedy. It means the checklist stopped at "ask for more" and skipped "prove the more."
What a moving offer looks like: you thanked them, requested writing, named a forty-eight hour review, returned with one total comp target tied to scope from loops, and you stayed pleasant while you waited on comp review.
Mid-level in US tech usually means three to five years of production ownership, not the literal badge on your LinkedIn. Level labels differ by company. Your stall often traces to a mismatch between the level on the offer letter and the scope you proved in interviews and on paper.
Read why employers delay pay discussions for the approval chain behind silence. This page is the candidate-side diagnostic: which mistake froze your thread and what to send to unstick it.
Edge case: competing offers with different structures. Normalize to annual total comp on a spreadsheet before you compare or counter. Edge case two: remote role with location-based pay bands. Confirm which geo band applies before you treat silence as rejection.
A stall after verbal acceptance feels personal. Usually it's process. Comp teams batch reviews. Hiring managers travel. Recruiters wait on a system ticket. Your job is to send clarity, not volume.
Watch for the fake stall: they said they'd send writing by Friday and it's Tuesday. One follow-up is professional. Three pings before the deadline they gave you is not.
True stalls show no packet, vague "we're working on it" lines past your review window, or a counter that never got forwarded because it lacked a number they could paste into comp review.
Three stalls, how to spot yours, and what to send next
Stall 1: Counter outran resume and loop proof
How to tell: your email cites lead ownership, on-call, or cross-team design work, but bullet one on your resume still reads like individual contributor ticket work. The hiring manager liked you in loops but can't defend the band to comp.
The fix: pause new numbers. Send a short note tying scope to proof. Reference the team or service from interviews. Attach or link an updated resume only if bullet one now matches that scope. Then restate one total comp target with a deadline.
Before: Counter email asks for senior pay while resume top bullet says "Fixed bugs in legacy Java services."
After: Counter email says "Based on owning the payments onboarding service we discussed, and my recent work reducing deploy rollback time on that stack, I'm targeting [your researched band]. Happy to resend an updated resume if helpful."
Illustrative numbers in brackets are placeholders. Swap in your researched band before you send. Structure beats digits you can't defend.
Stall 2: Comp talk started before hiring manager buy-in
How to tell: recruiter said "let me check" three times. No written offer arrived. You countered on the phone right after "we'd like to extend an offer." The thread died before comp review opened.
The fix: reset pace. Thank them, confirm excitement, request the written packet, and decline to finalize numbers until it lands. On email, ask whether the hiring manager has approved level and band range for the role.
Before: Phone reply: "I need another twenty on base." No written offer yet.
After: Email reply: "Thank you for the verbal offer. I'm excited about the platform team. Could you send the full written package and confirm the level the offer reflects? I'll review and follow up within forty-eight hours of receiving it."
Stall 3: Nobody owns the next reply
How to tell: recruiter says comp is reviewing. Hiring manager says talk to recruiter. You sent a counter to one person while two others were on the original thread. Messages cross without a decision.
The fix: one email, all stakeholders on it if you have addresses, one numbered ask, one deadline. Ask who owns the decision and what input they still need from you.
Copy-paste follow-up when the thread stalls:
{`Subject: Following up on offer review - [Your Name]
Hi [Recruiter] (cc [Hiring Manager if appropriate]),
Thank you again for the offer for [Role]. I'm excited about the team.
I'm following up on my review sent [date]. To help move comp review,
my primary ask is total comp closer to [target base or total comp]
aligned with the [specific scope from loops] we discussed.
Could you confirm who owns the next step and whether you need
anything else from me by [date, e.g. Thursday 5pm ET]?
Best,
[Name]`}
Before: Three separate Slack and email messages with different numbers and no deadline.
After: One thread, one target, one owner question, one polite deadline.
How to tell Stall 1 vs Stall 2 on your own: if you blush reading your resume next to your counter, it's Stall 1. If you countered before PDF arrived, it's Stall 2. If multiple people replied "checking" with no owner, it's Stall 3. Match the fix instead of sending a louder version of the same message.
Edge case: recruiter asks you to verbalize a range before writing. Give a researched band, then still request the packet before you treat any number as final. Edge case two: they refuse to put equity detail in writing. Slow down. That is a signal, not a cue to improvise on the phone.
Phone follow-up after a stall email: listen first. Repeat their last stated numbers. Ask what blocked the last counter. Do not add fresh asks on the call unless they open the door.
If they offer a revised number, confirm every component in email the same day. Bonus target, equity grant size, vest cliff, sign-on, start date, and level label. Verbal wins evaporate when the written letter omits a line you thought was settled.
Counters that freeze the thread
The pattern: vague discomfort plus no owner plus no deadline equals silence you misread as rejection.
Treating RSUs like cash in your head but ignoring vest in your math. You reject an offer over base while equity differed by a large four-year spread. Read the whole packet before you stall yourself.
Negotiating every line item in round one. Pick a primary lever. Add a secondary ask only if the first is blocked.
Using market stats you can't source in the room. Say what you researched and where. Peer conversations count if you label them honestly. Recruiters smell invented surveys.
I've seen offers stall because the candidate referenced competing offers they wouldn't name when asked. If you mention another process, be ready to share enough detail for comp to verify, or leave it out.
Burning bridges on a decline. You may interview there again in two years. "Comp isn't aligned this cycle" beats a rant about underpaying engineers.
For negotiation without competing offers, read how to negotiate salary without competing offers . You can still send a scope-tied counter without another offer if your proof is tight.
Anchoring to staff-level comp when loops scoped mid-level work burns trust. Match the level you proved, or make a level-up case with examples before you ask for staff pay.
Sending counters from a personal email domain while the thread lives on work email. Keep one thread. Forward cleanly if you must switch devices.
Accepting verbal wins without written confirmation, then giving notice at your current job. Verbal offers fail. Notice given too early is expensive.
Title inflation requests at offer stage unless interviews already scoped higher work. If you need Senior on the letter for visa or external credibility, make that ask separate from base and explain why in one sentence.
Don't negotiate benefits you won't use as filler. Recruiters hear noise. Ask about HSA match or learning stipend only if those lines change your decision.
Align resume proof before you counter
Stronger resume signal supports stronger counters. If you're parallel-pathing roles, keep bullet one aligned with the scope you discuss in loops while you wait on packets.
Run a free ATS check on the file that got you to offer stage. Then score your job match on the role you're negotiating so your counter language mirrors the posting you already matched on paper.
If the employer asked for a cover letter during the process, keep titles and team names aligned before you reference scope in email. Generate a cover letter revision only if you need consistent naming across documents in the same thread.
Unstick the offer in forty-eight hours
Open your sent folder tonight. Identify which stall you're in: proof, timing, or owner. Don't send a fourth counter with a new number. Send the fix that matches the stall.
If you're in Stall 1, tighten bullet one and tie scope to loops in one email. If you're in Stall 2, stop negotiating until the packet lands. If you're in Stall 3, ask who owns the next step and set a polite deadline.
This salary negotiation checklist for US mid-level software engineers is really a thread discipline. Proof beats volume. Writing beats phone rambling. One owner question beats three pings.
If nothing moves and you're below walk-away, decline cleanly. If something moves and meets your target, accept and stop negotiating for sport. Good candidates lose offers by squeezing after a yes.
Save your counter emails and final letter. Next cycle you'll spot stalls faster. That's the practical part without inventing stats you can't cite.
Spreadsheet columns worth building once: company, level, base, bonus percent, equity grant, vest years, sign-on, geo band, remote policy, thread owner, next follow-up date. Fill as packets arrive. Decisions get easier when you're not holding four PDFs in your head.
When you accept, confirm start date and background check timeline in the same email thread. Don't ghost the recruiter after yes. Clean closes help referrals later.
Ask about annual refresh policy if equity is a large slice of your decision. Some employers won't budge on grant size but will commit to review language in writing. Worth one email even when base is fixed.
Practice reading your counter aloud once before you send. If you stumble on the number or the scope line, the checklist isn't ready. Rewrite until you can state target total comp and one scope proof in one breath without apologizing.
Recruiters aren't paid to punish counters. They're paid to close roles. A calm, specific counter with a named deadline makes their job easier. Vague discomfort makes it harder.
Copy-paste checklist before any follow-up goes out:
[ ] Written packet received or explicitly requested with deadline
[ ] Bullet one matches loop scope referenced in counter
[ ] One primary total comp ask, one optional lever
[ ] Thread owner identified in writing
[ ] Single follow-up deadline communicated politely
[ ] Competing offers normalized on spreadsheet if applicable
Run the checklist even when you're excited. Excitement is when premature counters cost the most.
Hourly vs salaried confusion hits some contract-to-hire paths. Confirm employment type in writing before you compare to prior salaried offers. A high hourly rate with no benefits can lose to a lower base with bonus and equity when you model the full year.
Level down offers happen when interview scope and written level disagree. Ask which level the packet reflects and which promotion path is documented. Countering base without fixing level mismatch repeats the same stall at year one review.
When silence lasts past your stated deadline, send one close-out note. Confirm you're still interested if they can meet your stated target by a final date, or that you'll withdraw cleanly to pursue other processes. Clarity beats limbo.
Backend vs full-stack title mismatches stall comp when the posting said one stack and the offer letter says another. Align title and team name with the written job description before you argue numbers. Recruiters can't fix a role definition mismatch with sign-on alone.
Keep negotiation email subject lines stable. Changing subjects splits threads in Greenhouse and Workday inboxes. Reply in the original offer thread so comp sees the full history.
If you need time for attorney or spouse review, say so with a date. "Reviewing with counsel through Wednesday" is professional. Disappearing for ten days reads as disinterest and slows priority in comp queues.
After you unstick the thread, confirm every agreed line in the signed letter matches the last email recap. Mismatch between email and PDF starts a second stall you don't need.
Read more
Frequently asked questions
Silence often means your counter landed before the hiring manager approved a band move, your ask referenced scope the loop did not confirm, or comp review is sitting with a third party. Send one polite follow-up naming the blocker you can fix: written packet missing, level mapping unclear, or a specific total comp target with a deadline. Do not send three new numbers in separate threads.
You can clarify level and scope on a verbal call, but do not treat a phone number as final. Stall risk rises when you counter base before equity, bonus, vest, and sign-on arrive in writing. Ask for the packet, set a forty-eight hour review window, then send one email counter. Verbal counters get summarized wrong and freeze comp review.
Reference work you already discussed: the service you would own, the team size, on-call expectations, or production ownership from loop conversations. Mirror one bullet from your resume that matches that scope. Avoid title inflation unless interviews scoped higher work. Collaborative tone plus a specific number beats a vague ask for more.
Ask which levers still move: sign-on, equity grant size, start date, level label, remote stipend, or learning budget. Fixed base does not always mean fixed total comp. If nothing moves and you are below walk-away, decline cleanly. A stalled thread you keep poking rarely turns into a fair package two weeks later.
Yes. Hiring managers anchor comp to level and loop signal. A resume that undersells ownership gives them room to hold band. Before you counter, make sure bullet one under your current role matches the scope you discussed. Strong proof on paper supports strong numbers in email. Fix the file while you wait on the packet, not after silence sets in.
