这是敏捷开发一千零一问系列的第二十六篇。(在这里提问,之一,之二,之三,问题总目录)

问题

如何进行优先级排序?具体故事的优先级,和版本规划的优先级之间有何关系?

分析

敏捷开发里边有很多地方需要多次进行优先级排序,本文将探讨其不同的应用场景,及其关系。

值得注意的一点是,敏捷开发中有无数的“自相似性”,比如估算,每年、每月乃至每天人们都在潜移默化地估计自己的任务;又如计划,也是每年每月每天都有成文或不成文的计划;而发布,也是每个故事自成单元,而又与其他的故事构成每月的交付,进而形成几个月的大版本交付……

由于这些自相似的活动颗粒度不同,一定不要认为只要做一次就可以了,也不要认为用一种方法做就可以了。要就具体活动思考这一活动的目标是什么,以及如何才能更好地达成这一目标。

方案

产品路线图级别的版本优先级排序

这个是最高级别的优先级排序,排序的预见性大约在3~5年左右;排序者一般是产品总监等高级管理者;其排序的对象一般不是用户故事,甚至不是功能模块,而是产品线和产品。

排序思路大致是:不同的用户群需要不同的功能 > 因此导致产品应该面向客户群开发 > 识别出当前最重要的客户群规划下一个产品 >  即使相同的客户群也需要逐步为其提供服务 > 根据客户的业务计划或用户的消费习惯制定产品的版本方案。

如果对此特别感兴趣,请参考文末的链接。

应该注意的是,往往公司缺少产品总监的职位,或者虽然有但是极少对中长期的产品规划进行计划,所以很多时候中层的产品经理也需要思考这个问题。

版本内部的迭代优先级排序

这个是中等级别的排序,排序的预见性大约在6~10个月左右;排序者一般是产品总监和产品经理;其排序的对象大约是模块及史诗故事级别。

史诗故事

先说说什么是史诗故事。敏捷开发里边定义史诗故事是一些“比较大”的故事,但没有定义其绝对的尺度。火星人认为,“业务数据”是一种很好的史诗故事尺度,比如我们说:一个产品(假设就是敏捷开发管理工具)要管理下面的数据,请问在半年的开发周期中,应该先开发哪些?

用户故事,优先级,用户故事树……迭代开发Sprint Backlog,迭代计划会……人员,角色,权限……部门,团队,小组……

我们就可以说,这样规划吧:

第一个月:用户故事,优先级,用户故事树……

第二个月:迭代开发Sprint Backlog,迭代计划会,任务分配Assignment……

第三个月:人员,角色,权限……

第四个月:部门,团队,小组……

……

第N个月:整合并发布一个版本

注意在这个尺度上,我们几乎不讨论具体的操作(比如对“用户”,应该有增删改查等操作),而只会讨论对哪些业务数据进行操作,这非常符合人们的工作习惯。

这种名词性质的业务数据,就可以当作合理的史诗故事来看待。

模块

而如果观察每个月的内容,会发现他们比较相关,比如“人员,角色,权限”这三个功能,如果把它们分散到不同的迭代中,很难单独开发。

这类强烈相关的业务数据,就可以称之为“模块”,划分的依据仍然是业务

尽管很难让每个Sprint与一个模块一一对应,但应该建立这种意识,即每个迭代应该开发相对集中的一个或多个模块

迭代排序依据

也就是怎么决定哪个模块或史诗故事优先开发。人们习惯性地会根据依赖关系来开发,但这不是一个好习惯。

比如,有人认为若系统连登录都不能,谈何继续工作,于是就是把“人员,角色,权限”放到首位,然后很可能会是“部门,团队,小组”,这样万事俱备之后,就能很好地开发用户故事、任务分配这些功能了。其实这种做法十分不妥。

第一个可能出现的问题是:由于还没有开发业务,所以其实很难说清楚需要什么样的人员、角色、权限管理办法才能支撑业务。

第二个问题更为突出:在第二个月完成的时候,其实我们针对业务什么都还没做,造成高层领导很难理解我们的进度,在投资、招人这些事情上会犹豫不决,因为我们已经完成的功能很难帮助他下结论。

在新产品研发的过程中第二个问题尤为突出,高层心急如焚急需知道产品的竞争力,而我们正不紧不慢地搭建底层架构。

所以正确的做法是:先从核心业务入手,进行优先级排序。

没有人员、角色、权限,那就大可让每个人无需登录就可以管理用户故事、优先级、用户故事树等;没有部门、团队,那就大可先认为只有一个团队,日后再支撑多团队。

总之,先把核心业务做出来,判断产品优劣之后再说。

迭代内的用户故事排序

这个是具体开发级别的优先级排序方法,排序对象是敏捷开发的用户故事;排序人员是产品经理(PO);排序依据是“此功能在此版本中完成的必要性”。

排序依据

