参考
基于 Clean Code / The Pragmatic Programmer / Staff Engineer 编写 —— 沟通场景速查 / 评审分级 / ADR 模板 / 汇报结构 / 书目要点
七大沟通场景速查
| 场景 | 核心原则 | 关键产物 |
|---|---|---|
| 代码评审 | 对事不对人、意见分级 | Blocking/Suggestion/Nit/Praise 标注 |
| 设计评审 | 决策显式化、可追溯 | ADR / 设计文档 |
| 需求澄清 | 明确「完成」定义 | AC(验收标准) |
| 跨团队协作 | 契约先行、边界对齐 | OpenAPI / 接口契约 / 对接人 |
| 向上汇报 | 给选项 + 推荐 | ROI/风险/进度三段式 |
| 冲突管理 | 数据驱动、书面化 | RFC / ADR + dissenting opinion |
| 技术分享 | 受众先行、问题贯穿 | 演讲 + demo + 文档 |
代码评审意见分级
| 级别 | 含义 | 示例 | 处理 |
|---|---|---|---|
| Blocking | 必须改 | 「这里 SQL 拼接有注入风险」 | 合并前必须解决 |
| Suggestion | 建议改 | 「可考虑用 map 替代 for 提升可读性」 | 作者决定 |
| Nit | 吹毛求疵 | 「nit: 这里多了个空格」 | 可忽略 |
| Praise | 点赞 | 「这个抽象很优雅,学到了」 | 鼓励正向反馈 |
| Question | 询问 | 「为什么选这个库?」 | 作者解释 |
建设性反馈四要素
1. 观察(事实):「第 42 行的 parseDate 在传入 null 时会抛异常」
2. 影响:「这会导致上游未校验的调用方崩溃」
3. 建议:「可以返回 null 或用 Optional 包装」
4. 提问:「是否考虑到上游可能传 null?」评审反模式
| 反模式 | 问题 |
|---|---|
| 针对人(「你写错了」) | 引发防御 |
| 未分级(一堆评论不知哪些重要) | 作者迷茫 |
| 只挑刺不表扬 | 打击士气 |
| 拖延评审 | 阻塞交付 |
| 在 PR 里争论设计(应在设计阶段) | PR 太大或太晚 |
ADR 模板
markdown
# ADR-{编号}: {标题}
## 状态
{提议 | 已接受 | 已废弃 | 已替代}
## 背景
{为什么要做这个决策?现状、约束、问题}
## 决策
{我们决定什么?}
## 后果
- 正面:{收益}
- 负面:{代价、风险}
- 缓解:{如何应对负面影响}
## 备选方案(可选)
{考虑过但没选的方案,及为何不选}放置:docs/adr/ADR-001-xxx.md,纳入版本控制,随决策更新状态。
设计文档结构
1. 目标与非目标(边界)
2. 背景与上下文
3. 方案概述(含架构图)
4. 详细设计
- 数据模型
- API 设计
- 关键流程(时序图)
5. 权衡分析(备选方案对比)
6. 风险与缓解
7. 里程碑与回滚AC(验收标准)模板
markdown
## 用户故事
作为 {角色},我想 {功能},以便 {价值}。
## 验收标准(AC)
1. {可测试条件 1}
2. {可测试条件 2}
3. {边界/异常处理}
4. {性能要求}
5. {权限/安全要求}
## 非功能要求
- 性能:P99 < 200ms
- 可用性:99.9%
- 兼容性:...向上汇报三段式模板
1. 背景 + 问题(1-2 句)
{现状 + 痛点,附数据}
2. 选项 A / B / C
- A: 成本 / 风险 / 收益(ROI)
- B: 成本 / 风险 / 收益
- C: 成本 / 风险 / 收益
3. 我的推荐 + 理由
推荐 {X},因为 {ROI 最高 / 风险可控 / 战略意义}
需要你决策:{具体要什么}状态汇报(红黄绿)
| 状态 | 含义 | 行动 |
|---|---|---|
| 🟢 Green | 正常,按计划 | 正常同步 |
| 🟡 Yellow | 有风险但可控 | 附缓解措施,盯紧 |
| 🔴 Red | 需帮助/升级 | 立即升级,明确要什么支持 |
RFC 模板
markdown
# RFC: {标题}
## 动机
{为什么要改?附数据/监控}
## 提案
{具体方案}
## 备选方案
- A: ...
- B: ...
(为何不选)
## 权衡
- 一致性 / 性能 / 复杂度 / 运维 的影响
## 开放问题
{待讨论的点}
## 时间线
{决策 / 实现 / 上线节点}冲突降级路径
1. 一对一私下沟通(留面子)
2. 数据/原型验证(事实胜于辩论)
3. RFC 书面化(结构化讨论)
4. 引入第三方仲裁(架构师/Tech Lead)
5. 决策并记录(ADR + dissenting opinion)
6. Disagree and Commit(全力执行)异步沟通结构
BLUF(结论先行)
【结论/请求】{一句话核心}
【背景】{为什么}
【细节】{选项/论据}
【下一步】{期望对方做什么}金字塔原理
结论(塔尖)
/ | \
论点1 论点2 论点3(中层)
/ \ / \ / \
论据 论据 论据 论据 论据 论据(塔基)技术分享结构
1. 钩子(问题/痛点) — 30s 引起兴趣
2. 背景(上下文) — 让外行能懂
3. 旅程(尝试→失败→突破)— 故事弧线
4. 方案(核心做法) — 图为主,少代码
5. 结果(数据证明) — 量化效果
6. 教训(可迁移启示) — 受众能带走什么
7. Q&A受众适配表
| 受众 | 时长建议 | 重点 | 避免 |
|---|---|---|---|
| 同组工程师 | 30-45min | 实现/权衡 | 过度科普 |
| 跨组工程师 | 20-30min | 价值/接口/影响 | 细节实现 |
| 技术管理层 | 10-15min | ROI/风险/业务影响 | 代码 |
| 全公司分享 | 20-30min | 故事/启发 | 术语堆砌 |
| 外部技术大会 | 30-45min | 通用经验/方法论 | 内部专有 |
资深工程师三种模式
| 模式 | 定位 | 典型沟通行为 |
|---|---|---|
| 驱动者 Driver | 主动发起、协调推动 | 写 RFC、拉对齐、推落地 |
| 楷模 Role Model | 以身作则、树立标准 | 高质量交付、mentoring |
| 引导者 Facilitator | 帮他人成功 | 解锁阻塞、跨团队搭桥 |
三本书核心思想
Clean Code(Robert C. Martin)
| 思想 | 沟通启示 |
|---|---|
| 命名即沟通 | 好名字胜过注释 |
| 函数小而专注 | 一个函数说清一件事 |
| 注释是失败代码的补丁 | 能命名清楚就别加注释 |
| 代码写给人看 | 机器顺便执行 |
The Pragmatic Programmer(Thomas & Hunt)
| 思想 | 沟通启示 |
|---|---|
| 知识投资组合 | 持续学习并分享 |
| 破碎的窗户 | 坏沟通传染,及时修补 |
| 曳光弹 | 用最小可用路径沟通方向 |
| 为沟通负责 | 认错不甩锅 |
Staff Engineer(Will Larson)
| 思想 | 沟通启示 |
|---|---|
| 资深 = 影响力 | 影响超出自己代码 |
| 写下来 | 文档/ADR/博客放大影响 |
| 建立信任 | 兑现承诺、诚实汇报 |
| 大杠杆 | 一个决策影响系统方向 |
参考
- Clean Code:https://www.oreilly.com/library/view/clean-code-a/9780136083238/
- The Pragmatic Programmer(20 周年版):https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/
- Staff Engineer(Will Larson):https://staffeng.com/book
- staffeng.com(配套访谈):https://staffeng.com/
- ADR(Michael Nygard 经典文):https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions