技术决策记录Skill technical-decision-record

用于记录和文档化技术决策的工具,强调决策的可追溯性、合理性和团队理解,关键词包括ADR、架构决策、技术选择、框架选择、第三方服务、架构变更。

架构设计 0 次安装 0 次浏览 更新于 3/3/2026

技术决策记录

这是什么

使用ADR(架构决策记录)来记录技术决策的结构化方法。确保决策可追溯、理由充分,并被团队理解。

何时使用

  • 选择技术或框架时
  • 进行架构变更时
  • 选择第三方服务时
  • 更改既定模式时
  • 任何你以后想要参考的决策

核心理念

1. 决策是不可更改的历史

一旦做出,ADR不会被修改,只能被取代。这保留了当时的推理,即使后来的上下文发生了变化。

2. 上下文优于结论

“为什么”比“是什么”更有价值。未来的读者需要理解导致决策的约束、选项和权衡。

3. 倾向于可逆性

倾向于以后可以更改的决策。为不可逆的选择记录反转成本。

4. 显式优于隐式

如果没有写下来,那就没有决定。口头协议不算作架构决策。

5. 团队优于个人

决策应该由受影响的各方审查。令人惊讶的决策会产生阻力。

流程

第一步:定义问题

我们在决定什么?具体点。

  • “用户数据使用哪个数据库”而不是“数据库的东西”
  • 包括触发因素:是什么促使这个决策?

第二步:列出约束

我们的选择有哪些限制?

  • 技术:性能、可扩展性、现有技术栈
  • 商业:预算、时间线、团队技能
  • 合规:安全、法规、数据居住地

第三步:列举选项

列出2-4个真正的选项。对于每个选项:

  • 简短描述
  • 优点(它做得好的地方)
  • 缺点(它做得不好的地方)
  • 估计成本/工作量

第四步:做出决策

选择一个选项。清晰地陈述。

  • “我们将使用[X]”
  • 包括谁做出了决策以及何时

第五步:记录后果

这个决策会带来什么?

  • 积极的:我们期望的好处
  • 消极的:我们接受的成本
  • 风险:可能出错的地方
  • 可逆性:以后改变有多难

ADR模板

# ADR-[NUMBER]: [TITLE]

**状态**: [提议中 | 已接受 | 被ADR-X取代]
**日期**: [YYYY-MM-DD]
**决策者**: [姓名]

## 上下文

[问题是什么?是什么促使这个决策?]

## 约束

- [约束1]
- [约束2]
- [约束3]

## 考虑的选项

### 选项1: [名称]
[描述]
- 优点:[...]
- 缺点:[...]

### 选项2: [名称]
[描述]
- 优点:[...]
- 缺点:[...]

### 选项3: [名称]
[描述]
- 优点:[...]
- 缺点:[...]

## 决策

我们将使用**[选项X]**。

[推理:为什么选择这个选项而不是其他?]

## 后果

### 积极的
- [好处1]
- [好处2]

### 消极的
- [成本1]
- [成本2]

### 风险
- [风险1]:[缓解措施]
- [风险2]:[缓解措施]

### 可逆性
[容易 | 中等 | 困难 | 不可逆]
[解释反转将需要什么]

常见错误

1. 无选项决策

在没有探索替代方案的情况下做出决策不是决策——这是默认。

为什么这是错误的:你不能在不知道你选择了什么的情况下证明选择。

相反:总是至少列出2个选项,即使其中一个是“不采取行动”。

2. 自行车棚效应

在可逆决策上花费的时间比不可逆决策多。

为什么这是错误的:在低风险决策上花费的时间是没有用在高风险决策上的时间。

相反:将审议时间与可逆性相匹配。不可逆=更多流程。

3. 隐藏的利益相关者

在没有涉及受影响团队的情况下做出决策。

为什么这是错误的:会造成惊讶、阻力和返工。

相反:在“决策者”中列出受影响的各方,并得到明确的批准。

4. 修改而不是取代

当上下文变化时编辑旧的ADR。

为什么这是错误的:失去了为什么做出决策的历史记录。

相反:创建一个新的ADR来取代旧的,引用原始的。

技术决策

你在处理什么技术决策?

  1. 在决定什么?

    • 技术选择
    • 架构模式
    • 第三方服务
    • 流程变更
    • 其他:___
  2. 是什么触发了这个决策?

    • 新需求
    • 性能问题
    • 技术债务
    • 团队变更
    • 其他:___
  3. 这应该是多容易改变的?

    • 容易改变(实验)
    • 更改需要适度努力
    • 重大投资
    • 难以逆转(谨慎承诺)

我将根据你的回答帮助你构建ADR。