CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

offer 谈判与职业路径:TC 拆解、级别匹配与长期成长

分类:项目与职业能力 · 路径:docs/topics/offer-negotiation-and-growth/README.md

#negotiation#offer#tc#career-path#leveling

用 1~2 周完成 offer 谈判、级别匹配与入职规划,把 offer 变成长期职业资产

父主题

求职与技术面试:从简历到 offer 的工程化准备

子主题(0)

offer 谈判与职业路径:TC 拆解、级别匹配与长期成长

0. 元信息

1. 学习路线

TC 拆解(base / bonus / RSU / sign-on / relocation)
  → 级别匹配(L4 / L5 / L6 / E4 等)
  → offer 比较矩阵(6 维度评分)
  → 谈判脚本(4 要素 + counter offer)
  → 跳槽时机与长期成长(18 个月规则 + 30/60/90 计划)

每一步都是下一步的前置:不会 TC 拆解就被 HR 数字游戏;不会级别匹配就接错 offer;不会谈判就亏 10~30%。

2. 阶段周数分配

阶段1 周方案2 周方案备注
1. TC 拆解 + 级别匹配0.50.5base / bonus / RSU / sign-on / relocation
2. offer 比较矩阵(6 维度加权评分)00.5至少 2 个 offer 比较
3. 谈判脚本 + counter offer0.50.54 要素分别谈(邮件 + 口头)
4. 跳槽时机 + 30/60/90 + 2 年成长地图00.5入职前可向未来经理汇报
合计12

1 周方案面向已锁 1 个 offer、需快速决策的工程师;2 周方案面向 ≥ 2 个 offer 待选 / 想转 TL 的求职者。综合项目(offer 包 + 入职计划)作为求职 Sprint 的子模块。

3. 核心知识 / 产出 / 标准表

阶段核心知识实践产出可观察学会标准
1. TC 拆解base / bonus / RSU / sign-on / relocation / 401k / 医保一份 TC 拆解表能讲清每个数字的实际值(折现 + vest)
2. 级别匹配L4/L5/L6(FAANG)、E4/E5/E6、IC1/IC2/IC31 份级别对照表能讲清目标公司 L5 的能力要求
3. offer 比较矩阵Base / Bonus / RSU 现值 / Sign-on / 团队 / 学习曲线,6 维度评分offer 比较表(≥ 2 个 offer)能讲清每个 offer 的优劣
4. 谈判脚本4 要素分开谈 / 表达热情 + 给数据 / 不主动开价 / 留缓冲1 份谈判脚本完成 1 轮谈判录音
5. 跳槽时机18 个月规则 / 学习曲线平台期 / 项目交付后1 份跳槽判断清单能讲清”现在该不该跳”
6. 长期成长30/60/90 天计划 / 1:1 / on-call / 技术品牌1 份入职计划 + 2 年成长地图入职前 1 周可向经理汇报 30 天目标

4. 第一周任务

Day 1 约定:本计划以”TC 拆解 + 级别对照 + 谈判脚本 + 30/60/90 + 复盘”为最小循环。所有产出必须有可见证据(TC 表、级别表、谈判邮件、HR 回复、30/60/90 计划)。

任务当天交付
Day 1拆解拿到的 offer:base / bonus / RSU / sign-on / relocation / 401k / 医保,算 Year 1 实际收入 + 4 年 TC(含 Excel 公式)TC 拆解表(含折现)
Day 2用 levels.fyi + Blind 锚定目标公司 L4/L5/L6 / E4/E5/E6 / IC1/IC2/IC3 级别匹配(能力要求 + 典型 TC)级别对照表
Day 3写 4 要素谈判脚本(表达热情 / 给数据 / 提诉求 / 给缓冲),2 个版本(邮件 + 口头)谈判脚本
Day 4用邮件模板发起第 1 轮谈判,HR 回复后 24 小时内评估 + 准备 counter第 1 轮谈判邮件 + HR 回复记录
Day 5评估跳槽时机:18 个月规则 + 学习曲线 + TC 差距 + 团队变动 + 个人目标(5 维度打分)跳槽判断清单
Day 6写 30/60/90 天计划(30 观察 + 60 小交付 + 90 独立产出),每阶段 ≥ 3 个 deliverable30/60/90 计划
Day 7步骤 A:跑通 TC 表 + 级别表 + 谈判脚本 + 30/60/90;步骤 B:补齐 4 类边界(未谈 / 谈崩 / RSU 没折现 / 30/60/90 无量化)谈判工具包 v0.1 + 4 类问题清单

