预死亡分析Skill premortem

预死亡分析是一种结构化风险分析方法,用于在项目、计划或实现之前识别潜在的失败模式。基于Gary Klein的技术,由Shreyas Doshi推广,广泛应用于软件开发、产品管理和其他领域,以提高项目成功率和减少风险。关键词:风险分析、项目管理、失败预防、预死亡分析、结构化风险识别、风险缓解、项目风险评估、前瞻性分析。

项目管理 0 次安装 0 次浏览 更新于 3/14/2026

名称: 预死亡分析 描述: 使用结构化风险分析在发生前识别失败模式 允许工具: [读取, 搜索, 全局, 任务, 询问用户问题, 待办事项写入]

预死亡分析

通过系统地质询计划、设计和实现,在失败模式发生前识别它们。基于Gary Klein的技术,由Shreyas Doshi(Stripe)推广。

用法

/预死亡分析              # 自动检测上下文,选择深度
/预死亡分析 快速        # 强制快速分析(计划、PR)
/预死亡分析 深度         # 强制深度分析(实现前)
/预死亡分析 <文件>       # 分析特定计划或代码

核心理念

“想象现在是3个月后,这个项目已经灾难性地失败了。为什么会失败?”

风险类别(Shreyas框架)

类别 符号 含义
老虎 [老虎] 明显的威胁,如果不解决会伤害我们
纸老虎 [纸老虎] 看起来威胁但可能没问题
大象 [大象] 没人想谈论的事情

关键:标记前验证

不要仅基于模式匹配标记风险。 每个潜在老虎必须通过验证。

误报问题

常见错误导致误报老虎:

  • 看到硬编码路径,但没有检查 if exists(): 后备
  • 发现缺少功能X,但没有问"X是否在范围内?"
  • 标记行N的代码,但没有读取行N±20的上下文
  • 假设错误情况未处理,但没有跟踪代码

验证清单(必需)

标记任何老虎前,验证:

潜在发现:
  什么: "行42处的硬编码路径"

验证:
  上下文已读: true    # 我是否阅读了发现周围±20行?
  后备检查: true  # 是否有try/except、if exists()或else分支?
  范围检查: true     # 这甚至在这段代码的范围内吗?
  仅开发检查: true  # 这是在__main__、tests/或仅开发代码中吗?

结果: 老虎 | 纸老虎 | 误报

如果任何验证检查为"否"或"未知",不要标记为老虎。

必需证据格式

每个老虎必须包括:

老虎:
  风险: "<描述>"
  位置: "file.py:42"
  严重性: 高|中
   # 必需 - 检查了什么缓解措施且未找到:
  缓解措施已检查: "无exists()检查、无try/except、无后备分支"

如果无法用具体证据填写 mitigation_checked,则不是已验证老虎。

工作流程

步骤1:检测上下文与深度

# 基于上下文自动检测
if 在计划创建中:
    深度 = "快速"   # 局部范围
elif 实现前:
    深度 = "深度"    # 全局范围
elif PR审查中:
    深度 = "快速"   # 局部范围
else:
    # 询问用户
    询问用户问题(
        问题="预死亡分析的深度是什么?",
        标题="深度",
        选项=[
            {"标签": "快速(2-3分钟)", "描述": "计划、PR、局部变更"},
            {"标签": "深度(5-10分钟)", "描述": "实现前、全局范围"}
        ]
    )

步骤2:运行适当清单

快速清单(计划、PR)

心理上运行这些,记录任何适用项:

核心问题:

  1. 可能出错的最单一事情是什么?
  2. 任何可能失败的外部依赖?
  3. 如果中断,是否可能回滚?
  4. 测试中未覆盖的边缘情况?
  5. 可能引起返工的不清楚要求?

输出格式:

