Any offer above the standard compensation range needs approval, and that approval ran on a free-text notes box: recruiters typed what they knew, analysts parsed it by hand, and offers bounced between them for days. I replaced the box with a structured, validated, dynamic capture flow, live to the entire recruiting org since July 2022.
Context
Every job offer at Meta falls into one of two buckets. Inside the standard compensation range, it can go out in a single business day. Above the range, it needs compensation approval with justification. Thousands of offers a year needed at least one approval, and a meaningful share needed two or more, stretching days into more than a week.
That delay is the most expensive kind of slow. By the offer stage Meta has already paid for the entire funnel: sourcing, screens, full loops, debriefs. And roughly a quarter of offers still ended in a decline. At this volume that is thousands of candidates a year walking away at the very end.
Every decline means running the funnel again, which is why the offer got heavy investment. Slow extensions track with lower acceptance rates and worse candidate sentiment. Meta bet on both ends of that in the same period: this project on how fast a well-supported offer could be built and approved, Immersive Offers on how the offer reached the candidate.
And it was about to scale: thousands of recruiters, millions of candidates, tens of thousands of offers, and a hiring target in the tens of thousands for 2022 alone.
I was the product designer on the Recruiting Products Offers team, which owns everything between hire decision and signed offer letter. This was our P0 for H1 2022.
The shape of it:
- Core team: 1 product designer (me), 1 PM, 1 PMM, 1 researcher, 1 data scientist, 1 content designer, 6 engineers
- Partners: the Compensation Analysis team, plus 30+ recruiter SMEs and the comp analyst SMEs
- Three user types with competing needs, meeting inside one flow


The research
With our data scientist I mapped the offer stage end to end: hire decision to signed letter, across candidate, touchpoint, front stage, tooling, pains, and opportunities. The velocity data was stark. A standard offer went out in about a business day, one needing comp approval took days, and one needing multiple approvals took over a week.


The tension at the centre
Three user types collide here, and all three want the same thing. The candidate wants the job, the recruiter wants the accept, the analyst wants an offer that is defensible and lands.
They pull in opposite directions to get there. Candidates disclose as little as they can, because what they withhold is leverage. Recruiters are measured on speed, so they take what the conversation gives them and move. Analysts work from data, and cannot approve what they cannot verify. Each behaviour is rational alone. Together they produce a queue nobody intends.

That is what made this a design problem rather than a form problem. A form serves one user. This one had to make a candidate comfortable disclosing, make a recruiter faster for doing it properly, and let an analyst trust the result without a follow-up. Ask the candidate for everything and the recruiter loses the room. Ask for nothing and the analyst sends it back. Every later decision was a judgement about where in that triangle to spend the effort.

Why so slow? Compensation is complex, recruiters were not comp experts, candidates withheld information, and compliance guidance was unclear. The tooling made it worse: missing fields, no validation, and at the heart of it one free-form notes box for everything a recruiter knew about a candidate’s current and competing compensation.


Two recruiters describing the same candidate would write two completely different paragraphs, which an analyst then had to parse by hand into the fields they needed.

This was 2021, before LLMs were a practical option.
Today the first instinct would be to point a model at the free text and have it extract the fields. That was not on the table, so the structure had to come from the capture itself. It is also the better ordering: a model infers what a recruiter meant, a validated field records it.
When the data did not hold up, the proposal bounced. The analyst asked for more, the recruiter went back to the candidate, and the proposal rejoined the queue. A repeating rejection loop, with the candidate waiting at the end of it.

Solving the problem
I ran requirement gathering between the engineers, recruiters, and comp analysts, and aligned everyone on four goals: faster offer extension, fewer requests for more information, more consistent requests, and the approval analytics structured data would finally make possible. We took on a fifth: rebuild the surface on our internal design system.


Recruiters are not comp experts, and candidates use different words for the same thing. So we wrote a shared vocabulary: a precise definition for every capture field, from equity types to forfeited cash, later embedded in the UI itself.

Prototypes followed, and evolved through user feedback.


Testing surfaced a real tension. Recruiters liked the level of detail, but flagged information overload and doubted a rigid form could hold the nuance of every candidate. The answer was a dynamic flow: ask only what is relevant, educate as you go, validate everything.
The solution
Every change had a rationale the whole team could point to.











I also pitched a longer-term vision: structured comp data surfacing in the candidate experience.

Pre-launch
- Dogfooded with 30+ recruiters on real offers
- Led design QA, flagging critical UX and UI issues
- Completed the content design artefacts with our content designer
- Saw through compliance review and approval


Impact
Launched in July 2022 to the entire recruiting org: thousands of recruiters, plus the comp analyst team. Every number is measured against the flow it replaced.
First approvals went from days to same day.
A recruiter who submitted a supported proposal got an answer the same day rather than at the end of the week. That is the difference between a candidate deciding with an offer in hand and deciding without one.
One metric did not move. Offers needing two or more approvals stayed slow, slightly slower by a single-digit percentage. Those are the genuinely hard negotiations, and they became the next phase of work.

