跳至主要內容

从需求文档到技术方案:PM 和 RD 的高效协作模式

郑天祺大约 13 分钟产品与协作项目管理

从需求文档到技术方案:PM 和 RD 的高效协作模式

前言

PM 和 RD 的关系,大概是互联网公司里最经典的"爱恨交织"。PM 觉得 RD 总是说"做不了",RD 觉得 PM 总是在"改需求"。

但真相是:PM 和 RD 不是对立面,而是同一枚硬币的两面。 PM 定义了"做什么",RD 决定了"怎么做"。两者配合得好,产品就能又快又好地上线;配合得不好,就是无尽的返工和互相甩锅。

本文从 RD(后端开发)的视角,探讨如何与 PM 高效协作,从需求文档平滑过渡到技术方案。


一、PM 和 RD 的经典协作痛点

1.1 痛点全景图

经典协作痛点:

┌───────────────┬─────────────────────┬─────────────────────┐
│   阶段         │   PM 的困惑          │   RD 的困惑          │
├───────────────┼─────────────────────┼─────────────────────┤
│ 需求评审前    │ RD 为什么总不来参加  │ 这个 PRD 我完全看不懂 │
│               │ 需求评审?           │ 要做什么             │
├───────────────┼─────────────────────┼─────────────────────┤
│ 需求评审中    │ RD 为什么总说做不了  │ PM 为什么总提一些    │
│               │ 我的需求很简单啊     │ 技术上不可行的需求   │
├───────────────┼─────────────────────┼─────────────────────┤
│ 开发过程中    │ RD 开发了两周了,    │ PM 又改需求了,       │
│               │ 什么都没给我看       │ 我已经写了一半了     │
├───────────────┼─────────────────────┼─────────────────────┤
│ 测试阶段      │ 为什么这个功能       │ 这个边界情况 PRD     │
│               │ 和我想的不一样       │ 里根本没写啊         │
├───────────────┼─────────────────────┼─────────────────────┤
│ 上线后        │ 用户反馈很多 Bug     │ 那是 PM 没考虑到的   │
│               │ RD 质量不行啊        │ 交互细节             │
└───────────────┴─────────────────────┴─────────────────────┘

1.2 根本原因分析

PM-RD 冲突的三大根源:

1. 信息不对称
   PM 不知道某些需求的技术成本有多高
   RD 不知道某些技术限制对业务的影响有多大
   → 互相觉得对方"不专业"

2. 语言不通
   PM 说的是"用户场景、转化率、留存"
   RD 说的是"接口、数据表、并发"
   → 同一件事,各自的描述完全不同

3. 目标不一致
   PM 的 KPI:功能上线速度、用户增长
   RD 的 KPI:系统稳定性、代码质量
   → 两者的目标在某些时候是冲突的

二、需求评审的最佳实践:RD 应该问什么

2.1 评审前的准备

RD 参加需求评审前的准备工作:

1. 提前阅读 PRD(至少提前半天)
   - 不要到了会议室才开始看
   - 标记不理解的地方
   - 初步评估技术可行性

2. 识别需求中的"坑"
   - 模糊的描述:"系统应该智能推荐"
   - 缺失的边界:"用户删除了怎么办?"
   - 隐含的复杂性:"这个列表支持搜索、排序、分页、导出"

2.2 评审中必问的 10 个问题

RD 的"灵魂 10 问":

关于用户和场景:
1. "这个功能给谁用的?在什么场景下用?"
   → 目的:理解上下文,评估优先级和必要性

2. "用户的期望是什么?最低可接受的体验是什么?"
   → 目的:区分"必须有"和"最好有"

关于数据和逻辑:
3. "这个列表需要分页吗?支持排序和筛选吗?"
   → 目的:评估查询复杂度和是否需要 Elasticsearch

4. "数据量有多大?每天新增多少?"
   → 目的:评估数据库设计和是否需要异步处理

5. "跨多个角色的操作如何协同?"
   → 目的:评估并发控制和状态流转

关于异常和边界:
6. "如果用户没有权限怎么办?"
   → 目的:识别权限控制的复杂度

7. "如果操作失败(网络断、超时),用户看到什么?"
   → 目的:识别异常流程和容错设计

