3.PO如何给开发团队讲好故事
讲出符合开发团队味口的故事。
上一章说了敏捷开发团队的构成与迭代过程,本章重点说一下迭代第一天的计划会议。熟话说“好的开始就成功了一半”,一个迭代的计划会议做得好不好确实直接注定着迭代的成功与失败。迭代开始之前,PO肯定都已经提前准备好了本次迭代的所有故事,并且提前都发给了团队熟悉,后来我们一般都会在前一个迭代快要完成的时候开一个下个迭代的熟悉会议,组织大家一起熟悉下个迭代的故事,一开始并没有这么做,是在过去的多个迭代中,发现每个迭代计划会议都会拖得很长,有时候会开整整一天还没开完,需要晚上加班继续把故事讲完,任务安排好。在回顾会议的时候我们有总结为什么会这样?我们发现每个故事消耗的时间都特别的长,大家会提针对这个故事提很多的问题,PO会跟大家解释这个故事的需求,有时候PO也没有想到的地方大家就会讨论,这样深入下去,那么时间就这样消耗掉了。最后大家就会觉得迭代会议开得太累,肯定不是长久的法子。如果团队能在计划会议之前做一次提前的沟通,这样团队会提前把自己的想法告诉PO,PO也能提前想好抉择故事的业务。如此一来后来的迭代计划会议确实高效多了,还能够节约下来时间提前做一些功能设计。

PO为了把故事讲明白,肯定提前都把所有的故事都想过一遍,流程是通的,也不会存在相互矛盾。PO有一个自己的用户故事地图,然后把故事地图中的故事按优先级放入Product Backlog排好顺序,从Product Backlog 进入迭代的故事列表就是Sprint backlog。PO一定不能拿出自己都还没弄明白的史诗级的故事拿进Spring backlog给开发团队。
计划会议的流程是这样的,PO把故事列出来,可以在白板上贴卡片,我们直接用的leangoo,一个电子版的看板。然后PO会一个个讲解这些故事,讲完一个故事,SM就会让团队成员提问,如果没有问题就开始估点,估点用扑克牌。现在摆在PO面前最大的问题就是故事怎么讲?大家觉得讲故事可能很容易,其他没那么简单,为什么了,因为PO和开发团队很少是站在同一个频道上思考的,PO经常是跟市场、客户、老板打交道的,从他们那里获取到产品的需求,所以他讲得更多是这个功能的重要性,这个功能的价值,而开发人员是跟机器打交道更多的,他们更多的是站在技术层面如何来实现这个需求,所以PO如果讲的时候越偏向于实现方式上面,开发人员就更容易理解,才会觉得这个故事符合他们的味口。

