在软件开发里,“用户故事”几乎成了需求的代名词。但奇怪的是,翻遍那些经典的敏捷开发指南,你很难找到一个关于它的“官方定义”。这就容易让人纠结:需求池里非得全是用户故事吗?不用“作为一个……我想……以便……”这种句式,写出来的就不算数?那些以“作为产品经理”或“作为开发者”开头的描述,到底算不算用户故事?想弄明白这些,得回到用户故事的源头去看看。它的本质压根不是个填空模板,而是一场关于产品愿景的对话。
上世纪90年代,Kent Beck在《极限编程应用》里第一次引入了这个概念。他的灵感来自一个特别日常的场景:一个用户兴冲冲地向他描绘新功能——“只要我输入邮编,系统就能自动补全城市和州,连按钮都不用按!”这种充满画面感和期待的讲述,一下就把产品的样子搭出来了。Kent于是想:既然讲软件的潜力能激发动力和愿景,为什么不在动手开发前,把这些故事先讲出来呢?关注谁在用、想做什么、为什么需要,这就是用户故事的初心。正如《用户故事地图》的作者Jeff Patton强调的,“故事”的意义在于我们怎么讲、怎么聊,而不是怎么写。

后来,Connextra公司的Rachel Davis提炼出了那个著名的模板:“作为一个[角色],我想[活动],以便[价值]”。模板的出现,本来是为了提醒大家:匆忙写需求时,别忘了最核心的三个要素——谁需要、需要什么、为什么需要。比如,“作为一个手机用户,我想查看当前位置的天气预报,以便不用每次去新地方都得手动搜索”,这就很清晰。但千万别把写在卡片上的字当成死契约,它们只是对话的起点。模板里特意用“用户”这个词,就是为了把视角强行拉回最终使用者。所以,除非你的产品就是给开发者用的API工具,那些“作为开发者,我想……”的写法,其实已经偏离了初衷。

这就引出了Ron Jeffries提出的经典“3C”原则:卡片、对话、确认。卡片是对需求的简明摘要,就像图书馆的检索卡,得有标题和简述。好标题应该能自我解释,千万别让需求池里堆满编号或者冗长的复句——当团队开始用编号而不是标题来指代需求时,这个故事其实已经丢了灵魂。比如查天气的故事,标题只需叫“查询当前位置天气”就够了。
卡片只是个引子,真正的活儿在“对话”里。产品负责人和团队坐下来,聊谁会用这个功能、期望是什么、背后有什么业务价值。先聚焦核心目标,再慢慢细化,这种探讨不仅能帮团队打磨出最小可行产品(MVP),也是用户故事地图研讨会的核心环节。聊透了,再把浮现的细节和验证方式固化下来,这就是“确认”——确保大家都明白怎么检验这个故事才算真正做完。
那么,怎么判断一个故事够成熟,能进开发冲刺了呢?INVEST原则给了六把量尺:独立、协商、价值、估算、小型、可测试。我们拿一个彩票功能举例:“作为一名彩票玩家,我想在网站上输入号码,以便检查是否中奖及金额”。
先说独立和协商。独立意味着它能单独交付,不被其他未完成的故事卡住,比如查号码不需要先登录。协商则说明故事是活的,开发中随时可以跟产品负责人调整细节。

再看价值。价值必须直抵最终用户。切蛋糕是个绝佳的比喻:用户想吃包含奶油、夹层和底座的完整一块,而不是单独舔一口奶油。软件开发也要做“垂直切片”,让用户看到完整可用的功能,而不是一个没后端逻辑的假按钮。如果只给产品经理或开发者带来内部便利,那故事就偏航了。
估算则是可行性的试金石。能估算说明团队理解了需求,估不出来就说明还得继续聊、继续研究。小型则是为了好掌控,一个故事最好能在单个冲刺内干完,越小越容易把控。
如果故事太大,怎么切?关键是切完后每块还得有完整的用户价值。上面的彩票故事如果嫌大,可以拆成两步:先做“检查是否中奖”,再做“查询具体奖金”。第一步上线就能立刻给用户反馈,团队也能更快验证市场反应。
最后是可测试。这要求我们有清晰的验收标准,明确功能场景、边缘路径甚至非功能要求。对于“检查是否中奖”,标准可以是:中了提示“今天是你的幸运日!”,没中提示“再试一次!”对于“查询奖金”,标准可以是:金额按货币格式显示,且只能查近30天的号码。行为驱动开发(BDD)的Gherkin语法(给定/当/然后)写这些标准很顺手,能顺畅对接自动化测试。另外,团队还要定个通用的“完成标准”,比如页面必须适配移动端、支持多语言,确保每个故事交付的质量底线。

说到底,用户故事的根本目的,就是激发团队对产品的持续对话,始终盯紧三个核心:谁在用、他们做什么、为什么做。拆分和编写故事或许挺折腾,但只要摸透了这些原则,它就能真正帮团队把产品做准、做实。
立即登录