“这个需求写得够清楚了吧?客户提交订单后,系统检查库存,库存不够就拦下来。”
“文档是这么写的。可那些同步进来的历史订单,压根儿没走过扣库存这套逻辑。它们状态已经是‘已确认’了,上线后按这个规则一拦,全部发不了货。”
这段对话发生在我参与过的一次订单系统改造中,业务方、开发都没故意使坏,但双方对“订单状态到底怎么流转”的理解差了不止一层。这种场面做软件项目的朋友应该都不陌生。问题往往不在写代码那一环,而在前端的“需求获取(Elicitation)”:有没有通过访谈、问卷、观察、场景分析这类手段,把用户和利益相关者脑海里那些没说出口、说不清楚、甚至自己都没意识到的原始需求,老老实实地引出来、记下来、对上焦。这篇内容就把我从多次需求返工里总结出来的经验拆开讲,适合正被“评审会没问题、一上线就跑偏”折磨的产品经理、需求分析师、项目经理,也适合想搞清楚自己为什么总在改需求的开发同学。
1. “开发完成后才暴雷”的三类需求事故
我复盘过不少延期和返工项目,发现真正致命的往往不是技术难点,而是需求在某一环被悄悄带偏了。这类问题往往有三张脸,而且都挺会伪装的。
第一类是“规则冲突型”。不同干系人说的规则表面一致,实际各自执行各自的理解。比如财务说“报销单要先审批后付款”,听起来简单,但“审批”是走到部门负责人算完,还是必须走到财务总监?不同金额、不同费用类型又有不同路径。这类问题在需求文档里通常是写不出来的,因为写文档的人根本不知道这里藏着分叉。第二类是“隐形流程型”,真正跑通的业务流程和文档上写的流程是两回事。大家嘴上说的理想流程很顺畅,实际操作里早就绕出了一条秘密通道,而这条通道恰恰是系统上线后最容易被卡住的地方。第三类是“边界空白型”。所有干系人都默认某个规则“肯定有了”“不需要提”,结果整个需求文档里都没有覆盖,等到测试环境压测或生产环境出事才发现这条规则其实是平台运转的底线。
还有一个现象值得警惕:需求评审会上大家频频点头,开发也排期了,一到上线却吵成一团。这说明需求文档大概率是“看起来很完整”。我的经验是,需求阶段埋下的雷,延迟到开发后期才会爆,而且越晚爆处理成本越高。很多人把这个锅推给“沟通不够”,本质上是把获取、分析、规格说明和验证混成了一件事。需求工程里一般有一条链路:先做获取,再做分析,然后写规格说明,最后做验证。每步有各自的输入和产出。获取环节管的是原始需求,也就是从用户、业务方、历史系统、行业规则里弄到的那堆无结构素材;分析环节管的是把素材归类、消歧、理出优先级;规格说明把它变成可以评审的文档;验证环节则确保大家理解一致。大多数团队其实是把前两步合并成“开会聊一聊”,把第三步当成唯一的工作,验证直接扔给评审会。获取没做透,后面全都在沙滩上盖楼。
想判断自己是不是也跳过了获取,可以做一个简单自查:你的需求描述里是不是充满了“支持”“可以”“应当”这类词,却很少写“当……时候,系统在什么条件下做什么,结果是什么”?是不是评审会没人提问,但开发经常说“我按我理解先做”?是不是会议上每个业务方都没有异议,但项目经理私下总收到“这个其实不是这样”的反馈?如果一个项目命中两三条,那问题大概率就出在获取环节没有真正落地。
1.1 为什么“多沟通”解决不了这类问题
很多人遇到需求反复修改,第一反应是“我们得多开会、多对齐”。但“多沟通”是一句正确的废话。开会多了,如果没有结构化的方法,大家会把更多精力放在自说自话而不是互相理解上。沟通的有效性不取决于时长,取决于信息在传递过程中损耗了多少。我曾经做过一次粗略统计,在一段没有书面记录的电话沟通里,最后真正被执行的需求大概只占最初说出的内容的两到三成。需求获取要干的事情,不是泛泛地“多聊聊”,而是用一套方法把沟通损耗压到最低,并把剩下的内容固化成可回溯的产物。
这也是为什么我现在特别强调,获取阶段的产出物不是一份PRD,而是“业务可追溯的原始素材集”,比如分角色的访谈纪要、观察记录、场景清单、业务事件表。分析、规格说明都要能索引到这些原始素材。某个规则有疑问时,是要能翻到“这是谁、在什么场景下、基于哪笔业务说的”。没有这种追溯,需求文档就成了一张无源之水的流程图。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Elicitation不是“收集”,而是把没说出口的规则“诱”出来
Elicitation这个词源自拉丁词根,本意是“引出、诱出”。我第一次接触这个概念时,也以为它和“收集需求”没什么区别。后来被现实教育了几次才明白,两者的差别非常要命。收集(gathering)暗示需求像蘑菇一样长在那里,你提着篮子去采就行。但实际做过需求的人都知道,用户很难直接给