Day 7 步骤 A 把谈判 + 入职资产跑通;步骤 B 每类问题先在文档里复现,再讲清补救路径。

5. 阶段通用验收

  1. 不看笔记 60 秒内讲清任意 1 个 offer 的 TC 拆解(base / bonus / RSU / sign-on / relocation 折现);
  2. 6 维度 offer 比较矩阵(Base / Equity / Team / Learning / Location / Culture)能算出加权评分并复现决策;
  3. 谈判脚本版本 ≥ 2(邮件 + 口头),含 4 要素(热情 / 数据 / 诉求 / 缓冲);
  4. 测 4 类边界:未谈 / 谈崩 / RSU 没折现 / 30/60/90 无量化(每类问题先复现再讲补救路径);
  5. 准备 ≥ 1 个 counter offer 脚本(即使没真发,要写完演练过);
  6. 跳槽判断清单 5 维度全打分(学习曲线 / TC 差距 / 团队 / 个人目标 / 时间点),每维度 0~10 分;
  7. 30/60/90 计划每阶段 ≥ 3 个 deliverable,可与未来经理 1:1 校准对齐。

6. 最终验收

7. 综合项目

首选:求职 Sprint 的 offer + onboarding 子模块(必做:TC 拆解 + 级别对照 + 比较矩阵 + 谈判 + 30/60/90 + 2 年成长地图)。

备选:2 年成长路线(个人品牌 + 技术深度 + 影响力 + TL/Manager 路径选择 + 18 个月评估节点),适合”已签 offer 准备长期规划的”求职者。

任何综合项目都必须包含:

  1. TC 拆解(base / bonus / RSU / sign-on / relocation,含 4 年折现);
  2. 级别匹配(L4/L5/L6 / E4/E5/E6 / IC1/IC2/IC3 + 能力要求);
  3. offer 比较矩阵(6 维度加权评分,权重可调);
  4. 谈判脚本(4 要素 + counter offer 演练);
  5. 跳槽判断清单(5 维度评分);
  6. 30/60/90 天计划(3 阶段 deliverable,每阶段 ≥ 3 项);
  7. README(含 offer window、目标、产出、复盘);
  8. retrospective.md(含教训、改进、下一轮)。

notes/ 与 README 存放规范

所有”TC 拆解 / 级别对照 / 谈判脚本 / 30/60/90 / 成长地图”类交付物统一存放在项目根目录的 notes/ 子目录或 README 的对应章节;提交时一并带上,避免散落在聊天或临时文件里。综合项目的 notes/ 至少包含:

8. 推荐开源资料

阶段角色资料链接用法
全部经典书Haseeb Qureshi《My Ten Rules for Negotiating a Job Offer》https://haseebq.com/my-ten-rules-for-negotiating-a-job-offer/谈判 10 条军规
全部经典书Haseeb Qureshi《Senior Engineer Salary Negotiation》https://haseebq.com/how-not-to-bomb-your-offer-negotiation/谈判完整流程
1数据levels.fyihttps://www.levels.fyi/真实 TC 数据锚定
1数据Glassdoorhttps://www.glassdoor.com/薪资 + 公司评价
1数据Pavehttps://www.pave.com/薪资基准(公司向)
3谈判Blindhttps://www.teamblind.com/真实 offer 数据 + 谈判经验
3谈判Lara Hogan《Resilient Management》https://resilientmanagement.com/谈判与影响力(选读)
5成长Michael Lopp《Managing Humans》https://lopp.com/入职与 1:1
5成长Tanya Reilly《The Staff Engineer’s Path》https://staffeng.com/Staff+ 路径(进阶)
5观察Pragmatic Engineer Newsletterhttps://newsletter.pragmaticengineer.com/职业路径与行业观察

默认使用顺序:拿到 offer 后立刻读 Haseeb Qureshi《My Ten Rules》→ 用 levels.fyi 锚定目标公司 TC → 写 TC 拆解表与 4 要素谈判脚本 → 用 Blind 调研 HR 反应 → 发起第 1 轮谈判(邮件 / 口头)→ 签 offer 后写 30/60/90 计划 → 入职后读《Managing Humans》/《The Staff Engineer’s Path》做长期成长 → 用 Pragmatic Engineer Newsletter 持续观察行业。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

