编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 质量保障

  • 产品思考

  • 软实力

  • 开发流程

    • README
    • 敏捷开发实践指南
    • Scrum框架入门指南
    • 版本发布流程设计
    • 代码分支管理策略
    • 需求评审方法实践
    • 项目管理工具指南
    • 线上事故响应流程
    • 技术文档管理规范
      • 一、文档最大的问题:写完之后没人再看
      • 二、文档的类型——不是所有东西都值得写成文档
      • 三、API 文档——能自动生成就不要手写
      • 四、文档的存活系统——四层维护机制
        • 4.1 ADR——架构决策记录
        • 4.2 文档的定期巡检
        • 4.3 过时文档的处置
      • 五、知识库——让信息"找得到"
        • 5.1 目录结构
        • 5.2 搜索比分类重要
      • 六、小结
  • Git应用

  • 技术模版

  • 技术规范

  • markdown

  • mermaid

  • license

  • 博客部署

  • 技术招聘

  • 测试经验

  • 技术
  • 开发流程
杨充
2020-06-03
目录

技术文档管理规范

# 技术文档管理规范

API文档、架构文档、知识库维护——文档活起来才有价值

# 一、文档最大的问题:写完之后没人再看

你花 2 天写了一篇架构文档,精雕细琢——3 个月后有人打开它,
发现里面描述的系统已经重构了两次,文档过时了。

同样 3 个月后另一个同事问你:"这个支付流程到底怎么回事?"
你回他:"wiki 上有啊,我写了一篇。"他打开一看——"但这是老架构的文档啊。"
1
2
3
4
5

文档不维护比没有文档更危险。 没有文档,同事知道"我不知道"——他会去问人。过时文档让他以为"我知道了"——直到上线出问题。


# 二、文档的类型——不是所有东西都值得写成文档

值得写的(Doc):
  □ 架构决策记录(ADR)——"为什么我们选了 Redis 而不是 Memcached"
  □ API 接口文档——结构化、自动生成
  □ Oncall 记录——事故复盘
  □ 新人入职指南——环境搭建流程
  □ 编码规范——团队统一的风格约束

不值得写的:
  □ 会议纪要(除非有决策)——用 Jira/Linear comment 代替
  □ "how-to" 教程类(除非团队独有操作)——网上大把,复制链接更好
  □ 个人笔记——放你自己笔记本里,不要污染团队 wiki
1
2
3
4
5
6
7
8
9
10
11

判断标准:这个文档半年后还有人需要看吗?会 → 写。不会 → 别写,或用更高效的方式传递信息。


# 三、API 文档——能自动生成就不要手写

❌ 手写 API 文档:
  - 改了代码忘了改文档 → 文档和实现不一致
  - 前端看着文档调用,返回的字段和文档不一样 → "文档不对"

✅ 从代码/注释自动生成:
  - Swagger / OpenAPI(Java/Kotlin 生态)
  - apidoc / JSDoc(Node.js 生态)
  - grpc-gateway + protobuf(gRPC 生态)

原理:文档和代码在同一个源。改了代码就改了文档。没法不同步。
1
2
3
4
5
6
7
8
9
10

手写 API 文档的唯一场景:对外公开的 API,需要配示例和说明。但即使这样,字段定义也应该从代码生成后手动补充说明文字。


# 四、文档的存活系统——四层维护机制

# 4.1 ADR——架构决策记录

永远不要只记"最终选了什么"——要记"为什么这么选,以及当时不选的其他方案"。

ADR 模板(一段话就够了):

# ADR-003:选择 Kafka 代替 RabbitMQ 做订单事件总线

背景:订单系统需要在多个服务间广播状态变更事件。

决策:选用 Kafka。

原因:
  1. 预期消息量会从 1000/s 涨到 50000/s,RabbitMQ 的横向扩展不如 Kafka
  2. 下游需要消息重放能力(回溯历史订单事件),Kafka 的持久化天然支持
  3. 团队已有 Kafka 运维经验

后果:
  优点:吞吐量够未来三年用
  缺点:增加了运维复杂性,PHP 接入 Kafka 需要额外适配层

替代方案:
  - RabbitMQ:开发快但吞吐量上限低,半年后可能需要再次迁移
  - RocketMQ:功能和 Kafka 类似,但社区活跃度和人才池更小
  - 不引入消息队列:当前架构已经快撑不住了,必须改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

ADR 的价值不是当时写它的那一刻——是一年后你忘了当时怎么想的,它能帮你回忆。

# 4.2 文档的定期巡检

每季度一次文档巡检:

□ 找 3 篇最常被访问的文档——确认内容仍然正确
□ 找 3 篇创建超过 6 个月但从未被打开过的文档——考虑归档或删除
□ 问问 team 新人:"入职一个月,最想吐槽文档里的什么?"

文档巡检花 1 小时,省的是团队全年找信息的时间。
1
2
3
4
5
6
7

# 4.3 过时文档的处置

过时文档三种处置:

1. 归档(Archive):移到 archive 目录,不在主搜索范围内
2. 标记过时:在顶部加一条 "⚠️ 本文档最后更新于 2023-01,可能和当前实现不一致"
3. 更新:如果还有人需要这篇文档,责任人是上次修改对应代码的人

不做的事:直接删。过时文档也是历史记录——记录了我们曾经怎么想的。
1
2
3
4
5
6
7

# 五、知识库——让信息"找得到"

# 5.1 目录结构

工程师 wiki 建议结构:

/engineering
  /architecture        → 架构决策记录(ADR)
  /services            → 每个微服务的文档(API、数据模型、部署信息)
  /oncall              → 事故复盘记录
  /howto               → 团队独有操作指南(环境搭建、发布流程等)
  /standards           → 编码规范、Review 规范、技术选型原则
  /onboarding          → 新人入职指南
1
2
3
4
5
6
7
8
9

# 5.2 搜索比分类重要

你知道信息在哪但找不到 → 分类的问题
你根本不知道这个信息存不存在 → 搜索的问题

确保可搜索:
  □ 标题要包含关键词。不是"XX 系统优化记录",是"支付系统慢查询优化记录"
  □ 文档内链接——从架构文档链到对应的 ADR,从 oncall 链到修复 PR
  □ 重要文档固定(pin)到 wiki 首页或团队频道
1
2
3
4
5
6
7

# 六、小结

文档管理的三个原则:

1. 少而精     → 不是什么都写。写最重要的那 20%,它覆盖 80% 的需要
2. 和代码同源 → API 文档自动生成;架构决策和代码仓一起存
3. 定期巡检   → 一个季度花 1 小时,保证文档"还活着"
1
2
3
4
5

行动清单:

  • [ ] 打开 wiki,找一篇你最近写的文档——里面的信息还准确吗?
  • [ ] 你们团队的 API 文档是手写的还是自动生成的?手写的话——未来三个月能改成自动吗?
  • [ ] 下一次做技术选型后,写一篇 ADR——只写"因为什么选了这个,不选的其他方案是什么"
#文档
上次更新: 2026/06/15, 14:32:53
线上事故响应流程
README

← 线上事故响应流程 README→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式