第三节:用户故事编写实战——从零开始写一个完整的故事

好,咱们直接动手。前面讲了那么多理论,今天就来真的——从零开始写一个完整的用户故事,连验收标准一起搞定。

我个人习惯,每次写用户故事前,先问自己三个问题:

  • 这个功能到底给谁用?
  • 他为什么要用?
  • 用完之后他得到什么?

这三个问题想明白了,故事骨架就有了。咱们拿一个真实场景来练手——电商系统的“订单取消”功能

第一步:确定角色和需求

先别急着写故事。你得搞清楚,谁需要这个功能?

我遇到过不少团队,上来就写“用户想要取消订单”。但“用户”是谁?是刚下单就后悔的买家?还是发现地址填错了的粗心鬼?不同的人,需求其实不一样。

咱们这次聚焦一个典型角色:已登录的普通买家。他刚下了一单,发现选错颜色了,想取消重来。

第二步:写出故事标题和描述

标准格式还记得吧?

作为 <角色>
我想要 <功能>
以便 <价值>

套到咱们的场景里:

作为 已登录的普通买家
我想要 取消我刚刚下的订单
以便 我可以重新下单选择正确的商品

嗯,看起来挺顺。但别急,这只是骨架。真正让故事“活”起来的,是验收标准。

第三步:编写验收标准(核心难点)

验收标准说白了就是——怎么才算“做完”。我见过太多团队,故事写得很漂亮,一开发就吵架,就是因为验收标准没写清楚。

咱们这个“取消订单”功能,验收标准至少要考虑这些:

3.1 业务规则

  • 订单状态必须是“待发货”才能取消
  • 已发货的订单不能取消
  • 取消后库存要恢复
  • 取消后要触发退款流程

3.2 界面交互

  • 订单详情页要有“取消订单”按钮
  • 点击后弹出确认对话框
  • 确认后显示“取消成功”提示
  • 取消后按钮变灰,不可重复点击

3.3 异常情况

  • 网络中断时提示“操作失败,请重试”
  • 订单已被系统自动取消时,提示“订单状态已变更”
  • 退款失败时,记录日志并通知客服

你看,光一个取消功能,就能写出这么多条。我建议你把这些整理成表格,开发测试都看得明白:

编号 验收标准 类型
AC-01 只有“待发货”状态的订单显示取消按钮 业务规则
AC-02 点击取消按钮弹出确认弹窗,包含“确定”和“再想想” 界面交互
AC-03 确认后订单状态变为“已取消”,按钮置灰 界面交互
AC-04 取消成功后,对应商品库存+1 业务规则
AC-05 取消成功后,自动发起退款(原路返回) 业务规则
AC-06 网络异常时,显示“操作失败,请稍后重试” 异常处理
AC-07 订单已被他人取消时,提示“订单状态已变更,请刷新” 异常处理

我的小技巧:验收标准别写太多,7±2条刚刚好。太多的话,开发会嫌烦,测试也测不过来。如果确实复杂,拆成多个小故事。

第四步:补充非功能性需求

故事写完了?别急。有些东西用户不会说,但你必须想到。比如:

  • 取消操作的响应时间不能超过2秒
  • 高并发下(比如双十一)取消操作不能失败
  • 取消记录要保存至少180天,方便售后查证

这些可以写在故事的“备注”里,或者单独列一个“非功能需求”段落。我习惯在故事底部加一行:

备注:
- 取消接口响应时间 < 2s (P99)
- 取消操作需记录操作日志,保留180天
- 退款接口调用失败时,需进入人工处理队列

第五步:评审和确认

故事写完了,别急着扔给开发。拉上产品、测试、开发一起过一遍。我经历过一次惨痛的教训——

我曾经写了一个“取消订单”的故事,验收标准里没写“已付款的订单取消后要退款”。结果开发做完了,测试才发现退款逻辑没做。上线后用户取消订单,钱没退回来,客服电话被打爆了。从那以后,我每次写验收标准都会问自己一句:“这个功能出错了,用户会骂什么?”

评审的时候,重点关注这几件事:

  • 验收标准是否覆盖了所有正常流程?
  • 异常情况有没有遗漏?
  • 非功能需求是否明确?
  • 有没有歧义?比如“取消后恢复库存”——恢复多少?原数量还是打折后的数量?

完整示例:最终版用户故事

好了,咱们把上面所有内容整合一下,看看最终长什么样:

用户故事:取消未发货订单

作为 已登录的普通买家
我想要 取消我处于“待发货”状态的订单
以便 我可以重新下单或放弃购买

验收标准:
AC-01: 只有“待发货”状态的订单显示“取消订单”按钮
AC-02: 点击按钮后弹出确认弹窗,包含“确定取消”和“暂不取消”
AC-03: 确认后订单状态变为“已取消”,按钮置灰不可点击
AC-04: 取消成功后,对应商品库存+1
AC-05: 取消成功后,自动发起原路退款
AC-06: 网络异常时,显示“操作失败,请稍后重试”
AC-07: 订单状态已被其他操作变更时,提示“订单状态已变更,请刷新页面”

备注:
- 取消接口响应时间 < 2s (P99)
- 取消操作需记录操作日志,保留180天
- 退款接口调用失败时,需进入人工处理队列

你看,这样一个故事,开发拿到手就知道要做什么,测试也知道要测什么,产品也能确认是不是自己想要的。说白了,好的用户故事,就是让所有人都能“对得上号”

最后送你一句话:写用户故事不是写作文,是写契约。每一句话都要经得起推敲,每一条验收标准都要能验证。下次写故事的时候,试试我这个流程,你会发现团队吵架的次数少了很多。