offer 谈判是工程师最容易亏钱的地方。Haseeb Qureshi 2017 年发表的《My Ten Rules for Negotiating a Job Offer》是事实标准;levels.fyi 2018 年后建立了 TC 数据众包平台。今天每一个 senior 工程师都把谈判当 sprint 来做:拿到 first offer 不签、target 至少 2 个 offer、用 4 要素分别谈。

9.2 概念地图

flowchart LR
  Offer[拿到 offer] --> Decompose[TC 拆解]
  Decompose --> Level[级别匹配]
  Level --> Compare[offer 比较矩阵]
  Compare --> Negotiate[谈判]
  Negotiate --> Sign[签约]
  Sign --> Onboard[入职 30/60/90]
  Onboard --> Grow[长期成长]
  Grow -. 18 个月 .-> Jump[跳槽]

关系说明:TC 拆解是数字基础,级别匹配是定位锚点,比较矩阵是决策工具,谈判是动作,入职是新起点,成长是循环。

9.3 基础知识讲解

9.3.1 谈判经典

资料影响用法
Haseeb Qureshi, My Ten Rules for Negotiating a Job Offer谈判 10 条军规必读
Haseeb Qureshi, Senior Engineer Salary Negotiation谈判完整流程必读
levels.fyi 数据真实 TC谈薪必查
Blind(匿名职场)真实 offer 数据 + 谈判经验必看
Pat Kua, Talking Techtech leadership 谈判选读
Lara Hogan, Resilient Management谈判与影响力选读
Ramit Sethi, I Will Teach You to Be Rich谈判与个人财务选读

9.3.2 TC 拆解公式

实际年收入(Year 1):
  = base
  + bonus(base × bonus%)
  + sign-on(一次性)
  + RSU Year 1(grant × 4 年 vest 的 25%)
  + relocation(一次性)

实际年收入(Year 2~4):
  = base + bonus + RSU(grant × 25%)

4 年总包(TC):
  = 4 × (base + bonus) + 4 × RSU grant + sign-on + relocation
  注意:RSU 现值用授予日股价折现

9.3.3 4 要素谈判法

1. 表达热情:"I'm very excited about this role and the team."
2. 给数据:"Based on my research (levels.fyi + comparable offers),
   the median L5 at this company is $X."
3. 提诉求:"I'd like to discuss base / sign-on / RSU to close the gap."
4. 给缓冲:"If base is fixed, can we increase sign-on / RSU?"

9.3.4 18 个月跳槽规则

判断是否跳槽:
1. 当前公司是否还有学习曲线?(平台期 = 18 个月)
2. 当前项目是否还有影响力?(没新项目 = 跳槽)
3. 当前 TC 与市场差距是否 > 30%?(跳槽)
4. 团队 / manager 是否变动?(变动 = 评估)
5. 个人目标(IC vs TL vs Manager)是否变化?(变化 = 跳槽)

每 18 个月评估一次;如果 4 个维度都满意,可留 2~3 年。

9.4 经典问题与经典案例

#问题重要性最简答案
1何时该开始谈判?决定动作时机收到 offer 后立刻;不要在 HR 首次报价时接受
2HR 压价怎么应对?决定谈判结果用 levels.fyi 数据 + 同级别 offer 反压
3Sign-on 怎么算?决定实际收入一次性,分 1~2 年发;纳入 4 年 TC 折算
4RSU 怎么估值?决定长期价值用授予日股价;4 年 vest 每年 25%;离职未 vest 失效
5Startup 期权怎么评估?决定风险4 年 vest + 1 年 cliff + 清算优先权 + 公司 runway
6远程 vs onsite 的 TC 差异?决定 base远程通常降 10~30%;但省去通勤与城市溢价
7何时该 counter offer?决定谈判上限同时有 2 个 offer 才能 counter
8跳槽频繁 vs 稳定?决定简历18 个月规则;学习曲线平台期可跳
9选大厂 vs startup?决定路径大厂 = 安全 + 学习 + 品牌;startup = 高 TC 风险 + 速度
10怎么评估 startup 风险?决定 offerrunway > 18 月 + funding + 产品市场契合度
1130/60/90 计划是什么?决定入职信用30 天:观察 + 学习;60 天:小交付;90 天:独立产出
12入职第一周做什么?决定 on-call装环境、配权限、跑通 build、约 1:1
13何时该转 TL / Manager?决定路径看 impact 偏好 + 团队需求 + 个人目标
14何时该回大厂?决定回流startup 上市后 / 个人想稳 / TC 持平
15长期成长怎么规划?决定 5 年路径18 个月评估 + IC vs Manager 选择 + 技术品牌

