3136 字
约 10 分钟
14
S09-A11 · 风险与问题的混淆:还没发生的事与已经发生的事
2024-12-31
2026-11-09

季度评审时把风险登记表投到屏幕上,十四条里有九条描述的是已经发生的事:某个接口还没联调、某个供应商的报价还没回、某个关键人已经离职、某个需求还没排期。这些条目每一条都需要今天有人去处理,但它们躺在"风险"栏里,看起来像未来的事。

风险是尚未发生、有概率的事件;问题是已经发生、需要处置的事实。 两者的管理动作完全不同,混在一张表里,结果是既没人做预案,也没人负责解决。


1. 分界与两个方向的错位

判断一个条目属于哪一类,只需要问:它现在正在发生吗?

维度 风险 问题
状态 尚未发生 正在发生
概率 有概率不发生 概率为 1
需要什么 预案 + 触发信号 + 责任人 处置方案 + 负责人 + 截止时间
成功的标准 没有发生,或发生后影响可控 已消除,且不再复发
复盘时的位置 "我们预判到了,预案起了作用" "我们处置得快/慢"
关闭条件 到期未发生、或前提消失 状态恢复

两个方向的错位都很常见,后果不同:

错位 表现 后果
风险写成问题 "供应商可能延期"被记成"供应商延期" 直接进入处置,没人做备选方案
问题写成风险 "接口还没联调"记在风险栏 没人负责解决,只等它自己好
两者混排 一张表里既有预案又有待办 优先级无法排序,周报读不出重点
长期不分 表越来越大,没人再看 风险管理退化为填表

第二种错位最常见。它的信号是:某条"风险"已经连续三个月出现在表里,状态一直是"高"。风险不该长期停留在高风险状态——要么它发生了(转成问题),要么它的前提消失了(关闭),要么预案被写出来了(风险降级)。

2. 字段决定了一张表能不能用

两类条目需要的字段不同,共用一套字段必然有一半是空的。

字段 风险必填 问题必填 说明
描述 是 是 风险写"可能",问题写"已"
概率 是 — 高中低三档即可,不追求精确
影响面 是 是 风险写"若发生",问题写"已影响"
触发信号 是 — 见下一节
预案 是 — 谁在什么条件下做什么
责任人 是(预案执行人) 是(处置负责人) 不是"相关方"
截止时间 — 是 问题必须有期限
处置方案 — 是 具体的下一步动作
状态 观察中 / 已触发 / 已关闭 待处置 / 处置中 / 已闭环 两套状态机
// 一次查询同时暴露四类字段缺失,把"填表"变成可判定的检查
SELECT id,
       CASE WHEN signal   IS NULL THEN '缺触发信号'
            WHEN plan     IS NULL THEN '缺预案'
            WHEN owner    IS NULL THEN '缺责任人' END AS risk_gap,
       CASE WHEN due_date IS NULL THEN '缺截止时间'
            WHEN next_step IS NULL THEN '缺下一步' END AS issue_gap
FROM entry
WHERE kind = 'risk' AND (signal IS NULL OR plan IS NULL OR owner IS NULL)
   OR kind = 'issue' AND (due_date IS NULL OR next_step IS NULL);
// 空值计数比"表填得全不全"这种主观判断可靠

"责任人"这一栏最容易写坏。写成"技术组"等于没有责任人;写成"相关方:张三"也等于没有。责任人的定义是"如果这件事没被处理,第一个被问的人"。

3. 触发信号是风险条目的核心

没有触发信号的风险条目,本质上是一条备忘录——它记录了某种担忧,但没有告诉任何人"什么时候该动手"。

风险描述 无触发信号(无效) 有触发信号(有效)
供应商可能延期 "关注交付进度" "若 T-10 个工作日未收到样品,启动备选供应商"
关键人可能离职 "注意人员稳定性" "若核心模块只有 1 人熟悉,启动结对与文档补齐"
三方接口可能不稳 "保持沟通" "若连续 3 天错误率高于 1%,切备用通道"
需求可能变更 "及时同步" "若需求冻结后新增 P0 需求,重排范围并走变更流程"

触发信号必须是可观测且可判定的。"关注""注意""保持沟通"都不满足这个条件,因为它们无法回答"现在到点了没有"。

// 风险条目的完整形态:触发信号、预案、责任人三者缺一不可
risks:
  - id: R-07
    desc: "关键模块仅一人熟悉,离职或长期请假将导致交付中断"
    probability: medium
    impact: high
    signal:                          // 必须可观测
      metric: modules_with_single_owner
      condition: ">= 1"
      check: weekly
    plan:                            // 触发后要做什么,写动作不写态度
      - "30 天内完成结对:第二人独立提交过该模块变更"
      - "补一份运行手册,覆盖排错路径"
    owner: "张三"                     // 没处理时第一个被问的人
    review_by: 2026-12-31            // 到期必须重估,不重估就自动降级

review_by 这一栏解决风险清单只增不减的问题:到期没有重新确认,条目自动失效。强制重估比强制检查有效——检查只会加条目,重估会删条目。

