# Technical Decision

> Technical decision making. 当用户需要做技术选型、讨论方案优劣、评估技术风险或做架构决策时使用此skill。

- Skill: `fengqiliu/technical-decision` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add fengqiliu/technical-decision`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fengqiliu/technical-decision/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: fengqiliu (https://skillmd.com/u/fengqiliu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fengqiliu/technical-decision

---


# Technical Decision Making

技术选型与决策技能，系统化分析技术方案并做出合理决策。

## 技术决策流程

```
┌─────────────────────────────────────────────────────────┐
│                    决策流程                               │
│  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐ │
│  │ 问题定义 │───▶│ 方案收集 │───▶│ 分析评估 │───▶│ 决策记录 │ │
│  └─────────┘    └─────────┘    └─────────┘    └─────────┘ │
└─────────────────────────────────────────────────────────┘
```

## Step 1: 问题定义

在讨论解决方案之前，先明确定义问题：

```
□ 核心问题是什么？（一句话描述）
□ 约束条件有哪些？（时间、成本、技术限制）
□ 利益相关者是谁？（业务、开发、运维、客户）
□ 成功标准是什么？（可量化的指标）
□ 决策的紧迫性？（紧急 vs 重要）
```

## Step 2: 方案收集

### 常见技术栈对比维度

| 维度 | 考虑因素 |
|------|---------|
| **功能性** | 功能满足度、扩展性、灵活性 |
| **性能** | 响应时间、吞吐量、并发处理 |
| **可靠性** | 可用性、容错性、数据一致性 |
| **可维护性** | 学习曲线、文档、社区活跃度 |
| **安全性** | 安全机制、漏洞历史、社区支持 |
| **成本** | 许可费用、人力成本、运维成本 |
| **团队适配度** | 现有技能、技术栈一致性 |

### 方案矩阵

```
┌────────────────┬─────────┬─────────┬─────────┐
│     维度       │  方案A  │  方案B  │  方案C  │
├────────────────┼─────────┼─────────┼─────────┤
│ 功能性         │   ●●●○  │   ●●●●  │   ●●○○  │
│ 性能           │   ●●●●  │   ●●○○  │   ●●●○  │
│ 可维护性       │   ●●●○  │   ●●●●  │   ●●○○  │
│ 成本           │   ●●○○  │   ●●●●  │   ●●●●  │
│ 团队适配度     │   ●●●●  │   ●●○○  │   ●●●○  │
├────────────────┼─────────┼─────────┼─────────┤
│ 总分           │   17    │   15    │   14    │
└────────────────┴─────────┴─────────┴─────────┘
评分：●●●● = 4, ●●●○ = 3, ●●○○ = 2, ●○○○ = 1
```

## Step 3: 分析评估

### 功能需求对比

| 需求 | 方案A | 方案B | 方案C | 权重 |
|------|-------|-------|-------|------|
| 实时处理 | ✅ | ❌ | ✅ | 高 |
| 离线分析 | ✅ | ✅ | ❌ | 中 |
| 多租户 | ❌ | ✅ | ✅ | 高 |
| ... |   |   |   |   |

### 风险评估矩阵

```
              可能性
            低    中    高
        ┌──────┬──────┬──────┐
       高│ 中风险│ 高风险│高风险│
 影    ├──────┼──────┼──────┤
 响    中│ 低风险│ 中风险│高风险│
 度    ├──────┼──────┼──────┤
       低│ 低风险│ 低风险│中风险│
        └──────┴──────┴──────┘
```

### 技术债务评估

```
□ 学习曲线有多陡？（1-5分）
□ 迁移成本有多高？
□ 退出策略是什么？
□ 供应商锁定风险？
```

## Step 4: 决策输出

### ADR (Architecture Decision Record)

```markdown
# ADR-[编号]: [决策标题]

## Status
[Proposed | Accepted | Deprecated | Superseded by ADR-XXX]

## Context
[描述做出这个决策的情况，包括约束、问题定义]

## Decision
[描述实际做出的决策，使用主动语气如"我们将采用..."]

## Options Considered
### 选项A: [名称]
**优点**: [列表]
**缺点**: [列表]

### 选项B: [名称]
**优点**: [列表]
**缺点**: [列表]

## Consequences
### 正面
- [列表]

### 负面
- [列表]

### 权衡
[如果适用，描述需要做的权衡]

## Related Decisions
[相关 ADR 链接]

## Notes
[其他备注]
```

## 常见技术决策模板

### 1. 数据库选型

| 场景 | 推荐 | 备选 |
|------|------|------|
| OLTP / 事务系统 | PostgreSQL | MySQL |
| OLAP / 分析 | ClickHouse | PostgreSQL |
| 缓存 | Redis | Memcached |
| 文档存储 | MongoDB | PostgreSQL (JSONB) |
| 图数据 | Neo4j | RedisGraph |
| 时序数据 | InfluxDB | TimescaleDB |
| 搜索 | Elasticsearch | Meilisearch |

### 2. 缓存策略

| 策略 | 适用场景 | 一致性 | 复杂度 |
|------|---------|--------|--------|
| Cache-Aside | 读多写少 | 最终一致 | 低 |
| Write-Through | 数据一致性要求高 | 强一致 | 中 |
| Write-Behind | 写入性能重要 | 最终一致 | 中 |
| Read-Through | 简化读取逻辑 | 最终一致 | 低 |

### 3. 消息队列选型

| 需求 | 推荐 |
|------|------|
| 简单队列 | RabbitMQ |
| 高吞吐 | Kafka |
| 低延迟 | Redis Streams |
| 事务消息 | RocketMQ |
| 云原生 | AWS SQS/SNS |

## 决策评审问题

做出决策前，问自己：

```
□ 我是否理解了所有选项的权衡？
□ 我是否考虑了短期和长期影响？
□ 团队是否理解并认同这个决策？
□ 如果决策错误，恢复成本有多高？
□ 是否有足够的信息支持这个决策？
□ 是否有可能改变的技术趋势？
□ 决策是否可逆？
```

## 输出模板

```markdown
# 技术决策报告

## 决策标题
[简明扼要的标题]

## 问题陈述
[清晰描述需要决策的问题]

## 约束条件
- [列表]

## 候选方案
### 方案A: [名称]
- **描述**: [简述]
- **优点**: [列表]
- **缺点**: [列表]
- **成本**: [估算]
- **风险**: [评估]

### 方案B: [名称]
...

## 推荐方案
[方案名称]

## 推荐理由
[解释为什么这个方案是最佳的]

## 实施计划
1. [步骤]
2. [步骤]
3. [步骤]

## 监控指标
- [如何验证决策是否正确]
```