8. "用户输入错误数据(如超长文本、特殊字符),系统怎么处理?"
   → 目的:识别输入校验和数据清洗的边界

关于非功能性需求:
9. "这个功能的用户量预估是多少?并发量呢?"
   → 目的:评估性能和伸缩性需求

10. "有上线时间硬性要求吗?能不能分阶段上线?"
    → 目的:评估开发节奏和是否需要 MVP 策略

2.3 如何说"做不了"

"做不了"的艺术:

❌ 直接说"做不了"
   "这个需求技术上做不了。"
   → PM 的感受:RD 在敷衍我

❌ 用技术术语搪塞
   "这涉及到分布式事务的 CAP 理论,在分区容错的前提下..."
   → PM 的感受:RD 在欺负我不懂技术

✅ 正确的做法:解释成本,提供替代方案
   "这个实时推荐功能需要搭建一整套推荐引擎,包括数据采集、
    特征工程、模型训练和在线服务,预计需要 2-3 个月的开发时间。
    如果我们先做一个基于简单规则的推荐(比如'买了 A 的人也买了 B'),
    2 周就能上线,先验证用户是否真的需要推荐功能。后续再逐步迭代。"

   核心公式:
   "你的需求技术上可以实现,但成本是 X。
    有没有一个更简单的方式可以先达到 80% 的效果?"

三、PRD 技术可读性:RD 视角的 PRD 优化

3.1 RD 眼中的好 PRD

好 PRD 的 7 个特征:

1. 有明确的用户故事
   格式:作为<角色>,我想要<功能>,以便<价值>
   例:"作为运营人员,我想要批量导入客户信息,
        以便在活动策划时快速圈定目标客户群。"

2. 有完整的交互流程
   - 用户操作的每一步
   - 每个步骤界面的变化
   - 用户获取反馈的方式

3. 有数据实体和关系
   - 这个功能涉及哪些业务实体
   - 它们之间是什么关系
   - 关键字段和约束

4. 有异常情况的处理
   - 网络断:给什么提示?
   - 权限不足:跳转还是提示?
   - 数据为空:展示什么?

5. 有验收标准(AC)
   - 功能做完后如何验证?
   - 什么是"完成"?

6. 有优先级标记
   - P0(必须有)/ P1(应该有)/ P2(可以有)
   - 帮助 RD 判断开发和取舍的优先级

7. 有非功能性需求
   - 性能要求(页面加载 < 2s)
   - 安全要求(权限控制粒度)
   - 兼容性要求(浏览器、移动端)

3.2 RD 如何帮助 PM 改进 PRD

建议 PM 在 PRD 中增加以下章节(RD 视角):

1. 数据字典
   ┌──────────┬────────┬────────┬──────────┐
   │ 字段      │ 类型    │ 必填    │ 说明      │
   ├──────────┼────────┼────────┼──────────┤
   │ 客户名称  │ 文本    │ 是     │ 最长50字  │
   │ 手机号    │ 数字    │ 是     │ 11位     │
   │ 备注     │ 文本    │ 否     │ 最长500字 │
   └──────────┴────────┴────────┴──────────┘

2. 状态流转图
   待审核 → 审核通过 → 已生效 → 已失效
              ↓
          审核拒绝

3. 权限矩阵
   ┌──────┬──────┬──────┬──────┐
   │ 操作  │ 管理员│ 审核员│ 普通 │
   ├──────┼──────┼──────┼──────┤
   │ 新建  │  ✓   │  ✓   │  ✗  │
   │ 审核  │  ✓   │  ✓   │  ✗  │
   │ 查看  │  ✓   │  ✓   │  ✓  │
   └──────┴──────┴──────┴──────┘

四、技术方案反哺产品:技术约束如何提前沟通

4.1 技术约束的"前置沟通"

在 PRD 评审阶段就告知 PM 技术约束:

场景 1:数据量约束
  PM:"我需要列表支持任意时间范围的查询"
  RD 在评审时提出:
  "这个查询跨了 3 个数据源,其中历史数据在冷存储。
   建议默认展示最近 90 天,更早的数据加一个'高级查询'入口,
   走异步导出。"