预死亡分析:
  模式: 快速
  上下文: "<正在分析的计划/PR>"

  # 两遍过程:首先收集潜在风险,然后验证每个
  潜在风险:  # 第1遍:模式匹配发现
    - "行42处的硬编码路径"
    - "对X缺少错误处理"

  # 第2遍:验证后
  老虎:
    - 风险: "<描述>"
      位置: "file.py:42"
      严重性: 高|中
      类别: 依赖|集成|要求|测试
      缓解措施已检查: "<未找到什么>"  # 必需

  大象:
    - 风险: "<未说出的担忧>"
      严重性: 中

  纸老虎:
    - 风险: "<看起来很可怕但没问题>"
      原因: "<为什么它没问题 - 存在什么缓解措施>"
      位置: "file.py:42-48"  # 显示缓解位置

  误报:  # 发现结果证明是虚惊
    - 发现: "<最初标记的>"
      原因: "<为什么不是风险>"

深度清单(实现前)

系统地对每个类别工作:

技术风险:

  • [ ] 可扩展性:在10倍/100倍当前负载下工作?
  • [ ] 依赖:外部服务+后备定义?
  • [ ] 数据:可用性、一致性、迁移清楚?
  • [ ] 延迟:SLA要求将满足?
  • [ ] 安全:认证、注入、OWASP考虑?
  • [ ] 错误处理:所有失败模式覆盖?

集成风险:

  • [ ] 破坏性变更识别?
  • [ ] 迁移路径定义?
  • [ ] 回滚策略存在?
  • [ ] 需要功能标志?

过程风险:

  • [ ] 要求清楚完整?
  • [ ] 所有利益相关者输入收集?
  • [ ] 技术债务跟踪?
  • [ ] 维护负担理解?

测试风险:

  • [ ] 覆盖差距识别?
  • [ ] 集成测试计划存在?
  • [ ] 需要负载测试?
  • [ ] 手动测试计划定义?

输出格式:

预死亡分析:
  模式: 深度
  上下文: "<正在分析的实施>"

  # 两遍过程
  潜在风险:  # 第1遍:初始扫描发现
    - "外部API无断路器"
    - "硬编码超时值"

  # 第2遍:验证后(读取上下文,检查缓解措施)
  老虎:
    - 风险: "<描述>"
      位置: "file.py:42"
      严重性: 高|中
      类别: 可扩展性|依赖|数据|安全|集成|测试
      缓解措施已检查: "<寻找了什么缓解措施且未找到>"
      建议修复: "<如何解决>"

  大象:
    - 风险: "<未说出的担忧>"
      严重性: 中|高
      建议修复: "<建议方法>"

  纸老虎:
    - 风险: "<看起来很可怕>"
      原因: "<为什么它实际上没问题 - 引用缓解代码>"
      位置: "file.py:45-52"

  误报:
    - 发现: "<初始担忧>"
      原因: "<为什么验证显示不是风险>"

  清单差距:
    - 类别: "<哪个清单部分>"
      失败项: ["<项1>", "<项2>"]

步骤3:通过询问用户问题呈现风险

阻塞: 呈现发现并要求用户决定。

# 构建风险摘要
风险摘要 = 格式化风险(老虎, 大象)

询问用户问题(
    问题=f"""预死亡分析识别了{len(老虎)}个老虎,{len(大象)}个大象:

{风险摘要}

您想如何继续?""",
    标题="风险",
    选项=[
        {
            "标签": "接受风险并继续",
            "描述": "已确认但不阻塞"
        },
        {
            "标签": "向计划添加缓解措施(推荐)",
            "描述": "在继续前更新计划包含风险缓解措施"
        },
        {
            "标签": "研究缓解选项",
            "描述": "我不知道如何缓解 - 帮我找解决方案"
        },
        {
            "标签": "讨论特定风险",
            "描述": "讨论具体担忧"
        }
    ]
)

步骤4:处理用户响应

如果"接受风险并继续"

# 记录接受以进行审计追踪
print("风险已确认。继续实施。")
# 继续到下一工作流步骤

如果"向计划添加缓解措施"

# 用户提供缓解方法
# 用缓解部分更新计划文件
# 重新运行快速预死亡分析以验证缓解措施解决风险

