【背景】 我做了 5 年技术 PM,见过两个极端,都有惨痛代价:
- 团队 A 把「代码合并 + 集成测试通过 + 全量上线」当 done。结果一个埋点字段写错,数据看板悄悄错了 3 个月,直到大促复盘才被发现——上线后到发现前,这个功能一直挂在「已完成」状态,没人再回头看它。
- 团队 B 把「上线 + 指标达标 + 无关键负反馈」当 done。结果观察期一拖再拖,排期窗口被「观察中」的功能占满,新需求进不来,季度目标悬空。
争点就在这:done 的边界到底画在「交付动作完成」还是「效果被观测确认」?
【几种常见做法】
- 研发视角:done = 合并 + CI 绿 + 发布成功。上线后的一切归 SRE 和产品,研发只认「交钥匙」。
- QA 视角:done = 用例全过 + 无 P0/P1 + 回归稳定。指标和数据不在 QA 的责任面里。
- 产品/数据视角:done = 上线 + 核心指标达到预设阈值 + 无关键负反馈。
- SRE 视角:done = 监控覆盖 + 回滚预案 + 未超 error budget。
四套标准各自都对,但没有任何一套被写进团队的共同承诺时,就会演变成「上线即甩锅」——每个角色都觉得自己已经 done,而功能实际处在无人认领的灰色地带。
【我的倾向与踩坑理由】 我倾向 done = shipped + observed,但 observed 必须轻量、可证伪、有时限,而且三条全部要在立项/需求评审时就定下来,而不是上线后补:
- 观察阈值量化:比如「点击率不下降超过 5%」「P99 不升 10ms」「客诉工单 3 天内为 0」。禁止「用户反馈看起来还行」这种无法验证的表述——这是我踩过最深的坑,模糊阈值等于没有阈值,最后观察期变成无限期。
- 观察窗口限时:3 天或 1 周,窗口到期必须二选一:达标关闭,或未达标升级(回滚/修复/降级),不允许长期挂在「观察中」。
- 不做全量数据化:不是每个功能都要埋点验证。低风险功能(改文案、调样式)用「无异常 + 无 P2 以上工单」即可,观察成本和功能风险要匹配,否则 DoD 会膨胀成没人愿意执行的清单。
最大的坑是 DoD 事后补:每次出事故就加一条「下次必须 XX」,三个月后清单 20 条,没人看、没人执行、没人删。DoD 应该是一个 5 条以内、立项时就冻结的短清单,而不是事故日志的合集。
【想听大家说】
- 你们团队的 done 定义画在哪?上线后「观察期」是制度还是口头约定?
- 观察阈值是立项时定,还是上线后补?补出来的阈值执行率如何?
- 「观察中」的功能占排期的比重,你们有统计过吗?怎么处理的?
- 有没有人试过把「未关闭的观察期」直接算进研发的技术债/欠账里?效果如何?