我到目前为止还在纠结这个故事描述的方式和详细程度,我觉得这个胃口肯定是某个团队的胃口,不一定适合所有团队,只有团队之间形成一种默契,那么交流起来肯定是事半功倍的,所以PO写故事需求,一定不要拘泥与某一种形式,一定得多尝试多思考。
故事不要写太多的文字,写太多开发人员也很少会认真的去看,写太详细也不行,会让有些人产生依赖,也不自己思考。之前就有一个测试人员,一个小时就写了几十个测试用例,怎么可能这么厉害,后来一评审他的用例发现用例的内容都是成段成段从需求中拷贝过来的,一问他这段什么意思,根本还没来得及搞清楚。所以太详细就容易产生依赖,也浪费PO太多精力在文字工作上。太少了肯定也不行,之前就见到过别的团队,故事就是一句话,作为一个用户,我希望能有某某功能,以便于我某某方面会更好。这样的需求开发人员肯定看着都是木的,就算你口才再好也难以有条理的把这个需求讲出来,就算讲出来了,开发人员也不一定有条理的接收了,开发人员肯定觉得你至少有张图吧,对着图讲也好有个消化过程。所以我们一般故事中的需求会涉及到业务说明、业务流程图、界面草图、验收条件,所以了不多不少刚刚好。
一个完整的故事,首先在卡片上会对这个故事有一个整体的说明,比如“作为一个药剂师,我希望可以查询到待配药或已配药的记录,以便于我对指定患者进行配药或取消配药的操作”。这是一个标准格式,作为...我希望...以便于...,三个省略的地方,第一个说出了这个需求的提出者,第二个说出了他需要一个什么功能,第三个说出了为什么需要这个功能,它有什么价值。然后在卡片后面我们有一个链接地址,进一步来描述这个故事,这个链接里就包含了该有的业务说明、流程图、界面草图和验收条件。
故事举列:
US993 查询配药记录
1、故事作为一个药剂师,我希望可以查询到待配药或已配药的记录,以便于我对指定患者进行配药或取消配药的操作2、验收标准1、功能要求:(1)系统支持按收费时间,配药窗口,患者就诊卡号、门诊流水号、发票号查询当前登录药房的待配药处方信息;(2)系统支持按配药时间,患者就诊卡号、门诊流水号、发票号、配药窗口查询当前登录药房的已配药处方信息;2、录入约束:卡号、门诊流水号、发票三个检索条件在同一个文本输入框内录入;3、交互要求:(1)如果系统参数设定的是自动或手动配发模式,而当前用户未指定当前工位对应的配药窗口时,系统会自动在右下角弹出提示,要求用户设定当前工位对应的配药窗口。(2)所有功能按钮上要求有小图标标示作用。4、执行结果:(1)查询到的结果必须与界面设计的内容一致,与后台数据库中的归档信息一致;(2)查询到的结果集必须按配药窗口号,患者挂号序号、收费时间(配药时间)依次降序排列;3、需求说明1、待配药界面2、已配药界面
3.PO如何给开发团队讲好故事的更多相关文章
- 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍
如何避免Scrum敏捷开发团队反思会形式化? 迭代压力很大,根本没时间,而且,反思会上大家都在互相推脱责任,会议成了“批斗大会”,所以团队的人都觉得这个会很鸡肋. 很多团队在开反思会时是这么干的:产品 ...
- Medium开发团队谈架构设计_转
转自:Medium开发团队谈架构设计 背景 说到底,Medium是个社交网络,人们可以在这里分享有意思的故事和想法.据统计,目前累积的用户阅读时间已经超过14亿分钟,合两千六百年. 我们支持着每个月两 ...
- 开发团队(Team)的主要职责和特征
角色介绍 开发团队是Scrum团队的三个角色之一. 开发团队包括架构师.开发工程师.测试人员.数据库管理员和UI设计师等,这几类人的跨职能组合.具备的技能足以实现产品开发. Team的主要职责 1.S ...
- Firebird数据库系统的开发团队
下载Firebird3的发布文档,上面列出了开发团队,仔细看了看,原来俄罗斯人是主导(内核开发),法国人.智利人.巴西人.日本人.荷兰人.捷克人都有.共17人,3人全职. able 13.1. Fir ...
- Scrum&Kanban在移动开发团队的实践 (二)
Scrum&Kanban在移动开发团队的实践系列: Scrum&Kanban在移动开发团队的实践 (一) Scrum&Kanban在移动开发团队的实践 (二) 在第一篇分享文章 ...
- Scrum&Kanban在移动开发团队的实践 (一)
现在大多数团队都在谈敏捷开发,似乎觉得敏捷是软件开发的银弹.只需要实践下一些敏捷开发的模式就能如何如何,其实我觉得不论是敏捷开发还是传统的瀑布流开发都是有他们的市场的,取决于团队人员构成,取决你的产品 ...
- 转:Yelp开发团队发布内部网站设计指南
原文来自于:http://www.infoq.com/cn/news/2014/02/yelp-style-guide 近日,Yelp开发团队在博客发布消息:Yelp公开了内部网站设计指南.这份文档此 ...
- 开发团队在TFS中使用Git Repository (一)
在研发团队中,代码版本管理是最为基础的必要工具.个人使用过的版本管理工具有SVN.VSS.ClearCase.TFS.Git,从团队的角度和使用角度来说,个人倾向于与使用TFS作为团队的基础工具.首先 ...
- 微信终端开发团队:新年新语言,WCDB Swift
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:sanhuazhang,此文发布在微信终端开发团队的专栏 WCDB 作为微信的终端数据库,从 2017.6 开源至今,共迭代了 5 个版本 ...
随机推荐
- php算法基础----时间复杂度和空间复杂度
算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...
- 静默安装oracle后,启动oem报错,解决方法!
一.手工重建EM Oracle 的gridcontrol 由两部分组成:dbcontrol 和repository. 我们可以对某一部分进行操作,也可以同时进行操作. 这里先看一个因为修改hostna ...
- 2016-3-19日小结:scrollTop
<div id="div1" style="padding: 0; position:absolute;width: 200px;height: 200px;< ...
- 【洛谷】【线段树】P3353 在你窗外闪耀的星星
[题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...
- 20155314 2016-2017-2 《Java程序设计》第3周学习总结
20155314 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 学习目标 区分基本类型与类类型 理解对象的生成与引用的关系 掌握String类和数组 理解封 ...
- windows 下搭建git服务器,及问题处理。
最近要做一个源码管理服务器,权衡了一下还是git最适合,搭建服务器前看了网上一些windows下搭建git服务器的帖子,感觉还比较简单,没有太多需要配置的地方,于是开始动手. 我选择的是 gitfor ...
- shuffle() 函数
shuffle() 方法将序列的所有元素随机排序. 以下是 shuffle()方法的语法: shuffle (lst ) 注意:此函数是无法直接访问,需要导入 random 模块,然后通过 rando ...
- Python自动化之ajax返回表单验证的错误信息和序列化扩展
form内置序列化错误 如果使用form提交数据的时候,可以直接返回错误信息到模板里面进行渲染 但是如果使用ajax处理呢 from django import forms from django.f ...
- 集合之Stack
在Java中Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的.每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过 ...
- 使用rosed编辑ROS中的文件
使用 rosed rosed是rosbash 的一部分. 利用它可以直接通过package名来获取到待编辑的文件而无需指定该文件的存储路径了. 使用方法: $ rosed [package_name] ...