name: 决策日志 description: 记录和检索决策及其上下文、选项和理由。用于记录决策、审查过去决策或回答“为什么我们选择了X?”等问题。
决策日志
记录决策及其上下文、考虑的选项和理由。检索和解释过去决策,以便团队和未来的您了解为什么选择了某个方案。
何时使用
- 用户希望记录一个决策(ADR、决策记录、“为什么我们选择了X”)
- 用户询问“为什么我们选择了X?”或“关于Y的决策是什么?”
- 用户希望在决策前审查选项
- 用户正在构建或维护决策日志
工作流程
- 上下文:决策关于什么?(范围、约束、触发因素)
- 选项:考虑了哪些选项?(2–5个)
- 标准:什么因素重要?(成本、速度、风险、可维护性等)
- 决策:选择了什么?
- 理由:为什么?有哪些权衡?
- 后果:接下来做什么?(后续工作、可逆性、审查日期)
决策记录格式
# [决策标题]
**日期**:YYYY-MM-DD
**状态**:提议 | 已接受 | 已弃用 | 被 [链接] 取代
**决策者**:[谁参与了]
## 上下文
[是什么情况或问题导致了此决策?存在哪些约束?]
## 考虑的选项
### 选项A:[名称]
- **优点**:[列表]
- **缺点**:[列表]
### 选项B:[名称]
- **优点**:[列表]
- **缺点**:[列表]
### 选项C:[名称]
- ...
## 决策
**[选定的选项]** 因为 [1–2句理由]。
## 理由
[为什么选择此选项?接受了哪些权衡?拒绝了哪些选项及原因?]
## 后果
- [我们获得什么]
- [我们放弃或承担什么风险]
- [后续工作]
- [何时重新审视:例如6个月后,或当X发生时]
## 参考
- [链接到工单、文档或讨论]
每个记录只针对一个决策。当后续决策取代此决策时,使用“被取代”。
何时创建记录
- 技术方面:架构、技术栈、库、API设计、数据模型
- 流程方面:我们如何开会、部署、审查、入职
- 产品方面:功能范围、优先级、推出策略
对于微小、可逆的选择(如变量命名),跳过记录。用于影响他人或难以撤销的选择。
检索决策
当有人问“为什么我们选择了X?”时:
- 搜索决策日志(或代码库中的ADR文件)
- 返回匹配的记录:上下文、选项、决策、理由
- 如果被取代,指向新决策并简要说明原因
如果没有记录存在:说明情况,并提议根据已知信息或对话草拟一个。
轻量级变体
用于无需完整ADR格式的快速日志:
## [日期] [一行决策描述]
- **上下文**:[1句]
- **选项**:A, B, C
- **选定**:A。**原因**:[1句]
- **后续**:[任何]
语气和风格
- 中立且事实性
- 用过去时描述已决定的内容
- 清晰表达“我们选择了X因为Y”
- 不指责;专注于理由和权衡
反模式
- ❌ 记录每个微小选择;保留用于有意义的决策
- ❌ 只陈述结果而不提选项或理由
- ❌ 没有日期或状态(难以知道是否仍然有效)
- ❌ 在一个记录中混合多个决策