第二章:需求分析实战——从用户故事到功能列表,如何挖掘真正的需求?需求优先级排序方法

大家好,我是你们的老朋友。

上一章我们聊了项目启动,今天进入最磨人的环节——需求分析。说实话,我见过太多项目死在这一步。不是技术不行,而是从一开始就搞错了要做什么。

你想想看,客户说“我要一个商城”,你吭哧吭哧做了三个月,结果他说“我要的是能直播带货的商城”。嗯,这就尴尬了。

2.1 用户故事:别让客户写需求文档

很多团队喜欢让客户写需求文档。我个人习惯是——千万别这么干。客户写出来的东西,要么太抽象,要么太具体到实现细节。

举个例子,客户说:“我要一个登录功能,用手机号验证码登录。”

这看起来很清楚对吧?但实际做的时候你会发现,他其实想要的是:

  • 新用户首次登录自动注册
  • 验证码60秒内有效
  • 登录后跳转到上次浏览的页面

这些细节,客户不会写进文档里。所以,我建议用用户故事来替代需求文档。

用户故事的标准格式:

作为【角色】,我想要【功能】,以便【价值】

比如:

  • 作为普通用户,我想要用手机号快速登录,以便不用记密码
  • 作为运营人员,我想要查看用户登录日志,以便分析用户活跃度

我在项目中遇到过最典型的案例:客户说“我要一个审批流程”。我们按用户故事拆解后发现,他其实要的是“不同金额走不同审批人”。如果直接做通用审批流,那工作量至少翻三倍。

2.2 从用户故事到功能列表:三步法

有了用户故事,怎么变成功能列表?我总结了一个三步法,用了好几年,挺管用的。

第一步:提取动词+名词

把每个用户故事里的动作和对象拎出来。

用户故事 动词 名词
用户想要用手机号登录 登录 手机号、验证码
运营想要查看登录日志 查看 登录日志、时间范围
管理员想要禁用异常账号 禁用 账号、状态

第二步:补充边界条件

这一步最容易漏。我习惯问自己三个问题:

  • 正常流程是什么?
  • 异常情况怎么处理?
  • 有没有权限限制?

比如“登录”这个功能:

  • 正常:输入手机号→获取验证码→输入验证码→登录成功
  • 异常:验证码错误→提示重新输入;手机号格式不对→提示格式错误
  • 权限:所有用户都可以登录,但管理员登录后有额外菜单

第三步:合并去重,形成功能列表

把重复的功能合并,把相关的功能归类。比如“登录”和“注册”可以合并成一个“账号管理”模块。

小技巧:功能列表不要写得太细。我一般控制在每个功能点不超过20个字。比如“用户登录”而不是“用户通过手机号验证码进行登录操作”。

2.3 挖掘真正的需求:5Why法

客户说的需求,往往不是真正的需求。怎么挖?我推荐5Why法——连续问五个为什么。

举个例子:

  • 客户说:“我要一个报表导出功能。”
  • 问:为什么需要导出?——因为要给老板看。
  • 问:为什么老板要看?——因为要分析销售数据。
  • 问:为什么分析销售数据?——因为要调整下个月的促销策略。
  • 问:为什么调整策略?——因为这个月销量下降了。
  • 问:为什么销量下降?——因为竞争对手降价了。

你看,真正的需求不是“报表导出”,而是“了解竞争对手动态,调整定价策略”。

我曾经遇到一个客户,非要做一个“实时数据大屏”。我连问五个为什么之后发现,他其实只是想在周会上展示数据。最后我们做了一个定时刷新的看板,成本只有原来的十分之一。

注意:5Why法不是真的只问五次。问到你觉得找到了根本原因为止。有时候三次就够了,有时候要问七次。

2.4 需求优先级排序:别什么都想做

功能列表出来了,但资源有限,先做哪个?我见过最蠢的做法是——客户说哪个重要就做哪个。结果做到一半,客户又说另一个更重要。

我常用的方法是MoSCoW法

优先级 含义 例子
Must have 必须有,没有就不能上线 用户登录、商品展示
Should have 应该有,但可以延迟 搜索功能、评论功能
Could have 可以有,但不影响核心 个性化推荐、暗黑模式
Won't have 这次不做,以后再说 多语言支持、AI客服

怎么用?我一般这样操作:

  1. 把所有功能点列出来
  2. 和客户一起,每个功能点打上M/S/C/W
  3. M类功能必须全部完成才能上线
  4. S类功能至少完成80%
  5. C类功能看时间,能做就做
  6. W类功能直接砍掉,别犹豫

嗯,这里要注意:客户可能会把所有功能都标成M。这时候你要跟他算账——每个M功能需要多少开发时间,总时间是多少,上线日期是什么时候。让他自己权衡。

2.5 避坑指南:我踩过的三个坑

做需求分析这么多年,我踩过的坑不少。分享三个最典型的:

坑一:过度承诺

我曾经为了拿项目,答应客户所有需求。结果开发团队加班三个月,还是没做完。最后客户不满意,团队也累垮了。

教训:宁可少做,也要做好。把W类功能明确告诉客户“这次不做”,比做到一半说“做不了”要好得多。

坑二:忽略非功能需求

有一次我们做了一个电商系统,功能全做完了,上线第一天就崩溃了——因为没考虑并发量。客户说“我要能支持1000人同时访问”,我们以为就是功能需求,结果性能测试没做。

教训:功能列表里一定要包含非功能需求:性能、安全、可扩展性、可维护性。

坑三:需求变更不管理

有个项目做到一半,客户说“加个支付功能吧”。我们觉得简单,就加了。结果支付涉及第三方对接、财务对账、退款流程……最后项目延期两个月。

教训:任何需求变更都要走正式流程。评估影响、调整排期、重新确认优先级。别口头答应。

2.6 实战案例:一个完整的例子

最后,我拿一个真实案例串一下整个过程。

背景:某教育机构要做在线考试系统。

客户原话:“我要一个能在线考试的网站,学生可以在上面做题,老师可以批改。”

第一步:写用户故事

  • 作为学生,我想要在线答题并提交,以便随时随地进行考试
  • 作为老师,我想要创建试卷并批改,以便减少纸质工作
  • 作为管理员,我想要查看考试统计数据,以便分析教学效果

第二步:5Why挖掘

问老师:为什么需要在线批改?——因为试卷太多,批改累。

问:为什么累?——因为要一题一题看。

问:能不能自动批改?——选择题可以,主观题不行。

问:主观题能不能只批改关键词?——可以试试。

你看,真正的需求是“自动批改选择题+主观题关键词匹配”,而不是“老师手动批改”。

第三步:功能列表

模块 功能点 优先级
考试管理 创建试卷(选择题+主观题) M
考试管理 发布考试 M
学生端 在线答题 M
学生端 提交试卷 M
批改系统 自动批改选择题 M
批改系统 主观题关键词匹配 S
批改系统 老师手动批改主观题 S
统计报表 考试成绩分布 C
统计报表 学生答题详情 C
其他 多语言支持 W

第四步:排期

第一期(1个月):完成所有M功能,保证能考试、能批改选择题。

第二期(2周):完成S功能,主观题关键词匹配+手动批改。

第三期(看情况):C功能,统计报表。

W功能:直接砍掉,跟客户说“以后版本再做”。

好了,这就是需求分析的全流程。说白了,就是别信客户说的,要挖他真正要的;别什么都做,要排好优先级

下一章我们聊聊架构设计,到时候见。