值得注意的一点是:此功能很重要,不等于此功能必须在这个迭代中完成,它很可能只要在版本发布前完成开发就可以了(当然,越重要就越要在早一点的迭代中实现)。那么到底依据什么排序呢?

还是““此功能在此版本中完成的必要性””。这句话看起来很抽象,但是举一个例子就比较清楚了。

假设这个迭代做“用户,角色,权限”,那么应该先做哪些用户故事?注意这里要探讨具体的用户故事了,而非这三个史诗故事。

多半有这么几个用户故事:

增加用户,删除用户(不小心写错了用户名,而又不能修改),编辑用户(的邮件),批量增加用户,冻结用户(保留记录但禁止登录)……

增加角色,分配角色到用户,编辑角色(编辑角色的名字但不修改其权限),删除角色……

增加权限,分配权限到角色(透过角色进而分配到用户),分配权限到用户,删除权限……

可以看出有几个操作几乎是必需的:增加用户,批量增加用户,冻结用户,分配角色到用户,分配权限到角色。

而另外几个可能不太需要,比如:增加角色(可以先写死几种常见的角色),编辑角色(先写死日后再提供修改功能),增加权限……

还有几个几乎可以在早期版本中不要,比如:删除角色,删除权限(这个是基于火星人产品的实际情况分析的,读者的产品或许不同),虽然有了更好。

MoSCoW

有了大致的概念,MoSCoW是一种具体的操作方法来帮助我们实现。它是这几个词的缩写:

Must:这个迭代一定要做的。比如前面提到的“必需”的功能。

Should:应该做,但若没时间就算了。比如前面提到的“不太需要的”功能。

Could:不太需要的,但有了更好。比如前面提到的“几乎早期版本中不要”的功能。

这样,所有人就知道这个迭代中应该先做什么了。不过,这和大家真的会这样做还有点距离,经常需要一些技术手段,比如在故事板上,把TODO的任务按MoSCoW写在不同底色的故事卡片上,在真正完成M和S之前,不准开工W的任务。

值得注意的一点是,MoSCoW可以认为是一种思维方式,可以处理所有自相似的优先级排序问题,未必只是迭代内的(尽管它的设计初衷是)

处理灰色地带

“如果我真的有时间,应该做那些Could的任务,还是干脆做下一个迭代的Must的任务?”这真是一个问题。

理论上说,下一个迭代Must的任务比这个迭代的Could任务更重要。但本人比较倾向于每个迭代集中注意力处理一类功能,而不要零星地掺杂日后的所谓重要的功能。这样可以有效地防止注意力分散导致的生产率下降。

如果你不太喜欢这个结论,其实更应该尝试一下流开发(日后会有详细描述)。流开发需要的管理模式对人的要求更高,但用好了可以应对很多这类问题。实际上火星人采用的就是流开发,而非迭代式开发。

不同优先级之间的继承关系及处理优先级变更

是否因为“用户”比“部门”优先级更高,而导致“增加用户”比“增加部门”更高,以及“删除用户”比“增加部门”也更高?(注意不是“删除部门”)
我们自己尝试的结果是:不一定。
尽管继承关系大致存在,但用户故事很难干净地从史诗故事继承优先级;而迭代也很难从版本直接继承。
所以要把精力放在实际业务上,而不要尝试找到万能方法。
另外,我们经常在几个月后发现原来一个本来认为不太重要的功能,还是必要的。为了处理这种不断的问题,我们会定期安排一个迭代,称之为“优化……”或“重构……”迭代,其中包含了处理遗漏的功能,还包括性能优化等其他事务。
有了这个迭代,就不是太担心偶然出现的优先级错误。另外也不必太担心这个迭代中处理的事情太杂乱而无从下手:是的,前面说过尽量只做几个有限的史诗故事来保证注意力集中,那是因为刚开始做版本的时候,大家不可能对所有故事都熟悉,同开始太多的事情会让大家更加混乱;但在版本的末期,所有事情都相对熟悉了,这种内容发散的迭代影响不大,反而能帮助大家重新整合和整体思考一下不同的功能。

关于产品路线图级别的排序在本文中有详细描述:http://blog.csdn.net/cheny_com/article/details/7190301

关于MoSCoW:http://blog.csdn.net/cheny_com/article/details/6358456

关于史诗故事及用户故事:这里边很多http://blog.csdn.net/column/details/agile.html,包括后来的三期线上沙龙的内容中经常提及。

本人正在参加CSDN博客之星评选,如果读完并喜欢这篇文章,欢迎投票:http://vote.blog.csdn.net/item/blogstar/cheny_com

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

