工程与管理交易工程教训团队

新项目的头两天:不是写代码,是写文档

新项目的前两天,最自然的冲动是”写代码”。但这个项目的前 26 个 commit 里,20 个是文档。

不是拖延,是先把”代码应该长什么样”写清楚。


两天干了什么

06-04
  14:28  保存当前本地变更
  17:08  归档历史项目备份
  17:11  添加 gitignore
  17:26  模块地图 + 运行手册
  23:23  变更日志 + 架构决策记录(ADR)
  23:39  模块指南 × 3(swing/common/API)
  23:56  模块指南 × 2(tv/exchange)

06-05
  00:08  核心模块指南
  00:28  方向策略模块指南
  00:36  推荐模块指南
  09:29  独立推荐器 + 告警模块指南
  09:49  告警操作模块指南
  09:58  监控模块指南
  10:08  归因 + pump sniper 模块指南
  11:56  feat: dry-run 模式 ← 第一个功能代码
  12:45  部署手册
  13:05  根目录地图
  13:11  编码审计
  14:21  Harness 工程指南

26 个 commit,20 个文档,1 个功能代码(dry-run)。


为什么先写文档

这个项目有 20+ 个模块,横跨推荐、交易执行、风控、监控、告警、归因。如果上来就写代码:

  • 模块边界会在开发中反复调整
  • 新人(包括几个月后的自己)看不懂代码组织
  • 架构决策没有记录,后面改不动的时候忘了当初为什么这么设计

文档不是给产品经理看的——是给两个月后深夜排障的自己看的。


哪些文档是不可跳过的

1. 模块地图

src/
├── smart-trade-swing/  ← 波段交易核心
├── sta-common/         ← 公共库
├── sta-api3c/          ← 第三方 API 封装
├── sta-exchange/        ← 交易所 API
├── sta-tv/             ← TV 信号对接
├── smart-trade/        ← 推荐引擎
├── alert_recommend/    ← 告警推荐
├── alert_ops/          ← 告警运维
├── monitor/            ← 监控
├── attribution/        ← 归因分析
└── pump_sniper/        ← 极速抢单

每个模块一句话说清职责。模块边界不清楚 = 会把推荐逻辑写进交易引擎里。

2. 架构决策记录(ADR)

记录关键的架构选择及理由:

决策理由
交易执行不走消息队列延迟不可接受,直接 RPC
风控和策略分离策略只负责信号,风控负责准入
用 Redis 做状态存储需要重启恢复,不需要持久化历史

ADR 的价值在于:六个月后你想改架构,知道当初为什么不那么设计。

3. 运行手册(Runbook)

不是”怎么部署”,是”出问题时查什么”:

  • 策略不开仓 → 检查 Redis 里的信号状态
  • 持仓不匹配 → 检查交易所 API 的仓位快照
  • 监控报警 → 按优先级排查清单

元结构映射:广告系统的项目启动

启动广告系统时一样的流程:先写模块边界文档(检索/排序/计费/数据),再写 ADR(为什么倒排索引选这个压缩算法,为什么正排分 L1/L2/L3 三层),然后才是代码。

文档先于代码不是慢,是不给自己挖坑。


一句话

第一天写代码的人两个月后要花两天读代码。第一天写文档的人两个月后花两分钟查文档。