4 分钟
使用 RFC 流程管理项目
该文档处于设想阶段,并未落地实践
参考
简介
RFC 全称 (Request for Comments),征求意见。
RFC 概念最早在 互联网 标准指定领域出现。在互联网技术标准领域,RFC 是技术标准文档的代名词,业界公认的主流的互联网技术,比如 TCP/IP 都编入了 IETF 的 RFC 文档中。换句话说,想成为互联网技术方面的标准或者基础设施,都需要进入 IETF 的 RFC 文档
在开源技术领域,古老的开源项目,比如 Linux,采用的是 邮件组的 方式来进行讨论及项目管理。
较新的开源项目,会考虑使用 Github + RFC + IM/论坛 机制来实现 Feature 管理。比如 Rust、React。
关于 Github 和 mail list 参见:博客
RFC 内容
开源项目的 RFC 使用姿势
开源项目的特点
- 任何人都可以贡献代码
- 贡献者间不熟悉,来自全球各地
开源项目贡献者角色分析
- 意愿贡献者,想为开源项目贡献代码,但是还没有贡献(多数)
- 普通贡献者,偶尔为开源项目贡献代码
- 项目组核心成员,经常为项目贡献代码,同时负责开源项目管理,参与技术讨论,决策
开源项目管理的诉求
- 新人能更容易的参与到迭代中
- 核心成员对项目的迭代方向、代码质量有控制力
开源项目 RFC 的基本流程
物料准备
- rfc 仓库,用来维护所有的 rfc 文档
- rfc 仓库 PR 讨论区,作为 rfc 设计评审的讨论地点
- 项目代码库
- 项目代码库代码库的 Issue 讨论区,作为该 rfc 实现过程的讨论地点
角色(一人可能身兼数职)
- 核心项目组成员
- rfc 作者
- rfc 实现者
RFC 创建、讨论、评审流程(工作在 rfc 仓库)
- 确认如下问题
- 查看所有历史 RFC,确认待创建的 RFC 不存在或者没有被拒绝
- 该 Feature 不是 Bugfix、重构类的需求
- Fork 代码库,根据模板编写 RFC
- 提交 PR
- 初步评审,项目组核心成员对该 RFC 质量,是否有重复等问题,决定是否进入下一阶段
- 讨论阶段,相关利益相关方在此 PR 处进行讨论,作者根据讨论进行修改并 commit。讨论参与者如下
- RFC 作者
- 相关项目组核心成员
- 所有感兴趣的其他人员
- 最终动议阶段,RFC 作者 和 相关项目组核心成员认为可以进入最终动议阶段,则可以发起最终动议,公示一段时间后,没有问题,则激活 RFC。同时 该 RFC 的 PR 将合入 RFC 仓库
RFC 开发阶段(工作在 项目代码库)
- 在项目代码库创建一个 Issue 用来追踪 RFC 的实现情况
- 实现者(当然欢迎 RFC 作者作为实现者)认领该任务,进入开发阶段
商业项目管理 结合 RFC 机制
商业项目的特点
与开源项目不同,商业项目
- 研发成员相互之间在同一地点办公,彼此熟悉
- 能参与讨论的成员相对较少,核心开发一般较少
- 存在 PM 、测试 角色,分工更细,需求一般偏业务
- 迭代速度要求尽量快,代码质量要求相对迭代速度优先级低一些
流程设计
仅设想阶段
使用 RFC 管理 需求
- 参考 Rust RFC 项目管理调研 / 模板 给出 RFC 模板,该模板需要按照业务类型需求重新设计,主要包含 PRD、 技术方案、测试验收方案的内容
- 一个 RFC 一般需要三种角色
- PM
- 技术(两人)
- 测试
- RFC 文档 可以使用公司内部的 在线 Doc 平台 (需附上 IM 群) 或者 Gitlab (推荐) 中编写,使用标签或者在文章中添加状态或者使用需求管理软件管理状态,来管理 RFC 生命周期
- RFC 评审
- 评审的形式不一定是会议,可以是评论、论坛、群聊的方式
- 一般有两次:产品方案评审、技术方案评审
- 更新 RFC 的状态
- 开发阶段
- 更新 RFC 的状态,并添加一个 Issue 的链接
- 使用 Issue 管理 RFC 的实现,在描述上关联上 RFC 的链接
- Gitlab 的多个 MR 上关联上 Issue,一个技术提交必须要另外的一个技术的 Review
- 验收阶段,测试进行测试,验收阶段结束后,关闭 Issue,更新 RFC 状态,并最后校验文档和实现是否脱节
优缺点
优点
- 更标准化的管理方案文档和代码实现以及两者相互索引,提高项目质量
- 因为存在众多 RFC 文档,且 RFC 文档的讨论和 MR 或者 PR 都有管理,所以新人更容易快速进入状态,了解历史进度
- 扩大所有人对项目的 context 的了解,不至于出现人员点单,降低人员变更带来的风险
- 方案指导开发,给开发人员一种普遍的方案设计思路,提高开发人员的核心素质,培养开发人员工程师思维(做 Engineer、Developer 摆脱 coder)
缺点
- 部分程序员无法将设计和开发彻底分离,设计后置到开发阶段,也就是说该这种程序员在设计阶段的想法无法落实在开发上。这将导致
- 存在阵痛期,认为写 RFC 是浪费时间,心理上会有抵触情绪
- 产出的 RFC 和代码不符,导致 RFC 文档反而误导其他成员
- 需要要求开发者有 Owner 精神
- 一定程度降低迭代速度