场景 2:实时性约束
  PM:"我需要实时看到全平台的数据大屏"
  RD 在评审时提出:
  "全平台 200+ 指标实时计算,需要的资源量很大。
   我们可以这样:Top 10 核心指标实时(延迟 < 1 秒),
   其余指标准实时(延迟 < 5 分钟),行吗?"

场景 3:一致性约束
  PM:"库存扣减不能超卖"
  RD 在评审时提出:
  "强一致性需要加锁或排队,在高并发场景下性能会下降。
   我们有两种方案:
   方案 A:强一致,但秒杀场景需要排队,用户可能等待 5-10 秒
   方案 B:用 Redis 预扣减 + 异步确认,可能出现极少量超卖(< 0.01%)但有补偿机制
   你觉得业务上能接受哪一种?"

4.2 技术方案中的"产品决策点"

技术方案中需要 PM 参与决策的事项:

1. 降级策略的产品影响
   "当缓存失效时,我们可以展示 5 分钟前的数据(加'数据可能延迟'提示),
   还是直接报错让用户重试?"

2. 分阶段上线的取舍
   "MVP 版本我们建议先支持单文件上传,批量上传放到 V2。
   你觉得从业务角度,MVP 没有批量上传能用吗?"

3. 默认值的业务含义
   "新用户的默认推荐列表,是推荐'最热门的'还是'最新的'?
   这影响推荐引擎的冷启动策略。"

4. 数据准确性和速度的权衡
   "我们可以在查询结果加一个'精确统计'按钮,
   实时计算(精确但慢)和预计算(快但可能有 5 分钟延迟),
   你觉得默认展示哪个?"

五、需求变更管理流程

5.1 变更的三种类型

需求变更分类:

类型 A:信息补充型
  "哦对了,这个字段导出的时候也要带上"
  → 前期遗漏,但主流程影响不大
  → 处理:评估成本,如果不影响核心架构,接受

类型 B:逻辑调整型
  "审批流程从两级改成三级"
  → 核心逻辑变更,但范围可控
  → 处理:评估对现有开发进度的影响,更新排期

类型 C:方向变更型
  "客户说他们想要的是另一个功能,之前那个不要了"
  → 产品方向变更
  → 处理:
    1. 停止当前开发
    2. 评估已投入成本
    3. 重新评估新方向的可行性
    4. 重新排期
    5. (重要)记录变更原因,用于后续复盘

5.2 变更管理流程

需求变更的标准流程:

1. 提出变更
   PM 填写需求变更单:
   ┌───────────────────────────────┐
   │ 需求变更单                     │
   │                               │
   │ 变更内容:XXX                  │
   │ 变更原因:XXX(业务/用户反馈) │
   │ 变更影响:影响 XXX 模块        │
   │ 变更优先级:P0/P1/P2          │
   │ 期望上线时间:XXX              │
   └───────────────────────────────┘

2. 技术评估
   RD 评估变更的:
   - 开发工作量(人天)
   - 是否影响已有功能
   - 是否需要数据迁移
   - 是否需要架构调整

3. 影响沟通
   - 本次迭代排期是否受影响
   - 是否需要砍掉其他需求
   - 是否需要通知 QA 调整测试计划

4. 决策与记录
   - Tech Lead + PM 共同决策
   - 记录变更原因和决策
   - 更新迭代计划

六、协作工具链

6.1 推荐工具组合

PM-RD 协作工具链:

需求管理:       飞书文档 / Confluence / Notion
  → PM 维护 PRD,RD 在上面评论提问

项目管理:       Jira / Linear / TAPD
  → 需求拆分、任务分配、进度跟踪

设计稿协作:     Figma / 蓝湖
  → RD 查看标注、切图、交互流程

技术文档:       xxx 内部 Wiki / GitBook
  → 技术方案、接口文档、架构文档

即时通讯:       飞书 / 企业微信 / Slack
  → 日常沟通、问题快速对齐

代码评审:       GitLab / GitHub
  → PR Review、自动化 CI/CD

API 管理:       Swagger / YApi / Apifox
  → 接口定义、Mock 数据、接口测试

6.2 协作节奏建议

PM-RD 协作节奏:

每日(Daily):
  - 站会同步进度(15 分钟)
  - PM 旁听(可选):了解开发进度和阻塞点

每周(Weekly):
  - 需求对齐会:PM 预告下周需求,RD 提前评估
  - 进度同步:本周完成了什么,下周计划做什么

