I want to start by saying I should have done this 12 months earlier. The main reason I didn't was fear — the irrational worry that asking for more money would somehow make things worse. It doesn't. Understanding that intellectually is different from acting on it, and it took me longer than it should have.

The Preparation (Most Important Part)

Three months before my review cycle, I started collecting three things:

Market data. Levels.fyi and Glassdoor for my role and experience level in my city. I found a band (not just a number) for what engineers with my profile were making. I was at the 28th percentile of that band. I documented this.

My work for the past 12 months. Specific projects, outcomes, metrics where possible. Not "I worked hard on the API redesign" but "the API redesign I led reduced integration time for partners from 3 weeks to 4 days, and we signed two partnerships in Q3 that were previously blocked by that timeline." I kept a running document of these for three months.

My "walk away" number. The number below which I'd start looking for another job. This isn't a threat — it's just being honest with yourself. If I was worth market rate elsewhere, staying significantly below market is a choice I was making implicitly. I wanted to make it explicitly.

The Conversation

I requested a specific meeting: "I'd like to schedule time to discuss my compensation." Not in a 1-on-1 sidebar, but a dedicated conversation. This signals that you've thought about it and are serious.

Opening: "I've been here 22 months, I'm proud of what I've contributed, and I want to talk about making sure my compensation reflects that. I've done some research on market rates for engineers at my level, and I'm currently around the 30th percentile of the market for this role. Based on my contributions this year [I listed two or three specific things], I think there's a case for moving me to somewhere between $X and $Y."

Then I stopped talking. This is the hardest part. The instinct is to keep talking to fill the silence. Don't.

What Happened

My manager said he needed to talk to his manager and HR. That was on a Tuesday. On Friday he came back with a number that was 32% above my current salary. I said thank you and asked whether they could get to $Y (the top of my range, which would have been 38%). They came back with 35%. I said yes.

Total conversation time: about 40 minutes across two meetings. Preparation time: maybe six hours over three months. Return: significantly life-changing on an annual basis. The ratio is absurd and it's available to most developers who are underpaid, which is most developers who haven't negotiated in the past 18 months.

Why This Works

Good managers want to retain good developers and they have some latitude on compensation. What they need from you is a reason to spend political capital on your behalf. Market data and a clear record of contributions give them that reason. The conversation I described makes their job easier, not harder.