敏捷开发一千零一问系列之二十六 如何进行优先级排序相关推荐

  1. 敏捷开发一千零一问系列之二:序言及解决问题的心法(无住)

    这是敏捷开发一千零一问系列的第二篇.(之一,之二,之三,问题总目录) 也是般若敏捷系列第十一篇.(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 无住 在般若敏捷系列中已 ...

  2. 敏捷开发一千零一问系列之十六:如何让开发人员学习产品?

    这是敏捷开发一千零一问系列的第十六篇.(在这里提问,之一,之二,之三,问题总目录) 这个和上一篇"敏捷开发与CMMI谁为主"都是最近一次培训被大家选出来的最有价值问题. 问题 开发 ...

  3. 敏捷开发一千零一问系列之十四:敏捷开发加班吗?

    这是敏捷开发一千零一问系列的第十四篇.(在这里提问,之一,之二,之三,问题总目录) 正逢周末,又是愚人节,群中有人正在加班,想起上次培训中间休息的时候,讨论起这个"敏捷开发加班吗" ...

  4. 敏捷开发一千零一问系列之十二:敏捷实施的步骤?

    这是敏捷开发一千零一问系列的第十二篇.(在这里提问,之一,之二,之三,问题总目录) 问题 原问题:敏捷的具体实施是否按照一定的步骤? 方案 越前面的方案月容易实施,但是也越容易流于肤浅而失败. 方案1 ...

  5. 敏捷开发一千零一问系列之十:总体架构什么时机进行?(下)

    这是敏捷开发一千零一问系列的第十篇.(在这里提问,之一,之二,之三,问题总目录) 问题 总体架构设计在什么时机进行?是每个迭代做还是先做完再迭代? 方案 之前提到了在时间的角度上,从技术和商业层面上的 ...

  6. 敏捷开发一千零一问系列之七:怎样对待有看法的徒弟?

    2019独角兽企业重金招聘Python工程师标准>>> 这是敏捷开发一千零一问系列的第七篇.(之一,之二,之三,问题总目录) 问题 松结对编程中,师傅对徒弟安排任务时,对于有想法的徒 ...

  7. 敏捷开发一千零一问系列之一:序言及解决问题的心法(无我)

    这是敏捷开发一千零一问系列的第一篇.(之一,之二,之三,问题总目录) 也是般若敏捷系列第十篇.(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 转载于:https://w ...

  8. 敏捷开发一千零一问系列之十七:长期受制于强势客户怎么办?(上)

    这是敏捷开发一千零一问系列的第十七篇.(在这里提问,之一,之二,之三,问题总目录) 这个是在一次面向电信行业供应商的公开课上提出的问题,被评为本场最佳问题. 对于这类"供应商"而言 ...

  9. 敏捷开发一千零一问系列之十八:长期受制于强势客户怎么办?(下)

    这是敏捷开发一千零一问系列的第十七篇.(在这里提问,之一,之二,之三,问题总目录) 方案3:培养产品经理,想到客户前面 被客户牵着鼻子走本来不是坏事,还少了做需求分析的工作,但关键是客户一会牵着向东, ...

最新文章

  1. Ruby之Enumerator类
  2. Sublime text别再弹出(wei zhu ce)以及(geng xin)提示了?
  3. 架构师之路 — API 经济 — RESTful API 设计规范原则
  4. 图片二:matplotlib、PIL、CV2操作图片
  5. Python 那些永远用不到的对象,我们称之为「垃圾」
  6. 翻转字符串里面的单词(*****)
  7. I2c 诊断深入解析
  8. linux网络配置、ssh、scp及命令优先级作业
  9. 支付宝支付返回通知时 notify_url和return_url的选择
  10. Unity教程之-Unity3d中针对Android Apk的签名验证(C#实现)
  11. O365(世纪互联)SharePoint 之使用列表库发布新闻
  12. Apache 重写规则及参数详解,入门看这个就够了
  13. IE6躲躲猫bug -IE6 Peekaboo Bug
  14. canvas教程14-资源管理器
  15. linux yield_带你通俗易懂的了解——Linux线程模型和线程切换
  16. 淘口令卡首屏直通车卡首屏关键词刷单技术分享
  17. type在python是什么意思_python中type()是什么意思
  18. java 留言板源码_jsp+servlet+javabean实现简易留言板(包含数据库文件)
  19. 智联招聘 爬虫职位信息的爬取
  20. 快速完成小程序转App的方法

热门文章

  1. Chrome(谷歌浏览器) 程序开发32个经常使用插件
  2. excel表格横向纵向变换_什么是报表工具?和 EXCEL 有什么区别?
  3. 2021年中国学前教育行业发展现状及未来发展趋势分析:毛入学率达88.1%[图]
  4. 如何查看UE的ENDC组合能力
  5. 基于Djiango的学生管理系统(含源代码)
  6. 滑块验证位移识别/识别率95%+
  7. PT100三线制恒流源接法
  8. 模板类的特例化(具体化)
  9. 如何对接好线上支付?
  10. DDR4、GDDR5、GDDR6内存的区别