如果"研究缓解选项"

# 为每个高严重性老虎生成并行研究
for 老虎 in 高严重性老虎:
    # 内部:代码库之前如何处理这个?
    任务(
        子代理类型="侦察",
        提示=f"""
        找代码库之前如何处理:{老虎.类别}

        特别寻找模式相关:{老虎.风险}

        返回:
        - 文件:行引用到类似解决方案
        - 使用模式
        - 可用库/工具
        """
    )

    # 外部:最佳实践是什么?
    任务(
        子代理类型="先知",
        提示=f"""
        研究最佳实践:{老虎.风险}

        上下文:{老虎.类别}在{技术栈}代码库中

        返回:
        - 推荐方法(排名)
        - 库选项
        - 避免的常见陷阱
        """
    )

# 等待研究完成
# 综合选项
# 通过询问用户问题呈现2-4个缓解选项

如果"讨论特定风险"

# 询问讨论哪个风险
询问用户问题(
    问题="您想讨论哪个风险?",
    标题="风险",
    选项=[格式化风险选项(r) for r in 所有风险[:4]]
)
# 然后讨论特定风险

步骤5:更新计划(如果添加缓解措施)

如果用户添加了缓解措施,追加到计划:

## 风险缓解措施(预死亡分析)

### 已解决老虎:
1. **{风险}**(严重性:{严重性})
   - 缓解措施:{用户或研究的缓解措施}
   - 添加到阶段:{阶段号}

### 已接受风险:
1. **{风险}** - 接受因为:{原因}

### 预死亡分析运行:
- 日期:{时间戳}
- 模式:{快速|深度}
- 老虎:{计数}
- 大象:{计数}

集成点

在创建计划/计划代理中

计划结构批准后,退出计划模式前:

# 运行快速预死亡分析
/预死亡分析 快速

# 如果发现高风险,阻塞直到解决
# 如果只有中/低风险,通知并继续

计划批准后,实现前

# 在整个计划上运行深度预死亡分析
/预死亡分析 深度 想法/共享/计划/YYYY-MM-DD-功能.md

# 阻塞直到所有高风险老虎解决

在PR审查工作流中

# 在差异范围上运行快速预死亡分析
/预死亡分析 快速

# 通知任何发现风险

严重性阈值

严重性 阻塞? 必需行动
必须解决或明确接受
通知用户,建议解决
注意意识

示例会话

用户: /预死亡分析 深度 想法/共享/计划/2026-01-08-api-rate-limiting.md

Claude: 在API限流计划上运行深度预死亡分析...

[根据深度清单审查计划]

预死亡分析完成。发现2个老虎,1个大象:

**老虎:**
1. [高] 外部支付API无断路器
   - 类别:依赖
   - 如果支付API慢/关闭,请求将堆积

2. [高] 无回滚策略定义
   - 类别:集成
   - 如果限流破坏认证流,无快速修复路径

**大象:**
1. [中] 团队之前未使用Redis
   - 我们引入Redis用于限流计数器
   - 学习曲线可能减缓实施

**纸老虎:**
1. 数据库迁移大小 - 只添加一个索引,<1秒迁移

[呈现询问用户问题]

用户: 研究缓解选项

Claude: 研究缓解措施...

[生成侦察+先知并行]

发现断路器3个选项:

1. **使用现有重试工具**(推荐)
   - 在src/utils/retry.ts:45找到
   - 已处理指数退避
   - 只需添加断路器状态

2. **添加resilience4j-lite**
   - 此模式流行库
   - 更多功能但新依赖

3. **自定义实现**
   - 完全控制但更多代码维护

断路器用哪种方法?

用户: 选项1 - 使用现有重试工具

Claude: 添加到计划:

## 风险缓解措施(预死亡分析)

### 已解决老虎:
1. **无断路器**(高)
   - 缓解措施:用断路器状态扩展src/utils/retry.ts
   - 添加到阶段1

还要解决回滚策略老虎吗?

参考文献