PM 危险信号工具箱
ElabAlice 的个人 PM 工具箱。把"我感觉不对 / 我痛"条件反射地转化成"强烈警告、但不冒犯"的反馈,或在开工前做依赖自检。 来源:AIGC-APO 项目复盘(2026-06)提炼,持续维护。
何时用
- 对客户/上级/干系人发警告或升级(催决策、报风险、追资源/交付)→ §1 公式 + §2 表
- 开工前依赖自检 → §2"开工即写"行 + §5 依赖牌组
- 识别正在发生的危险信号 → 扫 §2 表
- 无体感的雷(本地跑通但目标环境未验)→ §6
- 写出来的话太冲 / 像发泄 → §4
0. 心法(一句话)
把"我痛"翻译成"你险" + 一个带期限的二选一。 警告强度来自 量化 + 期限 + 默认后果,不来自情绪或指责。
1. 万能升级公式(所有模板都是它的变体)
[事实] 客观、可量化、零情绪 —— 我观察到 X。
[利害] 锚定「对方的目标」,不是「我的痛苦」 —— 这将导致 Y(交付/质量/成本风险)。
[决策] 给二选一,降低对方行动门槛 —— 请在【日期】前确认 A / B。
[默认] 礼貌地装上牙齿 —— 若届时未复,我将按【现状】推进,相应地【可见后果】。
⚙️ 「默认」这一行是警告味的来源:它让"不回复"本身变成一个有代价的决定,而不是可以无视的沉默。没有这一行,前几行都是请求;有了它,才是升级。
2. 条件反射表
| 信号的味道(你感觉到的) | 它预示着什么 | 公式化反馈模板 |
|---|---|---|
| 客户提了个我没见过的术语/设备/系统 | 隐含运行环境/依赖未验证 | [事实]需求中提到 X。[利害]X 的运行环境我方尚未确认,可能影响可交付性。[决策]请【日期】前提供 X 的硬件/OS/账号清单,或安排 30 分钟澄清。[默认]逾期我将按"标准环境"假设推进,若日后环境不符,返工由假设偏差导致。 |
| 客户对我的默认假设没反对 | 沉默 ≠ 确认 | [事实]我将按【假设】开展。[利害]若与实际不符,将在【节点】造成返工。[决策]请【日期】前确认或更正。[默认]无回复视为确认,书面记录在案。 |
| 我反复抱怨/重复提同一件事(骂骂咧咧的源头) | 一个未被解决的阻塞,正隐性烧资源 | [事实]自【日期】起该阻塞已致【量化损失】。[利害]按此速率,【交付节点】存在 N 天缺口。[决策]请【日期】前二选一:A【消除阻塞,如寄设备】/ B【接受顺延至 X】。[默认]逾期按现速率排期,交付顺延并书面同步。 |
| 我靠加班/睡不够/硬撑补进度 | 进度表面正常,实际靠透支,有隐藏缺口 | [事实]近【N】天实际投入为【超额】,已不可持续。[利害]维持现状将致【质量/后续节点】风险。[决策]请【日期】前决定:增援 / 调范围 / 顺延。[默认]逾期按可持续速率重排,相应节点顺延。 |
| 客户绕开/含糊不答某问题 | 决策权或真实需求未暴露 | [事实]关于【问题】,目前无明确答复。[利害]该不确定性阻塞【下游任务】。[决策]请【日期】前答复,或指定决策人。[默认]逾期按【保守假设】推进。 |
| 客户用模糊/不准的术语下技术指令 | 误读范围、白费口舌解码;成本/权责类决策被埋进歧义 | [复述]我理解"【原话】"=【准确术语复述】。[利害]这理解直接决定【成本¥X / 谁承担 / 技术路径】。[确认]请回"对"或更正。[默认]若【日期】无更正,按此理解执行并计入预算 |
| 客户主动提前/收紧死期 | 客户真实处境比表面更紧/更复杂 | [事实]交付从 A 提前至 B。[利害]需确认【范围/资源】是否同步调整,否则【质量/延期】风险上升。[决策]请确认:范围缩减 / 资源增援 / 维持原范围接受风险。[默认]逾期维持原范围,风险书面备案。 |
| 一个看似纯 UX 的需求,把技术选项收窄到唯一一条路(且那条路强依赖某个未确认的外部条件) | 存活的那条路的依赖项,从"以后再说"升级为立即 blocking | [事实]需求【R】只剩一种实现路径,该路径依赖【未确认的硬件/OS/权限】。[利害]该依赖未定前任何构建都建立在假设上。[决策]请【日期】前确认【依赖项】,在此之前暂停相关构建。[默认]逾期按【假设】推进并备案,返工由假设偏差导致。 |
| 改一处崩多处 / 出现 revert 乒乓 / 提交信息变"救火" | 架构已腐化:失去对状态的可推理性,只能被动反应 | [事实]某文件达【N】行、单类吞多域职责;近期有 revert 反复、提交全是修症状。[利害]继续堆将使【节点】不可达且无法安全重构。[决策]申请【日期】起【N】天"拆分+加固"窗口,或正式接受范围/质量折衷并书面备案。[默认]逾期按现状推进,新增缺陷归档为已知技术债 |
| 一个 actor 开始攒异步回调/状态门控/时序 if/else,或干起渲染/合成 | 层职责熔铸——"行为执行"与"时序准入"被塞进同一单元,层边界已塌 | 停下:这是层划分决策不是业务任务。把"时序准入/谁先谁后"抽到独立仲裁层(三态含 Conflicted),大数据执行留 Executor,本单元只留本职;散落时序约束 = 交付负债,隔离存放、定期转正 |
| 决定用临时方案顶一下(尤其当它是之前被否的方案) | "临时"≠便宜:真实成本 = 稳定回归工时,由验证决定(AI 也压不动);易吞真方案时间、易变永久 | 先按"稳定回归"估工(非 hack 工时);[决策]确认这 N 小时花完、真方案是否还有时间——没有就升级:要么只交付临时方案并书面声明,要么砍范围 |
| 需求/变更一来,第一反应是"赶紧开写"(尤其想立刻派 AI Agent 去 fork+调试) | 跳过了"这暗示什么/什么是新 blocking 依赖"的推导,可能在未确认假设上开工;AI 让"开工"成本≈0,反而压制了战略停顿 | [开工前 5 分钟自检]①这需求让技术选项塌缩了吗?②存活的那条路依赖什么?③那依赖确认了吗?——任一"否/不确定",先转一条升级问询再开工 |
| 即将入库的代码从没在目标环境跑过(也没在同源代理上验证) | 入库的是未验证的雷;一旦入库,下游全建在错误基线上,返工呈几何级 | [事实]该代码未在【目标环境 / 同源代理】验证。[利害]入库即成下游基线,缺陷扩散。[决策]验证通过前:标记 unverified / 不作基线 / 不入库。[默认]若因进度必须入库,书面声明"基于假设入库"并锁定验证截止日 |
| 我并行搭一条备用技术线去绕开某个没拍板的成本/决策 | 拿工程去解一道管理/成本题;烧的是紧缺进度,真正的 blocker(那个决策)纹丝未动 | 停下并行线;把"为何必须走主路"的证据(含死掉实验所证明的墙)写成决策件逼那个决策。死掉的实验=弹药,不是垃圾 |
| 稳定、长期没改过的功能突然不可用(调试中冒出的回归) | 隐藏耦合 / 共享状态 / 环境漂移——"没动它却坏了"= 因果链你看不见(正是共享可变状态/层职责熔铸的实时冒烟);也常是 🃏隐牌(隐式依赖悄悄变) | stop-line:①停,别硬推(雪球起点);②别 hack 修症状(在隐藏耦合上叠 hack=加速腐化);③bisect 找真因(最近改动/环境/依赖/累积状态/他人提交);④没时间查→升级:[事实]稳定功能回归,根因未定位 [利害]不定位则【节点】有风险、可能在客户处复现 [决策]给【N 小时】排查窗口 or 接受风险 [默认]逾期按"带已知回归"推进并书面备案 |
| 新需求以 Issue/Bug 名义塞进来(尤其"甲方一直在这环境测"那种永久性约束) | 范围蔓延伪装成缺陷——Issue 渠道自带"必须修/必须快/免费"契约,新需求白嫖之;且可能是永久环境约束,该重塑设计而非打补丁 | 重新归类,把伪装拆掉:[事实]【X】未在原需求列为约束,现以 Issue 提出,实为新需求/环境约束。[利害]按 bug 修会吞工期+牺牲质量;若是长期环境,需重塑设计。[决策]请【日期】前归类:A 独立 Feature 立规格排期 / B 本期列为已知限制、后续处理。[默认]未归类则按"范围变更请求"(非 bug)登记,节点顺延并书面同步 |
| 客户说**"你们报价报低了"但说不清哪里低**(定完单子后的第一反应) | 客户的产品愿景 >> 我方报价圈住的范围:低价是我方低估了 scope 的症状(不是客户嫌便宜);"说不清"因差距弥散(整体更大)、非某一项。预示:客户脑中那个更大的产品,会一块块以"新需求/Issue"漏出 = 范围失控雪球的真种子 | 别窃喜、别辩解。把范围当被低估的东西重估:[事实]客户反馈我方报价偏低但未指具体项,可能反映报价未覆盖其完整产品愿景。[利害]按当前(偏小)范围开工,更大愿景会以新需求/Issue 陆续出现→返工与工期失控。[决策]请【日期】前二选一:A 共同做一次完整 scope/愿景梳理、重估范围与报价 / B 确认当前为合同范围、后续新增走变更流程(附报价)。[默认]未回应按当前范围执行,新增另计。预签变更控制流程 |
| 某角色/阶段(尤其测试/QA)的入项时机一直没定,而生产侧持续高速产出(如一天 1-2 版本) | 质量验证闭环缺失 = "未验证入库"在版本/流程层的镜像;产物在无人把关下堆积。"何时测"不是被否决、是被交付节奏冲掉;且成死循环:没稳定基线→测试入不了项→质量无把关→继续堆新版本→更没稳定基线。判据:产出速率 ≥ 验证侧消化速率时,验证侧必然缺席(被挤出去,不是被忘了)。隐蔽性:被"我在交付"的良好感盖住(同 §6 无感) | [事实]自【日期】起约一天【1-2】版、累计【N】版,测试/QA 尚未入项(无入项节点与验收标准)。[利害]无验证闭环下已交版本质量未知,缺陷恐在客户处才暴露;且版本持续流动、形不成可测基线,测试越拖越难入。[决策]请【日期】前二选一:A 选定某版本为"冻结测试基线"、测试即日起入项并定验收清单 / B 明确当前为"开发自测"范围、正式测试延至【节点】、缺陷由开发兜底并书面界定。[默认]未定则按"当前版本仅供开发联调、不视为可验收交付"标记同步,不计入已验收 |
| 生成测试用例时才发现:某 Feature 排列组合后单轮回归需单设备独占【N 小时】(全量更甚),远超项目单版交付节奏 | 验证侧吞吐 << 交付侧吞吐 → 回归永远跑不完一轮 → 版本长期未充分验证(= 上行"测试入项死循环"的物理根因:不是不想测,是测不起)。组合爆炸 = 内部状态空间失控的可观测代理(测试时长不是测试的锅,是 Feature 状态交织的回声)。"才发现"= 探针迟到:复杂度从设计/实现期就在,只是没人提前算"测一轮要多久"(AI 时代验证地板,压不动) | 先复杂度归因(伪复杂=测试把不该全组合的维度笛卡尔积了 / 真复杂=Feature 状态空间失控)。[事实]Feature【X】测试组合全量约【13】h、有效子集约【3-6】h/轮(单设备独占)。[利害]单轮远超单版交付节奏,回归永远跑不完→版本长期未充分验证、缺陷恐客户处暴露;且组合爆炸反映状态空间可能失控。[决策]请【日期】前二选一:A 测试侧——等价类/正交表压缩组合、定最小回归集+周期全量 / B Feature 侧——压缩后仍数小时则收窄/拆解该交互(打断·轮次设上限)。[默认]未定则按"最小回归集+未覆盖归档已知风险"推进,不在 SLA 承诺全量覆盖 |
| 验证依赖的关键资源(设备/账号/许可)零和或单点稀缺——全链路就 N 台、各方各持一台、无冗余——而它正被高强度回归/调试争用 | "加资源"型消除阻塞(寄设备/加机器)在此失效:非不愿,无冗余可调(抽走客户方即缺)。验证能力 = 设备数 × (1/单轮时长),此处设备数=1、单轮 3-6h,两因子同压地板 → 验证能力有硬上限,无法靠投入解决,只剩砍面/改设计——把上行"复杂度归因"二选一从可选倒逼成必选。附带:单点=单点故障(1 台占/坏即开发停);三方分持=缺陷信息跨方延迟(§6 极端版)。稀缺不否定 §7 闸门,反而把"设备可用"从隐含假设升级为第三进度维度(与人力工期、回归时长并列),须显式排期、错峰 | 别再等"加设备"。[事实]目标设备【X】全链路共【3】台、分持于【甲方甲方/甲方/我方 各 1】、无冗余;我方仅【1】台,需同时扛开发联调+回归(单轮 3-6h)。[利害]"寄/加设备"因无冗余失效,验证能力触硬上限;单台=单点(占/坏即停)。[决策]加资源不可行,故砍面为必选(非可选):请【日期】前定最小回归集+未覆盖项归档,或收窄 Feature 状态空间。[默认]未定则按"最小回归集+未覆盖归档已知风险"推进 |
| 客户/某干系人在给资源(设备/账号/预算)这件事上表现得为难、勉强、"给不动",而非干脆给出 | 你对接的多半不是真正的资源源头,而是中间层;真正握资源的甲方源头在更上游(经验:最终甲方中期常持 ~【10】台同类设备——若你只拿到【1-2】台,差值即被中间层截留/未传递的部分)。客户的"给不动"是供应链位置/采购权边界使然,非吝啬;资源大概率存在但没流到你 = 流向问题,非有无问题。修正上行"稀缺→砍面必选":先排除流向问题(打通供应链往往比砍面划算),再谈砍面 | 别催,先侦察处境。 [事实]资源【设备】迟迟未到位、对接方表现勉强,我方仅持【1】台;据同类项目经验,最终甲方中期常持 ~【10】台,差值显著。[利害]若资源在中间层被截留,验证能力长期触底,且非当前对接方主观能解;但若属流向问题,本可打通。[侦察/决策]请协助厘清供应链:① 真正的资源源头/金主是谁?② 采购·调配权在哪一层?③ 当前对接方是否最终源头?若否,请引见至源头或协助打通。[默认]若【日期】前无法厘清,按"资源供给不明"标记,验证范围按现有【1】台上限规划、未覆盖项归档,并书面提示风险归因于供应链、而非工期 |
3. 教学案例:"骂骂咧咧" → 应有的升级
实际发的(锚定自我痛苦,无效):
远程调试效率太低,网络不好,碰不到设备,我已经睡不够觉了。
为何无效: 锚定的是你的痛苦 → 对方忽视零代价;无期限、无选项、无默认后果。
用公式重写(警告味 + 零冒犯):
[事实] 自【日期】起远程调试,单次验证需约 X 小时(本地约 Y 分钟),已累计 N 次。 [利害] 按此速率,【交付节点】存在约 N 天缺口。 [决策] 为保住【节点】,请在 【日期】 前二选一:A【消除阻塞,如寄设备】/ B 接受顺延至 X。 [默认] 若届时未确认,我将按当前速率排期,相应顺延,届时书面同步新日期。
差别: 阻塞大概率提前消除,而非拖到爆。全程无一字攻击对方,警告全靠"量化 + 期限 + 顺延默认"。
4. 语气:攻击性收进结构里
问题不是"太狠",是狠劲用错了靶子。把它从"人"挪到"结构"上:
| ❌ 攻击人(冒犯 + 无效) | ✅ 装进结构(狠 + 不冒犯) |
|---|---|
| "你们根本不管我死活" | "若无回复,交付顺延至 X 并书面记录" |
| "我快死了 / 我睡不够" | "按当前速率,【节点】存在 N 天缺口" |
| "你们快死了才着急是吧" | "现需【日期】前二选一以消除风险,逾期按默认方案推进" |
记住: 情绪化的狠是发泄,会招防御;结构化的狠是事实 + 期限 + 后果,对方防御不了,只能决策。你要的不是变温和,是把同一股能量换一个出口。
5. 依赖牌组:"命门"到底长什么样
开工自检 Q2"这做法靠什么外部条件"——外部条件就是下面这些"牌"。 用法:开工前扫一遍,命名你握着哪几张;每张的"打法"是动作;动作做不了 / 东西没到手 → blocking。
| 花色 | 牌(依赖类型) | 怎么认出它 | 打法(确认 / 应对) |
|---|---|---|---|
| ♠ 物质 | 硬件 / 设备 | "只有某台机器/某个设备上才能跑或验证" | 拿到设备 / 找同源代理(目标设备没有,先上最接近的同类)/ 拿不到就声明"基于假设" |
| ♠ 物质 | OS / 平台 | "目标系统和我开发机不一样" | 确认 OS 版本/镜像,搞到对应测试环境 |
| ♥ 通行 | 账号 / 权限 | "得有某个账号/某项权限才能连/才能测" | 申请,带截止日;没下来标 blocking |
| ♥ 通行 | 签名 / 证书 | "代码要签名才能装才能跑" | 确认签名链 / 证书到手 |
| ♦ 外部件 | 第三方库 / SDK / API | "功能靠一个我不完全掌控的东西" | 锁版本、查可用性与授权、留 fallback |
| ♦ 外部件 | 数据 / 模型 | "得有某份数据/某模型才能跑" | 确认到手、版本、合规 |
| ♣ 人 | 上游交付 | "得等 X 给我 Y 才能动" | 设交付日 + 默认方案(没给怎么办) |
| ♣ 人 | 决策 / 签字 | "卡在等某人拍板" | 这张的打法就是升级公式(事实/利害/二选一/默认) |
| 🃏 隐牌 | 知识缺口 | "出现一个我不熟的术语/领域" | 调研 + 产出"我现在的理解"让对方确认 |
| 🃏 隐牌 | 未言明假设 | "我其实是假设了 X,但没人确认过" | 把假设显式写出来,找相关方确认/否认 |
⚠️ 🃏 隐牌最致命:你不知道自己正握着它们。
6. 如何感知"无感"的危险信号
有些危险信号天生没有体感:你不会不舒服,因为"它在我机器上跑得好好的"。这类信号光靠"感觉"必漏——必须用 触发器 + 探针 + 闸门 主动制造警报。
核心翻转:盯"成功",别盯"失败"。 别的 bug 你会疼(崩了、丑了);这颗雷你不疼——因为它本地跑通了。所以触发感不是"出问题了",而是 "好,本地跑通了"那股舒服劲儿。训练:每当这股舒服上来,下一个念头就是 "但在目标环境呢?"
触发时刻(提交 / 交付 / 里程碑)跑三探针:
- 这段代码最后一次真实运行的环境是什么?→ 若是"我的开发机"而目标是别的 → 🚨
- 目标的同源代理是什么?我在上面跑过吗?→ 没跑过 → 🚨
- 如果它在真实目标上崩了,我什么时候才会知道?→ 若"只有对方跑时"→ 🚨
闸门兜底(感知不可靠时): 把 "☐ 已在同源代理上验证" 设成入库 / 交付的前置 checkbox——打不了勾就不合并。把"感知"变成机械动作。
一句话:别等感觉;本地一跑通,就问"目标上呢?",并强制走一遍同源代理。
7. 硬闸门:把"时机"钉到事件上(不可商量的触发点)
§2 处理"感觉到危险、怎么升级"。但有一类问题更适合预防:以"什么时候做"为形态的模糊焦虑(测试何时入项、设备何时到位、验收何时定)——它们没体感,光靠"感觉"必漏。解法:不纠结时机,把动作绑死到一个客观事件并设前置条件。事件发生 → 前置不满足 → STOP。
判据:凡"时机 / 该不该现在"类焦虑 → 改写成「[事件]触发 → 必须满足[前置]」的闸门。 把判断从人脑挪到机械触发器(同 §6)。
| 触发事件 | 必须满足的前置(缺一不可) | 不满足时的默认动作 |
|---|---|---|
| 软件完成集成、形成初版 | ① 测试/QA 已就位(入项节点 + 验收清单已定)② 至少一台目标 / 同源设备可用 | 标记为"开发联调态"、不计入已验收,书面同步;此时交付物 ≠ 可测试交付 |
💡 这条直接预防 §2 的"测试入项时机不定"与"验证吞吐 << 交付"两行——不是事后察觉它们,而是在初版成型那一刻就强制 QA + 设备到位。若届时设备仍未到(如 AIGC-APO 的 MTR 4/16 才寄到),那本身就是更早的升级信号,而不是"先交着、测试以后再说"。