9.5 学习难点

9.6 技术标准与接口

Entity

TC 拆解表、级别对照表、offer 比较矩阵、谈判脚本、入职 30/60/90 计划、2 年成长地图。

Scope

offer 谈判与职业路径不替代实际工作能力,只解决”签对 offer + 入职成功 + 长期成长”。

Structure

Ecosystem

Depth Tiers

本子主题要求:L3

Source

9.7 关键代码

9.7.1 TC 拆解器

# 9.7.1 TC 拆解:base + bonus + sign-on + RSU + relocation → 4 年 TC
from dataclasses import dataclass

@dataclass
class Offer:
    company: str
    base: float          # 年 base
    bonus_pct: float     # 0.0 ~ 1.0
    rsu_grant: float     # 4 年总 grant
    sign_on: float       # 一次性
    relocation: float    # 一次性
    rsu_share_price: float  # 折现假设

def year1_total(o: Offer) -> float:
    return (o.base
            + o.base * o.bonus_pct
            + o.sign_on
            + o.rsu_grant * 0.25 * o.rsu_share_price
            + o.relocation)

def four_year_tc(o: Offer) -> float:
    y1 = year1_total(o)
    y2_4 = 3 * (o.base + o.base * o.bonus_pct + o.rsu_grant * 0.25 * o.rsu_share_price)
    return y1 + y2_4

if __name__ == "__main__":
    stripe = Offer("Stripe", 180_000, 0.10, 300_000, 20_000, 15_000, 100)
    airbnb = Offer("Airbnb", 170_000, 0.15, 250_000, 25_000, 0, 100)
    for o in (stripe, airbnb):
        print(f"{o.company}: Year 1 = ${year1_total(o):,.0f}, "
              f"4Y TC = ${four_year_tc(o):,.0f}")

9.7.2 offer 比较矩阵 + 加权评分

# 9.7.2 offer 比较矩阵:6 维度加权评分
from dataclasses import dataclass

@dataclass
class OfferScore:
    company: str
    base_score: float      # 0~10
    equity_score: float    # 0~10
    team_score: float      # 0~10
    learning_score: float  # 0~10
    location_score: float  # 0~10
    culture_score: float   # 0~10

WEIGHTS = {
    "base_score": 0.25,
    "equity_score": 0.20,
    "team_score": 0.20,
    "learning_score": 0.15,
    "location_score": 0.10,
    "culture_score": 0.10,
}

def weighted(o: OfferScore) -> float:
    return sum(getattr(o, k) * w for k, w in WEIGHTS.items())

if __name__ == "__main__":
    a = OfferScore("Stripe", 9, 9, 8, 9, 7, 8)
    b = OfferScore("Airbnb", 8, 8, 9, 8, 8, 9)
    for x in (a, b):
        print(f"{x.company}: {weighted(x):.2f}")

9.7.3 谈判脚本生成器

# 9.7.3 谈判脚本:4 要素表达模板
def negotiation_email(company: str, role: str, current_offer: dict,
                      target_offer: dict, evidence: str) -> str:
    """生成谈判邮件模板(4 要素 + 数据)"""
    return f"""Subject: {role} at {company} - Compensation Discussion

Hi {{RECruiter}},

Thank you for the {role} offer at {company}. I'm very excited about
the team and the work on {{PROJECT}}.

After reviewing the offer ({current_offer}), I did some research:
{evidence}

I'd like to discuss the following:
- Base: ${target_offer['base']:,} (vs ${current_offer['base']:,})
- Sign-on: ${target_offer['sign_on']:,} (vs ${current_offer['sign_on']:,})
- RSU: ${target_offer['rsu']:,} over 4 years (vs ${current_offer['rsu']:,})

If base is fixed at the current level, would there be flexibility
on sign-on or RSU to close the gap?

I'm confident we can find a number that works for both sides. Looking
forward to your response.

Best,
{{YOUR_NAME}}
"""

if __name__ == "__main__":
    print(negotiation_email(
        "Stripe", "Senior Engineer L5",
        current_offer={"base": 170000, "sign_on": 15000, "rsu": 250000},
        target_offer={"base": 185000, "sign_on": 25000, "rsu": 320000},
        evidence="Levels.fyi shows L5 at Stripe median is $185k base; I have 2 competing offers at this level.",
    )[:500])

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力

本计划归属:项目与职业能力 主。


本主题贡献

直接依赖(0)

查看知识图谱