每迭代(Bi-weekly/Monthly):
  - 迭代计划会:PM 讲需求背景和价值,RD 评估工作量
  - 迭代回顾会:PM 和 RD 一起复盘协作中的问题

每季度(Quarterly):
  - OKR 对齐:产品和技术目标对齐
  - 技术规划:重要的技术改造和架构升级

七、真实的 PM-RD 协作案例

7.1 案例:客户报表导出功能

需求背景:
PM 提出:运营需要导出客户分析报表,包含客户基本信息、
近 12 个月的交易数据、风险评级、活跃度评分。

协作过程:

第 1 步:需求评审(PM + RD + 运营代表)
  RD 提问:
  - "12 个月的数据是否需要实时?" → PM 确认:可以 T+1
  - "导出格式是什么?" → 运营:Excel
  - "单次导出数据量有多大?" → 最多 5 万行
  - "是否需要定时自动导出?" → PM 确认:先支持手动

  RD 反馈:
  - "12 个月全量数据实时计算会很慢,建议用 T+1 的预计算表"
  - "5 万行 Excel 导出,同步模式可能需要 30 秒以上,建议用异步导出+通知下载"

第 2 步:技术方案(RD 主导,PM 确认产品决策)
  RD 输出方案,其中需要 PM 确认的决策:
  - 导出频率限制:每小时最多 5 次(PM 确认合理)
  - 数据口径:交易数据是否包含退款订单(PM 确认:不含退款)
  - 权限控制:哪些角色可以导出全量数据(PM + 安全确认)

第 3 步:开发过程
  - RD 在第 2 天给出 API 的 Mock 数据,前端可以并行开发
  - 第 5 天,RD 发现早期设计的报表查询性能不达标
  - RD 主动找 PM 沟通:"预计算表的更新频率从每天1次
    改成每天2次,增加凌晨2点和中午12点各一次更新,
    这样导出数据最多延迟半天。可以接受吗?"
  - PM 确认可以接受

第 4 步:测试和验收
  - QA 基于 PRD 写测试用例
  - RD 和 PM 一起做功能验收
  - PM 发现导出的 Excel 缺少"合计行",RD 当天加上

第 5 步:上线和迭代
  - 上线后 2 周,PM 反馈"部分用户导出超时"
  - RD 排查:发现某几个 VIP 客户数据量远超预期
  - 优化:对超过 3 万行的导出自动走异步模式

7.2 案例复盘:为什么这次协作顺利?

成功的要素:

1. PM 提前给了 PRD,RD 在评审前已经读了
2. RD 在评审中问了关键问题(数据量、实时性、权限)
3. RD 主动反馈技术约束,给出了替代方案
4. PM 对技术约束表示了理解,愿意接受折中方案
5. 开发过程中保持沟通,遇到问题及时同步
6. 双方目标一致:让功能交付而不是互相甩锅

可以改进的:

1. PRD 中对"活跃度评分"的定义不够明确
   → 开发过程中来回确认了 3 次
   → 改进:重要计算公式应在 PRD 中明确

2. 没有提前准备测试数据
   → QA 花了一天构造数据
   → 改进:RD 提供数据工厂脚本

八、总结

8.1 PM 和 RD 协作的黄金法则

1. 早沟通
   → 需求还没定稿时,RD 就可以参与讨论
   → 不要等到评审会上才第一次看到需求

2. 说人话
   → PM 不要只说"用户想要",要说清楚场景和价值
   → RD 不要只说"技术难度大",要说清楚成本和替代方案

3. 给选项
   → RD 不要只给一个"完美方案"
   → 给 2-3 个选项,标注各自的成本和收益

4. 共担责
   → 上线后出问题,PM 不要说"RD 没做好"
   → RD 不要说"PM 需求没写清楚"
   → 一起复盘,一起改进

5. 互相学
   → RD 可以了解业务指标(GMV、DAU、转化率)
   → PM 可以了解基本技术概念(缓存、异步、降级)

8.2 一句话总结

最好的 PM-RD 关系不是"你提需求我写代码",而是"我们一起想办法把这个功能做好,让用户满意"。当两个人都站在用户的角度思考时,冲突会少很多。

上次编辑于:
贡献者: zhengtianqi