Offer Comparison Skill
Offers are quoted as feelings — "the startup has more upside" — but they resolve to numbers with dates on them. This skill computes the curves: what each offer pays in each of the next four years, where the lines cross, and which lever in the weaker offer would actually move it.
What This Skill Produces
- The comp table — per-year and cumulative totals per offer, from the script
- The crossover analysis — which offer leads when, and what assumption that ranking is hostage to
- The risk translation — private equity restated honestly rather than at face value
- Negotiation levers — ranked by dollar impact per unit of asking-awkwardness
Required Inputs
Ask for these if not provided:
- Per offer: base, bonus %, equity grant value, vest years, cliff months, vest frequency, 401(k) match (% and cap), any promised refreshers
- The user's horizon — expecting to stay 2 years or 4 changes the answer, because cliffs do
- Equity risk view — public RSUs count at face; for private equity, agree a discount with the user (e.g. 50–75% haircut pre-Series B) and pass the discounted number to the script labeled as such
Programmatic Helper
python3 scripts/offer_comparison.py offers.json
cat offers.json | python3 scripts/offer_comparison.py - --json
Input shape in the script docstring. The script computes vesting month-by-month (a 12-month cliff releases the accrued year), bonuses and match annually, and reports the cumulative leader and crossover year. It values equity at exactly the number you give it — the risk adjustment is your input, visible, never a hidden assumption.
Framework: The Judgment Around the Math
- The cliff vs the horizon — an 18-month expected stay makes year-4 equity fiction; compare at the user's actual horizon, not the grant's
- A risky dollar ≠ a salary dollar — never compare private paper to cash 1:1; show the comparison at 2–3 discount levels if the user resists picking one
- Refreshers are policy, not promise — model them only if written down; otherwise mention them as upside outside the table
- Levers, ranked: base (compounds into bonus and match) → equity grant → signing bonus (one-time, easiest yes) → cliff/start-date adjustments
Output Format
Offer Comparison: [A] vs [B]
The Curves
[Script output: per-year, cumulative, leader, crossover]
What the Ranking Is Hostage To
[The 1–2 assumptions that flip the answer — usually the private-equity discount and the stay-horizon — each shown with the flipped result.]
Negotiation Levers
| Lever |
Applied to |
Moves 4-yr total by |
Ask difficulty |
Educational model, not financial advice — verify with a licensed professional before acting on it.
Quality Checks
Anti-Patterns
1---2name: offer-comparison-23description: Compare two or more job offers as total-comp curves over four years — vesting cliffs, bonuses, 401(k) match, and the crossover year computed, not vibed. Use when asked to compare job offers, which offer pays more over time, model my equity vesting, or is the startup offer actually worth it. Produces a year-by-year and cumulative comp table per offer, the crossover analysis, and negotiation levers ranked by dollar impact.4---56# Offer Comparison Skill78Offers are quoted as feelings — "the startup has more upside" — but they resolve to numbers with dates on them. This skill computes the curves: what each offer pays in each of the next four years, where the lines cross, and which lever in the weaker offer would actually move it.910## What This Skill Produces1112- **The comp table** — per-year and cumulative totals per offer, from the script13- **The crossover analysis** — which offer leads when, and what assumption that ranking is hostage to14- **The risk translation** — private equity restated honestly rather than at face value15- **Negotiation levers** — ranked by dollar impact per unit of asking-awkwardness1617## Required Inputs1819Ask for these if not provided:20- **Per offer:** base, bonus %, equity grant value, vest years, cliff months, vest frequency, 401(k) match (% and cap), any promised refreshers21- **The user's horizon** — expecting to stay 2 years or 4 changes the answer, because cliffs do22- **Equity risk view** — public RSUs count at face; for private equity, agree a discount with the user (e.g. 50–75% haircut pre-Series B) and pass the discounted number to the script *labeled as such*2324## Programmatic Helper2526```bash27python3 scripts/offer_comparison.py offers.json28cat offers.json | python3 scripts/offer_comparison.py - --json29```3031Input shape in the script docstring. The script computes vesting month-by-month (a 12-month cliff releases the accrued year), bonuses and match annually, and reports the cumulative leader and crossover year. **It values equity at exactly the number you give it** — the risk adjustment is your input, visible, never a hidden assumption.3233## Framework: The Judgment Around the Math3435- **The cliff vs the horizon** — an 18-month expected stay makes year-4 equity fiction; compare at the user's actual horizon, not the grant's36- **A risky dollar ≠ a salary dollar** — never compare private paper to cash 1:1; show the comparison at 2–3 discount levels if the user resists picking one37- **Refreshers are policy, not promise** — model them only if written down; otherwise mention them as upside outside the table38- **Levers, ranked:** base (compounds into bonus and match) → equity grant → signing bonus (one-time, easiest yes) → cliff/start-date adjustments3940## Output Format4142---4344# Offer Comparison: [A] vs [B]4546## The Curves47[Script output: per-year, cumulative, leader, crossover]4849## What the Ranking Is Hostage To50[The 1–2 assumptions that flip the answer — usually the private-equity discount and the stay-horizon — each shown with the flipped result.]5152## Negotiation Levers53| Lever | Applied to | Moves 4-yr total by | Ask difficulty |54|---|---|---|---|5556*Educational model, not financial advice — verify with a licensed professional before acting on it.*5758---5960## Quality Checks6162- [ ] Equity discount for private companies is explicit and the user agreed to it63- [ ] The comparison is shown at the user's stated horizon, not only at 4 years64- [ ] The hostage-assumptions section shows the flipped ranking, not just names the risk65- [ ] Levers carry dollar impacts computed from the actual offers66- [ ] The disclaimer line appears in the artifact6768## Anti-Patterns6970- [ ] Do not compare a risky equity dollar to a salary dollar 1:1 — the discount is the analysis71- [ ] Do not hide the vesting cliff inside annual averages — year 1 with a cliff is its own story72- [ ] Do not model unwritten refreshers as income73- [ ] Do not declare a winner without naming what assumption the win depends on74- [ ] Do not present the model's output without its assumptions attached