4. 风险转问题的那一刻

转化必须有明确动作,否则这件事会在两个体系之间掉出去。

时刻 必须做的动作 常见遗漏
触发信号命中 记录触发时间与证据 只口头说"好像出了"
转成问题条目 建立新条目,链接原风险 直接在原条目上改状态
启动预案 指定执行人,给出截止时间 预案留在文档里没人执行
通知相关方 明确影响范围与预期恢复 通知了但没写影响
风险条目归档 保留记录,标注已转化 删掉风险,历史断裂

第三项是最常掉的一环:预案写得很完整,触发时却没人执行,因为预案里没有写"谁"。预案的执行人必须在写预案时就确定,不能留到触发时再找。

// 触发信号的自动检查:把"关注"变成一条可执行的判定
bin/check-risk-signals --config risks.yaml --format table

// 输出示例(每周跑一次,结果进周报)
// R-07  medium/high   signal HIT   modules_with_single_owner=2  -> 转问题 Q-31
// R-09  low/low       signal OK    dependency_age_days=41
// R-11  medium/high   OVERDUE      review_by=2026-11-01 已过期 38 天 -> 强制重估

第三个状态 OVERDUE 是这套机制里最有价值的输出:它把"没人管的条目"变成一个可见的数。

5. 评级在两类条目里含义不同

"高风险"这个词在两种语境下指向不同的东西。

评级含义 风险 问题
高的意思 发生的可能性大 已经造成的影响大
由什么决定 概率 × 影响 影响面 × 恢复难度
降级方式 预案到位、前提消失 处置完成
常见误用 把"影响大但概率极低"标成高 把"提出人级别高"当成影响大

评级还可以用一个两维矩阵来定,避免"感觉很重要"式的判断:

// 风险等级 = 概率 × 影响;问题等级 = 影响面 × 恢复难度(不含概率,概率恒为 1)
              影响:低      中      高
概率:高        中        高       极高
      中        低        中       高
      低        低        低       中

// 极高 = 现在就做预案,不等触发信号
// 高   = 有触发信号与预案,进入周报
// 中   = 登记,季度重估
// 低   = 只登记,不占用注意力

第一行最容易出错:一个"影响极大但几乎不可能发生"的事件,标成高风险会让它挤占所有注意力;正确做法是保留它,但把资源投给"影响中等且很可能发生"的那些。

第二行同样常见:问题的优先级应该看影响面(多少用户、多少数据、是否可逆),而不是看谁提的。按提出人排序是组织病,它会让真问题排在小问题后面。

6. 排错:五种"表填了但没起作用"

现象 成因 处理方向
风险连续数月停在"高" 无触发信号,也无重估机制 补 signal 与 review_by,过期强制重估
预案写了但触发时没人动 预案没有执行人 写预案时同步指定人
周报里"风险"越来越多 问题被记进风险栏 分栏上报,问题单独一栏
同样的问题反复出现 闭环时没写根因 关闭条件加"根因已消除"
没人看风险清单 条目太多且全是套话 砍到十条以内,每条带信号

排错时可以先做一次"条目年龄"统计,它比任何主观判断都准:

// 条目年龄分布:长期存活的条目要么该转化,要么该关闭
awk -F, 'NR>1 {print $2}' entries.csv \
| while read d; do echo $(( ( $(date +%s) - $(date -d "$d" +%s) ) / 86400 )); done \
| sort -n | awk '{a[NR]=$1} END {print "中位:", a[int(NR/2)], "天; 最老:", a[NR], "天; 条数:", NR}'
// 中位年龄超过一个季度,说明这张表已经变成档案而不是管理工具

第五条值得展开:风险清单的价值与条目数量反向。一张有十条以内、每条都带触发信号的清单,看的人会记住;一张有四十条套话的清单,谁都不会看第二眼。

7. 边界:什么情况不需要分账

场景 为什么可以合并 做法
个人任务,无跨方依赖 处置与预案可由同一人即时切换 一份带状态的待办
周期短于两周 风险来不及转化 只记问题,风险口头提示
完全确定的工作 不存在"可能发生" 只记问题
高度重复的运维 风险已被流程覆盖 用检查单代替风险清单

判断口径一句话:这件事有没有"还没发生但需要提前准备"的性质。有,就必须分账;没有,合并成一份带状态的清单更省事。


8. 自测

  1. 用一句话区分风险与问题。为什么"现在正在发生吗"这一个问题就够?
  2. 风险写成问题、问题写成风险,各自会造成什么具体后果?
  3. 为什么"关注""注意""保持沟通"不构成触发信号?可观测且可判定具体指什么?
  4. 风险转问题时,最常掉的一环是哪个动作?如何在写预案阶段就避免?
  5. "高风险"在两类条目里分别指什么?把"影响极大但概率极低"标成高风险有什么害处?
  6. 为什么风险清单的价值与条目数量反向?强制重估比强制检查有效在哪里?
S09-A11 · 风险与问题的混淆:还没发生的事与已经发生的事
https://www.clxhxhhr.top/posts/6383/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。