PRD 评审别再各说各话:一份从 12 个金融项目里长出来的对齐清单

2019 年冬天的投产前夜,我被业务方拦在会议室里翻规则卡,第 17 张卡上发现字段解释已经和上次评审会说的不一样。那次投产延期 3 周。从那之后我把 PRD 评审当项目来管,做了 12 年 PM,整理出这份从 12 个金融项目里长出来的对齐清单:术语对齐表、规则分级、决策权分清、结论分两栏、纪要 24 小时出。
PRD 评审别再各说各话:一份从 12 个金融项目里长出来的对齐清单
投产前夜那 17 个冲突
2019 年冬天,我带的第一个核心系统改造项目要投产。
PRD 已经开了 4 次评审,业务、研发、测试都签了字。投产前两天的回归测试,业务方的资深运营陈老师把我拦在会议室里,一张一张翻规则卡,翻到第 17 张的时候她停了下来。
"这个字段的解释,和上周评审会上说的不一样。"
我拿过来一对,确实不一样。我当时心里咯噔一下。翻回去再查,最早一版 PRD 写的字段口径,到第三版评审的时候被改了一行,研发没注意,运营也没注意。但业务方的对外说明已经按第三版的口径发给了 50 多家分行。
那天的投产延期了 3 周。延期本身不复杂,复杂的是怎么把改了 3 版、开了 4 次评审、签了 4 次字的 PRD 里,漏掉的那一行捞出来。
后来我把这个案例在团队里讲过好多次。不是讲我怎么延期,是讲一个更让我后怕的事:当时的会议纪要我自己都翻不出来,因为评审开完没人出纪要。
这件事之后,我开始把 PRD 评审当项目来管。这套做法陪着我和团队走过了后面 11 个项目,从核心系统到外围系统,从监管报送项目到内部数据治理项目。下面这套清单就是从这些项目里长出来的。
金融项目的 PRD 评审为什么特别难
金融项目的 PRD 评审,参会的人比互联网项目多一层。
常规三方是产品、研发、测试。金融项目里业务方的角色拆得更细,至少有业务经办、业务复核、合规审查这三层,有时候还要拉上运营和分行的人。每多一层,对齐的难度不是加法,是几何级数。
业务规则和合规规则的耦合也是。互联网产品改一个字段,影响的是用户体验。金融产品改一个字段,影响的是对外报送口径、对账逻辑、监管报表。一条改动从 PRD 走到上线,背后可能挂着 6 张表和 2 份监管文件。
第三个特点是投产窗口很贵。互联网产品可以灰度,金融产品不能随便灰度,要灰度就得在小范围试点,对监管报送口径的影响还得提前演练。很多项目一年只有 3 到 4 个窗口能用,错过了就要等下个季度。
这三个特点叠在一起,PRD 评审一旦漏掉一个点,后面的返工成本比别的项目高一两个量级。
三方各说各话的三个根因
我后来把几次翻车的情况拆开看,发现 PRD 评审各说各话的根因基本就三类。
第一类是术语不一致。业务说"金额",研发理解的可能是账户余额,测试理解的可能是交易金额。同一份 PRD 里,"金额"出现过 30 多次,每次指向的字段不一样。这种不一致不是 PRD 没写清楚,是业务和技术的视角不一样,不主动对齐就一定会漏。
第二类是优先级标准不统一。业务方觉得重要的,研发排不上;研发觉得重要的,业务方觉得不影响核心。会议上吵的是谁的需求更重要,背后其实是优先级标准没对齐。常见的现象是会上"达成共识",会后才发现各方对"重要"的定义差了一个维度。
第三类是决策权没分清。一个字段的取值范围,业务说可以放宽,研发说不能动,合规说必须按监管文件来。这时候谁能拍板?很多人以为是我这个 PM,其实不是。PM 能做的是把分歧摆到桌面上,让有决策权的人拍板。如果决策权没在评审前分清,评审就是讨论会,不是决策会。
五条对齐规则
针对这三个根因,我后来固定下来五条规则。每条都是从具体翻车里长出来的。
规则一:评审前先发术语对齐表
评审会议开始前 24 小时,先发一份术语对齐表。表格里每个术语的"业务口径"和"技术口径"分开写。
业务口径写业务方的标准说法,技术口径写对应到数据库里的字段名和取值范围。两边对不上的,评审时单独讨论;对得上的,评审时不用再解释。
这条规则的好处是会上不用再花时间对齐"我们说的是同一件事吗"。会前的术语表把这件事做完了,评审会上直接讨论"业务口径对不对"。
我从第二个项目开始用这个方法,到现在已经积累了 200 多张财务表格。每张表背后都是一个具体业务到某个具体字段的对齐记录。
术语对齐表还有一个隐性收益,是把"业务术语"和"技术术语"的翻译权归到了 PM 端。研发不再替业务方翻译字段名,业务方也不再替研发解释业务流程。翻译集中化以后,新人入职靠这一张表能快速摸清领域全貌,比读 5 份 PRD 文档管用得多。
规则二:规则分级而不是规则平铺
PRD 里的规则不要平铺成一条一条的列表,要分级。一级规则是必须遵守的,改动要重新评审。二级规则是参考的,改动可以快速决定。三级规则是历史遗留,可以接受不一致。
分级的依据也提前定好。一级规则通常是合规要求、监管报送口径、对外协议承诺。二级通常是业务运营规则、跨业务算法策略。三级一般是边缘场景、异常分支。
我吃过亏的项目是反过来做的:把所有规则列在一起,按出现顺序讨论。结果一条边缘场景的规则被业务方挡住了,挡住了整整两天的会议,最后发现这是个三级规则,本可以快速过。
规则三:决策权在评审前分清
评审会开始前,让三方各自明确谁有决策权。
业务方的决策权按业务条线分,对公、对私、零售的决策人不一样。合规的决策权通常集中在一个部门,研发决策权按模块分。每个议题,主持人要在会议开始时明确"这个议题的决策人是 XX"。
如果决策权没分清,PM 会被迫变成决策者。PM 一旦替决策人拍板,后面出问题没人接得住。
我在第 4 个项目里犯过这个错。我替业务方拍了一个关于我所属组算法的决定,结果上线后业务方不认账。最后我背了锅,研发觉得委屈,下个版本大家配合就出问题了。
规则四:评审结论分两栏
评审结论不要写"通过"或者"达成共识"。要分两栏:确认栏和待澄清栏。
确认栏里写"已确认"的决定,附上决策人和决策时间。待澄清栏里写"待澄清"的事项清单,每条带负责人和澄清时限。
两栏的好处是会后跟踪有抓手。待澄清栏的事不在下次评审前清掉,就不算这个评审闭环。
我以前的做法是写"达成共识",会后两小时业务方打电话来问"我们真的确认了吗"。分两栏之后,这种电话几乎没有了。
待澄清栏我后来又加了一个细节:每条待澄清都要写"为什么会变成待澄清"。这个看起来啰嗦,但其实很关键。下次会议一上来,先过上次待澄清的原因,避免变成"待澄清升级"。一个项目跑下来,待澄清栏里会积累十几条,每条背后都有具体的故事,团队复盘时翻这一栏比翻会议纪要管用。
规则五:会议纪要 24 小时内出
评审会议结束后 24 小时内,会议纪要必须发出来,并且按上面那个两栏原则写。
纪要电子版是高优先级事项,不是"有空再写"。我后来让团队把这条写进评审的 SOP,纪要不发,下次评审不开。
写纪要有个细节,要写"谁说了什么",不要写"会议决定什么"。写"会议决定"听起来权威,但会后容易扯皮;写"谁说了什么"是事实记录,扯皮起来有依据。
一份能用的评审清单生成器
上面的五条里,前两条和第四条是可以用工具落地的。下面是一份我用的评审清单生成器,从 PRD 文档里提取评审项,按上面的规则分级。
# prd_review_checklist.py
"""
从 PRD 文档里抽出评审项,按业务 / 合规 / 技术三类打标,按一二三级规则分级。
"""
import re
from dataclasses import dataclass, field
from datetime import datetime, timezone
@dataclass
class ReviewItem:
rule_id: str # R-001
title: str # 标题
description: str # 一句话说明
category: str = "" # business / compliance / tech
level: int = 0 # 1 必须 2 参考 3 遗留
decision: str = "" # confirmed / pending
decider: str = ""
due_at: str = ""
notes: str = ""
KEYWORDS = {
"compliance": ["合规", "监管", "报送", "人行", "银保监", "等保", "反洗钱"],
"tech": ["接口", "字段", "数据库", "缓存", "异步", "幂等", "超时"],
"business": ["业务", "运营", "客户", "账户", "交易", "额度", "利率"],
}
LEVEL_RULES = [
(1, ["监管", "报送", "合规", "对外", "协议", "承诺"]),
(2, ["运营", "算法", "策略", "流程", "规则"]),
(3, ["边缘", "异常", "历史", "遗留", "极少"]),
]
def detect_category(text: str) -> str:
hits = {k: sum(text.count(w) for w in ws) for k, ws in KEYWORDS.items()}
if not any(hits.values()):
return "business"
return max(hits, key=hits.get)
def detect_level(text: str) -> int:
for lv, words in LEVEL_RULES:
if any(w in text for w in words):
return lv
return 2
def parse_prd(path: str) -> list[ReviewItem]:
items: list[ReviewItem] = []
pat = re.compile(r"^(?:### |## )(?:规则|规则描述|业务规则)[::]\s*(.+)")
counter = 1
for line in open(path, encoding="utf-8"):
m = pat.match(line.strip())
if not m:
continue
title = m.group(1).strip()
cat = detect_category(title)
lv = detect_level(title)
items.append(ReviewItem(
rule_id=f"R-{counter:03d}",
title=title,
description="",
category=cat,
level=lv,
))
counter += 1
return items
def to_markdown(items: list[ReviewItem]) -> str:
out = ["# PRD 评审清单", ""]
out.append(f"生成于 {datetime.now(timezone.utc).isoformat()}")
out.append("")
out.append("## 待澄清")
out.append("")
for it in items:
if it.decision == "confirmed":
continue
tag = {1: "🔴", 2: "🟡", 3: "🟢"}.get(it.level, "⚪")
out.append(f"- {tag} [{it.rule_id}] {it.title} ({it.category}, L{it.level})")
out.append("")
out.append("## 已确认")
out.append("")
for it in items:
if it.decision != "confirmed":
continue
out.append(f"- ✅ [{it.rule_id}] {it.title} | 决策: {it.decider} | 时间: {it.due_at}")
return "\n".join(out)
if __name__ == "__main__":
import sys
items = parse_prd(sys.argv[1] if len(sys.argv) > 1 else "PRD.md")
print(to_markdown(items))代码不长,三件事:从 PRD 里抽出规则、按关键词打类别、按关键词定级别,最后输出一个分两栏的 Markdown 清单。
抽规则这一步是简化过的,真实场景里我会用一个 NLP 模型来识别"规则"句子,但关键词方案在我用过的项目里已经够 90% 的场景。
emoji 那几行是给清单的可视化用的。一级规则的红圆点、三级规则的绿点,会上扫一眼就能看出来。
边界:这套不灵的时候
这套做法不是万能的,下面三种情况开评审会时要换打法。
第一种是业务紧急、不能走完整流程的时候。监管发文要求一周内改完,这种项目走不了完整评审,只能开业务讨论会 + 技术快速评审 + 合规并行审查。这种情况我通常会把"会议纪要 24 小时出"改成"会议纪要 2 小时出",把"评审清单生成器"改成手写清单。但其他几条还是要遵守的。
第二种是跨部门利益冲突大的时候。比如业务部门之间对某个字段的归属有分歧,技术评审会上根本拍不下来。这种情况下评审会要降到"摆事实"会议,把分歧和事实摆清楚,决策权交给更高一级的委员会。PM 在这种项目里的角色是协调,不是主导。
第三种是新合规要求上线的时候。新合规要求通常带监管文件原文,规则很明确,但业务理解会有偏差。这种项目我会让合规审查人在评审会上先讲一遍监管原文,业务和技术再问。不要让业务和技术自己读监管文件自己解读,解读错了不认账。
三种情况之外,剩下 90% 的金融项目,套这套清单都跑得起来。
现在 PRD 评审会上都在问什么
我后来观察到一个有意思的现象。
用了这套清单之后,PRD 评审会上问的问题变了。会前是"这个字段什么意思"、"这条规则谁拍板"、"这个边界谁来确认"。会后问的是"这个字段的解释和上次评审一致吗"、"这条规则的优先级按哪一档算"、"这个分歧的决策人确定了吗"。
问的问题变具体了,会的效率就上来了。我管过的第 11 个项目,PRD 评审 2 个小时开完,会后出纪要 4 个小时,对齐的事情比前 5 个项目加起来还多。
这套清单看起来不复杂,跑起来需要纪律。纪律比清单重要。
我后来把团队培训分成两步。第一步是讲这套清单,让所有人知道为什么这么做。第二步是陪他们开一次会的,当场复盘哪里没按清单做。第三步之后,团队自己就能跑了。
我写这篇文章不是为了讲一套新方法,是为了把我在金融项目里踩过的 12 个项目的坑整理出来。里面大部分坑,业务方、研发、测试都各自有自己的一套应对办法,但 PM 端没有把这些整合起来。
我做了 12 年 PM,这套做法陪我走过了 12 个项目。下一篇文章会讲金融项目投产窗口管理,那是另外一套清单。