“这个需求写得够清楚了吧?客户提交订单后,系统检查库存,库存不够就拦下来。”
“文档是这么写的。可那些同步进来的历史订单,压根儿没走过扣库存这套逻辑。它们状态已经是‘已确认’了,上线后按这个规则一拦,全部发不了货。”
这段对话发生在我参与过的一次订单系统改造中,业务方、开发都没故意使坏,但双方对“订单状态到底怎么流转”的理解差了不止一层。这种场面做软件项目的朋友应该都不陌生。问题往往不在写代码那一环,而在前端的“需求获取(Elicitation)”:有没有通过访谈、问卷、观察、场景分析这类手段,把用户和利益相关者脑海里那些没说出口、说不清楚、甚至自己都没意识到的原始需求,老老实实地引出来、记下来、对上焦。这篇内容就把我从多次需求返工里总结出来的经验拆开讲,适合正被“评审会没问题、一上线就跑偏”折磨的产品经理、需求分析师、项目经理,也适合想搞清楚自己为什么总在改需求的开发同学。
1. “开发完成后才暴雷”的三类需求事故
我复盘过不少延期和返工项目,发现真正致命的往往不是技术难点,而是需求在某一环被悄悄带偏了。这类问题往往有三张脸,而且都挺会伪装的。
第一类是“规则冲突型”。不同干系人说的规则表面一致,实际各自执行各自的理解。比如财务说“报销单要先审批后付款”,听起来简单,但“审批”是走到部门负责人算完,还是必须走到财务总监?不同金额、不同费用类型又有不同路径。这类问题在需求文档里通常是写不出来的,因为写文档的人根本不知道这里藏着分叉。第二类是“隐形流程型”,真正跑通的业务流程和文档上写的流程是两回事。大家嘴上说的理想流程很顺畅,实际操作里早就绕出了一条秘密通道,而这条通道恰恰是系统上线后最容易被卡住的地方。第三类是“边界空白型”。所有干系人都默认某个规则“肯定有了”“不需要提”,结果整个需求文档里都没有覆盖,等到测试环境压测或生产环境出事才发现这条规则其实是平台运转的底线。
还有一个现象值得警惕:需求评审会上大家频频点头,开发也排期了,一到上线却吵成一团。这说明需求文档大概率是“看起来很完整”。我的经验是,需求阶段埋下的雷,延迟到开发后期才会爆,而且越晚爆处理成本越高。很多人把这个锅推给“沟通不够”,本质上是把获取、分析、规格说明和验证混成了一件事。需求工程里一般有一条链路:先做获取,再做分析,然后写规格说明,最后做验证。每步有各自的输入和产出。获取环节管的是原始需求,也就是从用户、业务方、历史系统、行业规则里弄到的那堆无结构素材;分析环节管的是把素材归类、消歧、理出优先级;规格说明把它变成可以评审的文档;验证环节则确保大家理解一致。大多数团队其实是把前两步合并成“开会聊一聊”,把第三步当成唯一的工作,验证直接扔给评审会。获取没做透,后面全都在沙滩上盖楼。
想判断自己是不是也跳过了获取,可以做一个简单自查:你的需求描述里是不是充满了“支持”“可以”“应当”这类词,却很少写“当……时候,系统在什么条件下做什么,结果是什么”?是不是评审会没人提问,但开发经常说“我按我理解先做”?是不是会议上每个业务方都没有异议,但项目经理私下总收到“这个其实不是这样”的反馈?如果一个项目命中两三条,那问题大概率就出在获取环节没有真正落地。
1.1 为什么“多沟通”解决不了这类问题
很多人遇到需求反复修改,第一反应是“我们得多开会、多对齐”。但“多沟通”是一句正确的废话。开会多了,如果没有结构化的方法,大家会把更多精力放在自说自话而不是互相理解上。沟通的有效性不取决于时长,取决于信息在传递过程中损耗了多少。我曾经做过一次粗略统计,在一段没有书面记录的电话沟通里,最后真正被执行的需求大概只占最初说出的内容的两到三成。需求获取要干的事情,不是泛泛地“多聊聊”,而是用一套方法把沟通损耗压到最低,并把剩下的内容固化成可回溯的产物。
这也是为什么我现在特别强调,获取阶段的产出物不是一份PRD,而是“业务可追溯的原始素材集”,比如分角色的访谈纪要、观察记录、场景清单、业务事件表。分析、规格说明都要能索引到这些原始素材。某个规则有疑问时,是要能翻到“这是谁、在什么场景下、基于哪笔业务说的”。没有这种追溯,需求文档就成了一张无源之水的流程图。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Elicitation不是“收集”,而是把没说出口的规则“诱”出来
Elicitation这个词源自拉丁词根,本意是“引出、诱出”。我第一次接触这个概念时,也以为它和“收集需求”没什么区别。后来被现实教育了几次才明白,两者的差别非常要命。收集(gathering)暗示需求像蘑菇一样长在那里,你提着篮子去采就行。但实际做过需求的人都知道,用户很难直接给你一颗完整的蘑菇。更常见的情况是:对方认真地回答了你所有问题,你也认真地记了笔记,回去一整理,发现里面到处是断点、矛盾和自我假设。
真实世界的困难在于,用户的业务知识大部分是内隐的。举个我自己的例子:访谈一位每月做关账的财务主管时,她能顺畅地讲出“核对凭证、结转损益、出具报表”三个大步骤。但我去现场看她操作,发现她还会做一堆不会主动说的小动作,比如先导出一张临时表核对科目余额,在某些异常科目上手工做调整,再重新计算一遍。这些动作对她来说已经是肌肉记忆,她根本不会特意告诉来访者。如果我只是坐在会议室里问“你每个月关账都做什么”,我很可能只会得到一份正确的、却残缺的流程。
知识一旦被打磨成熟练技能,就会从人的显意识里消失。这不怪用户。需求分析师的活儿,是要用提问、观察、场景模拟等手段,把那些已经自动化、默认化、甚至被选择性遗忘的知识重新挖出来。这也解释了为什么获取的技术需要组合拳:访谈调用的是人的陈述记忆,现场观察调用的是真实行为,场景分析调用的则是目标驱动的推演。三种通道能获取到的信息不完全一样,交叉之后才能减少盲区。
2.1 信息链路上的漏斗损耗
为什么需求会越传越少?这里有一个很经典的漏斗现象。一个人脑子里的完整信息假设是100%,当他开口说的时候,会因为表达习惯、上下文预设、对听众判断等各种原因,只说出其中一部分;听众那端,又会因为背景知识不同、注意力有限、理解偏差,只吸收一部分;再经过记笔记、转述、写文档,还会有信息丢失。如果这个过程不加以控制,最终能达到开发人员手里的可能只有最初信息量的很小一部分。这不是数学结论,但对我的警示足够大:任何一次只靠口头、只在当场确认的需求沟通,都不值得信任。
所以我在做需求获取时,几乎强迫自己遵守一组规则:信息要当场复述确认,记录要区分“原始陈述”和“我的理解”,重要结论要在24小时内形成书面纪要并发送给对象确认。这看起来笨重,却能挡住绝大多数漏斗损耗。你不需要什么高深的技巧,只要在每次访谈结束前,把对方说的关键点用自己的话复述一遍,问“我理解得对吗”,就能拦截掉大量失真。
2.2 “收集思维”和“引出思维”会导向两种行为方式
如果你抱着“收集”的心态,你会很自然地按清单逐项追问,把用户当数据库,一条条检索。这种方式的产出,基本只能覆盖对方已经意识到的、已经在做的流程。但如果你是抱着“引出”的心态,你会更关注如何设计对话结构,给对方一个安全、放松、愿意暴露真实工作习惯的环境,也会更愿意追问那些听起来矛盾的说法,而不是急着把矛盾圆过去。
举一个很典型的小现象。用户说“一般我们收到退货后,会先检查再入库”。如果你的目标只是收集,你可能会写下“退货流程:检查后入库”。但如果你的目标是引出,你会追问一句:“有没有检查不通过的情况?那时候你怎么处理?会不会先放一边等供应商确认?”这一问,往往就能挖出一整条异常处理分支,比如“暂存区”“待确认退货单”“供应商超时未处理自动报废”等。这些分支才是真正容易让开发头疼的地方,也是上线后用户觉得“系统不好用”的核心原因。获取阶段的任务,不是把主干流程画完就收工,而是把主干旁边那些小径、岔路、断头路都探出来。
3. 工具箱拆解:访谈追问、问卷验证、现场观察与场景推演
标题里提到的访谈、问卷、观察、场景分析,不是四项并列的招数,它们各自能解决的问题和适用范围差异很大。我在不同项目里会像配药一样组合它们,但每种工具都必须按正确的方式使,否则效果会大打折扣。
3.1 访谈里最值钱的动作:把问题从“要什么功能”换成“最近一次怎么做的”
访谈几乎是需求获取的标配,但大多数访谈低效,问题出在提问方式上。常见错误是问“你希望系统支持什么功能”“你觉得这个功能重要吗”,这等于让用户在脑子里凭空造一个并不存在的系统,他只能凭想象给你编一份愿望清单,而且大概率会和实际工作脱节。更可靠的方式,是围绕真实发生过的事件问。我会准备一份半结构化的提纲,提纲里不是“审批流程是什么样”这种抽象问题,而是一组事件探查:“请讲一次最近一笔金额超过10万的合同审批过程,从合同进来开始,一步一步走到最后付款。”“中间有没有卡住?卡在哪里?当时你怎么处理的?”
按事件走的好处是,用户不需要调动抽象总结能力,只需要回忆。记忆虽然也有重构,但比凭空发明更接近事实。同理,想了解异常规则,就问“最近一次最让你头疼的订单是什么情况”;想了解系统瓶颈,就问“上次系统特别慢或特别难用,是在做什么操作的时候”。这个方法我称之为“极端事件提问法”,它几乎总能撬开用户嘴里那些平时不会讲的细节。访谈过程中还要注意区分对方的“规范陈述”和“事实陈述”。当用户说“我们应该是先审后付”的时候,要追问“那上个月那笔例外付款是怎么回事”。“应该”这个词是红灯,它后面通常跟的是理想,不是事实。
访谈记录也有一点讲究。我习惯用双栏记录:左边原话栏,记录用户原话或尽量接近原话的表达;右边解读栏,写我自己的理解和追问问题。这样做的好处是,后续写需求条文时如果产生歧义,可以随时回看原话,确认自己是否过度解读。很多人访谈时就开始整理流程,结果一句话经过两轮转述后已经面目全非。不要让原始语料过早被加工。
访谈对象的选择同样不能省。除了流程负责人和审批者,我一定会约一线执行者,以及客服、售后这类负责收尾和处理例外的角色。真正知道系统哪里会卡死的人,往往是每天被迫用笨办法绕路的人。客服通常能给你列出一堆“系统做不了、所以我们只能人工处理”的清单,这些就是天然的改进项。
3.2 问卷的定位:验证已知假设,而不是发现新需求
问卷是四种方法里最容易被误用的。很多人项目刚启动就发问卷,想靠它搞清楚用户需要什么,结果回收率惨淡、开放题没人写、选项覆盖不全,最后只得到一堆说服不了任何人的百分比。问卷本质上是一个“验证已有认知”的工具,不是“探索未知”的工具。你只有先通过访谈或场景分析形成了初步假设,比如“客服最关心的是查找历史工单的速度,而不是打字效率”,才能用问卷在更大样本里验证这个假设成立的比例到底有多高,以及不同角色之间有没有显著差异。
设计问卷时有一个容易被忽略的原则:多用事实题,少用态度题,更别问未来。问“过去半年你遇到过几次因找不到历史工单而重复沟通的情况”,远比问“你是否希望系统能更快搜索历史工单”更有效。前者采集的是真实行为频率,后者采集的是人人都想选“是”的社会期许答案。问卷回收率也是个硬指标,经验来看,内部工具类系统的问卷若没有上级署名支持,回收率很容易低于30%,样本偏差大到没法用。所以,发问卷前最好先争取到项目发起人的背书,或者把问卷嵌入某个业务会议中当场填写。题量控制在15题以内,开放题最多放一题,其余都用可量化的单选、多选、排序题。低于这个门槛的数据,我一般只作为方向性参考,不会拿来做优先级排序依据。
3.3 观察与工作跟随:把“想象中的流程”和“实际跑的流程”对上
看用户做一遍,胜过听他讲三遍。观察法的名字听起来像人类学研究,但在需求获取里的核心目标很朴素:找出用户口中流程和真实操作流程之间的差异。有一类知识,用户即使想讲也讲不出来,因为他已经习惯了现有系统的缺陷,甚至把绕过缺陷的土办法当成了流程的一部分。
我在一个仓储项目里就吃过亏。和仓库主管访谈时,对方把收货流程讲得行云流水:扫码、核对、质检、上架。等我实际在收货口蹲了半天,才发现质检不合格的货会先堆在一个临时铁架上,等供应商业务员下午来现场确认后才能退。那个铁架是流程里非常重要的缓冲环节,但没有任何文档记录它。为什么?因为“等供应商确认”不属于仓库主管的职责范围,他也不会觉得这是一条需要交代给外部顾问的“规则”。只有坐在铁架旁边数了一个下午,才能看见。
做工作跟随观察时,有几点实操建议。第一,观察前要和被观察者说明白,你看的是“系统与流程的交互”,不是在看人干活好坏,避免对方紧张后刻意按SOP走。第二,尽量挑选不同时段、不同操作者,比如新手和老手做同一件事的方式差异,能暴露不少系统易用性问题。第三,现场不要急着打断问问题,先记下动作和页面跳转,等对方告一段落再统一追问。如果每步都打断,对方会从自然状态切换回“被访谈状态”,观察效果就打折了。
3.4 场景分析:让整个需求讨论围绕一件完整业务事件展开
场景分析是把我前面提到的所有碎片最终组装起来的关键方法。它的思路很简单:不按功能模块拆需求,而是按一个角色要达成的一个目标,构建一段完整的故事来讨论。比如“客服处理一起客户投诉”就是一个场景,它会横跨订单、物流、CRM、工单等多个模块;而“工单系统应该支持查询历史记录”只是这个场景里的一个需求点。按场景拆,大家讨论的是完整业务事件,不会丢失跨模块的上下文。
落地时我常用“业务事件-系统响应”法。先列出这个业务域里会发生的所有关键事件,比如“客户提交订单”“仓库缺货被客户投诉”“财务月底关账”。每选出一个事件,就沿着事件发生的顺序逐步追问:事件什么时候发生?由谁触发?系统收到事件后第一步该做什么?需要哪些数据?哪些数据现在系统里根本没有?处理过程中可能出现哪些分支?完成后要通知谁?这样顺下来,你就会得到带流程编号的步骤清单和一份未覆盖项清单。
做场景分析时常见的误区是试图一次把所有场景推完。我的习惯是先挑核心价值流(能直接产生钱或直接影响客户体验的流程)做深,再逐步扩展支撑流程,比如对账、审计、权限申请。每个场景完成后,需要和业务方走查一遍:“如果某个步骤不是这样,而是那样,会发生什么?”这一步通常会逼出大量深层规则,也比直接问“这里还有什么要求”高效得多。
3.5 四种工具的配合顺序与交叉验证策略
四种工具单独存在时都有明显的盲区,一旦组合使用,效果会发生质变。我经常采用的顺序是:先做少量的初步访谈和文档调研,形成业务地图草稿;然后用场景分析把核心事件拆开;接着用问卷验证关键假设的普遍性;最后用现场观察去校正那些“口述流程”和“真实流程”的偏差。访谈负责广度,场景分析负责深度,问卷负责权重,观察负责真相。前面三种方法得到的结论如果有冲突,以观察为准。因为人可以讲错、记错、粉饰,但操作行为不会撒谎。
有一次为某公司的售后流程做需求梳理时,访谈阶段几乎所有客服都说“我们最缺的是自动回复功能”。但问卷数据显示,客服 70% 以上的工作时间消耗在“从多个系统里翻找历史订单”上,自动回复反而只占很小比例。后来工作跟随观察又发现,客服人员平均每单要切换4个系统,信息散落严重。如果当时只听访谈结论,可能就做成一个自动回复机器人,但真实痛点却是数据打通和统一检索。这个案例我记了很多年。交叉验证不是流程上的形式主义,它能帮你避开需求优先级上的系统性偏差。
4. 三个真实项目里反复出现的需求失真根源
工具用得再熟练,如果没意识到某些隐藏的失真机制,获取结果仍然会悄悄跑偏。我这里整理三个最隐蔽、最常被忽略的失真来源,每一个都是我在真实项目里交过学费的地方。
4.1 权力关系制造“沉默式同意”
会议室是个危险的地方。当部门负责人、项目出资人坐在同一条长桌上,基层执行者通常不会站出来说“你刚才说的流程我们其实不走,太难用了”。哪怕你明确地鼓励大家提意见,得到的也往往是点头和沉默。这种沉默不是认同,而是自我保护。打破这种局面的方法,不是喊口号让大家畅所欲言,而是改变信息采集的场合。我的做法是:核心风险问题尽量约一对一的单独访谈;必要时采用匿名问卷收集敏感反馈;在访谈开场就说明“不同角色的视角不一致是正常的,你的反馈越真实,系统才越不会给团队添麻烦”。当然,也要尊重对方意愿,不能做出超出自己权限的保护承诺。另一个小技巧是分开访谈后做交叉比对,同一个流程问三个人,你就会发现一致性程度其实很低,这正是需要继续追问的地方。
4.2 所有人都在讲“正确流程”,没人主动讲异常分支
用户接受访谈时,会本能地讲“规范流程”:我们入库前一定先质检、我们付款前一定要审批。这既是给外部人的标准答案,也是他们希望系统遵循的理想状态。但真实业务的复杂度,恰恰藏在那些“特殊情况”里——质检不合格怎么处理?审批人刚好出差怎么办?客户坚持要线下付款怎么办?没有哪家公司愿意在需求文档里主动写自己管理不够规范,所以这些特殊情况要靠提问者去撬。
遇到这种场面,我会刻意打断用户对“正常流程”的流畅描述,插入极端事件问题:“你工作中最讨厌的订单是哪一种?”“最近有没有一笔单子在你手里卡了好几天?”异常往往会让工作流出现绕过系统的土办法,而这些土办法通常连他们自己都不觉得是正式流程。还有一个非常好用的提法:“如果把这个系统做出来后,你第一天上班最怕哪个环节不能用?为什么?”这个问题能快速把一个用户从“规范叙事”拉回“真实痛点”。
4.3 确认环节没有闭环,导致“虚假共识”遍地都是
需求确认是整个获取流程里最容易被走形式的环节。常见的做法是:会开完了,把会议纪要发到群里,附带一句“大家有意见请回复”,然后静默一天就算确认了。结果上线后业务方说“当时我没看仔细”“我以为你们的意思是另一种”。这种“虚假共识”比没有共识还要危险,因为它让所有人产生了“需求已经确认了”的错觉,等到问题暴雷时,却找不到任何一条可追责的确认记录。
有效确认必须具备可验证性。我给每一个待确认的需求条目配了“验收场景”,确认会上不让人泛泛地看文档,而是针对关键条目逐条讲:“这条我理解成,当合同状态为‘已审批’时,系统不允许再退回修改,并提示要新建变更单。你们实际业务是这样吗?”对方只有两种回答:符合,或不符合。如果对方想含糊地带过去,就继续追问清楚需要改哪儿。每次确认后,参会人员的名单、确认结论、仍然分歧的要点都写进文档,并明确下一轮确认时间。这个流程看起来有点繁琐,但能省掉开发后期大量的解释和争论。
5. 一套可落地的需求获取流程:从干系人地图到信息饱和
前面讲了理念和工具,最后这部分给出一套可以直接上手执行的流程模板。它不是标准答案,但适用于大部分中大型企业内部系统、业务系统改造类项目。你可以按团队规模裁剪,不过核心顺序不建议乱动。
5.1 起点:先画干系人地图,再写访谈提纲
接受任何一个需求任务时,不要急着开会问需求,先用半天到一天时间画一张干系人地图。地图不复杂,只要有四列:角色类型、主要职责、对本项目的影响、必须问清的核心问题。常见角色包括流程所有者(决定流程怎么设计的人)、审批者、一线执行者、上游数据提供方、下游数据接收方、例外处理者(客服、售后)、系统接口对接方。记住,一线执行者和例外处理者在干系人地图里的权重要抬高,因为他们的反馈通常最能反映系统真实运行状态。地图画完后,访谈提纲要按角色分别定制,避免所有角色被问同一套泛泛的问题。例如对流程所有者,可以问“你希望新系统解决什么管理问题”;对一线执行者,则更倾向于“你现在一周最烦做什么,为什么”。
5.2 每场调研都要沉淀四类资产,而不是一份纪要
获取工作的产出不只是会议纪要,我习惯按四类资产沉淀:原始语料、需求卡片、业务事件表、疑问清单。原始语料就是对访谈原话、观察记录的保留;需求卡片是把原始语料里提取出来的单一需求点写成的一句话描述,每条卡片都记录编号、来源用户、来源场景、业务规则、验收条件;业务事件表则是把所有需要覆盖的场景按事件列全,标准是“该业务域里每一件会触发系统动作的事都被收录”;疑问清单则记下所有尚未确认的空白和冲突,挂在项目墙上逐项销号。
需求卡片的格式值得再强调一下,它是需求获取和分析阶段的桥梁。写的时候不要写“支持库存查询”这种泛泛的话,而要写“仓管员在收货时,扫商品条码后系统展示该商品在库数量、可用数量和锁定数量,用于判断是否需要走采购补货”。每张卡片尽量只描述一个行为,且能对应到一个人、一个触发条件和一个业务结果。这样到了规格说明阶段,写需求文档时压力会小很多,因为所有原始依据都已经摆在眼前。
5.3 从“用户原话”到“可验证需求”的转换方法
很多初学者在获取阶段收集了一堆素材,却不知道怎么变成可开发的需求。这里给一个通用的拆解模板,以用户原话“退货以后钱不能马上退,得等仓库确认收到货了,财务才能走退款,最好还要通知一下客户”为例:
先把角色拆出来:退货处理员、仓管员、财务、客户。再拆触发事件:客户发起退货;接着是主流程的步骤:客服登记退货单、仓管员收到货并质检、系统通知财务、财务发起退款、系统通知客户。每一个步骤都能独立问一句话:这一步由哪个系统做?需要哪些数据?没有这些数据怎么办?失败时要不要通知人?这样拆完后,原先模糊的“退货后退款”会变成一组带前置条件、后置条件、异常分支的需求条目。
这是获取与分析衔接的关键一步。获取阶段收集的用户原话往往是叙述式的,而需求条目需要的是“条件-动作-结果”式结构。不建议在访谈现场直接做这个转换,因为现场信息密度大,很容易漏拿;最好在访谈结束后当天完成。做转换时如果发现某个分支缺少信息,立刻记入疑问清单,并通过后续电话或补访解决。
5.4 停止标志:什么时候算获取完成
获取阶段最让人困惑的问题就是“到底要进行到什么时候”。项目总有时限,不可能无限访谈下去。我的经验是设定一组“信息饱和”标志:连续新增的两三轮访谈中没有再出现新的业务事件、新的规则分支或新的干系人;所有已识别的核心业务事件都能从开始到结束完整走通,没有悬挂的未知流程;每条需求卡片都能追溯到自己对应的原始素材;对关键规则,相关干系人已经做过明确的逐条确认。只要同时满足这四个条件,获取工作就可以告一段落,进入分析和规格说明阶段。如果项目时间特别紧,至少要保证第一条和第三条,否则后面八成会出现需求反复。
另外想提醒一句数据字典问题:同一个词在不同角色嘴里可能代表完全不同的东西。“客户”对销售来说是下单的人,对财务来说是付款方,对客服来说是开票抬头。如果获取阶段没有建立一张共享的业务术语表,规格说明阶段的文字游戏会耗掉你大量时间。术语表不复杂,就是把每个关键名词、动词、状态名统一释义,让所有人以后用同一个词表达同一件事。词对不齐,需求就对不齐。
我做过的项目里,凡是返工少的,基本都有一个共同特点:需求获取阶段并不是开开心心一团和气,而是充满了各种看似“扫兴”的追问——追问例子、追问矛盾、追问异常、追问谁说的、追问上一次是什么时候。这种“扫兴”恰恰说明需求在被一点点挖实。如果你发现用户开始主动纠正你的复述,说“不,这个事件不是先到这个节点,而是要先判断另一个条件”,那恭喜你,获取工作已经进入正轨了。真正难的从来不是把听到的话记下来,而是让每个人愿意在你说出那句话之前,先把自己默认了很久的规则拿出来盘一盘。这点比任何方法论都更值钱。
