ctor.
- Skill Density Match: Compare your profile against the job description. If the role lists 8 mandatory requirements and you satisfy all 8 plus 2 preferred qualifications, you possess high skill density leverage.
- Temporal Pressure: Determine the role's age. Roles open for extended periods indicate hiring friction. Querying the timeline provides data on urgency.
- Walk-Away Credibility: Your willingness to decline the offer must be credible. This requires a defined BATNA (Best Alternative to a Negotiated Agreement) and a clear reservation price.
2. Implementation: Negotiation State Machine
The following TypeScript implementation models the negotiation logic. It enforces structure by requiring leverage validation before generating a response. This prevents emotional or vague negotiations.
interface WrittenOffer {
company: string;
baseSalary: number;
currency: string;
expiresAt: Date;
}
interface LeverageProfile {
competingOffer?: WrittenOffer;
skillMatchScore: number; // 0-10 scale
roleOpenDays: number;
walkAwayThreshold: number;
}
interface NegotiationResponse {
targetBase: number;
leverageReason: string;
pivotOption: 'base' | 'total_comp';
}
export class CompensationOptimizer {
private profile: LeverageProfile;
constructor(profile: LeverageProfile) {
this.profile = profile;
this.validateWalkAway();
}
private validateWalkAway(): void {
if (this.profile.walkAwayThreshold <= 0) {
throw new Error('Walk-away threshold must be defined to ensure credibility.');
}
}
public generateResponse(proposedBase: number): NegotiationResponse {
const leverageReason = this.extractLeverageReason();
const targetBase = this.calculateTarget(proposedBase);
const pivotOption = this.determinePivot(proposedBase);
return {
targetBase,
leverageReason,
pivotOption
};
}
private extractLeverageReason(): string {
if (this.profile.competingOffer) {
return `I hold a written offer from ${this.profile.competingOffer.company} at ${this.profile.competingOffer.baseSalary}.`;
}
if (this.profile.skillMatchScore >= 9) {
return `My profile covers all mandatory requirements and exceeds expectations in key domains.`;
}
if (this.profile.roleOpenDays > 45) {
return `The role has been open for ${this.profile.roleOpenDays} days, suggesting a need for rapid closure.`;
}
return 'Market alignment based on specialized expertise.';
}
private calculateTarget(proposed: number): number {
// Competing offers drive 8-15% movement; skill density drives 5-10%
const multiplier = this.profile.competingOffer ? 1.12 : 1.06;
return Math.round(proposed * multiplier);
}
private determinePivot(proposed: number): 'base' | 'total_comp' {
// If proposed is below walk-away, force total comp pivot
return proposed < this.profile.walkAwayThreshold ? 'total_comp' : 'base';
}
}
Architecture Rationale:
- Type Safety: The
WrittenOffer interface ensures that "competing offer" leverage is never treated as hypothetical.
- Walk-Away Validation: The constructor enforces a reservation price, preventing negotiations that violate the candidate's minimum constraints.
- Deterministic Output: The
generateResponse method produces a structured result containing the target, reason, and pivot strategy, ensuring consistency in communication.
3. Script Construction
The negotiation script must follow a strict pattern: Acknowledgment, Specific Target, Specific Reason, Open Pivot.
Template:
"Thank you for the offer. I am keen to proceed. To align this with my leverage, I require £[Target]. [Reason]. Is there flexibility on the base, or should we structure the gap through total compensation?"
- Specific Number: Never use ranges. State a single figure.
- Specific Reason: Inject the output from
extractLeverageReason().
- Open Pivot: The question allows the employer to save face by offering non-base components if the base is locked.
4. Handling Base Locks
When the base salary cannot move, the negotiation must pivot to total compensation. The following components are available:
- Signing Bonus: One-time cash injection.
- Bonus Target: Increased performance bonus percentage.
- Equity: Additional stock options or RSUs.
- Title: Negotiating a higher title is cost-free for the employer but increases future earning potential and marketability. This is the highest ROI lever in locked scenarios.
- Flexibility: Remote work days, additional holiday, or professional development budget.
Pitfall Guide
1. The Midpoint Fallacy
- Explanation: Assuming the midpoint of a wide band is the fair value.
- Fix: Treat the band as a negotiation space, not a target. Anchor your target based on leverage, not the midpoint.
2. Hypothetical Leverage
- Explanation: Mentioning "I have another offer" without providing documentation.
- Fix: Leverage must be written. If you do not have a written offer, focus on skill density or temporal pressure.
3. Title Blindness
- Explanation: Ignoring title negotiation because it seems intangible.
- Fix: Always request title adjustment when base is locked. A senior title compounds value across future roles.
4. Base Fixation
- Explanation: Failing to pivot to total compensation when the base is rigid.
- Fix: Use the "Base or Total Comp" pivot question. If base is locked, immediately negotiate signing bonus, equity, or title.
5. Ambiguous Targets
- Explanation: Asking for "more" or providing a range.
- Fix: State a precise number. Ambiguity signals weakness and allows the employer to default to the lower bound.
6. Weak Walk-Away Credibility
- Explanation: Negotiating without a defined reservation price or alternative.
- Fix: Define your walk-away threshold before the offer. If the offer is below this, be prepared to decline. Credibility requires the ability to walk.
7. Emotional Negotiation
- Explanation: Using personal financial needs as leverage.
- Fix: Leverage must be market-based or role-based. Personal circumstances do not impact the employer's valuation of the role.
Production Bundle
Action Checklist
Decision Matrix
| Scenario | Recommended Approach | Why | Cost Impact |
|---|
| Written Competing Offer | Push base +8-15% | Highest leverage vector; forces market correction. | High base increase. |
| High Skill Density, No Offer | Push base +5-10% | Strong value alignment; reduces hiring risk. | Moderate base increase. |
| Base Locked, High Urgency | Negotiate Title + Signing Bonus | Title compounds value; bonus bridges gap. | Low base cost; high candidate value. |
| Base Locked, Low Urgency | Negotiate Equity + Flexibility | Employer has time; equity/flex are lower immediate cost. | Deferred cost; retention focus. |
Configuration Template
Use this TypeScript configuration to initialize your negotiation state. Copy and adapt to your context.
// negotiation.config.ts
import { LeverageProfile } from './compensation-optimizer';
export const negotiationConfig: LeverageProfile = {
// Set to undefined if no written offer exists
competingOffer: {
company: 'Acme Corp',
baseSalary: 85000,
currency: 'GBP',
expiresAt: new Date('2026-06-01')
},
// Score 0-10 based on JD match
skillMatchScore: 9,
// Days the role has been open
roleOpenDays: 32,
// Minimum acceptable total value
walkAwayThreshold: 75000
};
Quick Start Guide
- Receive Offer: Obtain the written offer details.
- Initialize State: Populate
negotiation.config.ts with your leverage data.
- Run Optimizer: Execute
CompensationOptimizer.generateResponse() to get target, reason, and pivot.
- Send Script: Deliver the script via email or call, adhering strictly to the structure.
- Iterate: If base is locked, pivot to total compensation using the Decision Matrix.
This framework transforms salary negotiation from an ad-hoc conversation into a deterministic optimization process. By structuring leverage, enforcing walk-away credibility, and utilizing total compensation pivots, candidates can consistently achieve outcomes in the top quartile of high-variance bands.