分享到
敏捷开发用户故事系列(四-六)
 

作者:cheny_com,发布于2011-11-24

 

敏捷开发用户故事系列之四:优先级排序

优先级排序听起来是一个很简单的工作,一个字段无外乎“重要/一般……”,调整一下然后按排序,就出来了。

但其实里边有不少名堂:谁应该负责排序工作?谁最终拍板?研发因素要不要考虑?需求依赖关系导致的顺序如何处理?持续交付的考虑?商业决策的考虑?

以下知识与经验,来自于多个来源,主要是部分网上资料、实际项目的访谈,并在自己现在正在做的一个项目中得到验证。具体应用时,应灵活掌握。

谁负责排序?

Product Owner负责。

在产品研发环境中,一般是产品经理;在项目开发环境中,一般是项目经理。

作为产品或项目的掌舵人,这个人必须对产品或项目的概貌非常了解,从业务概貌到业务细节,都应该了解。从业务这一点上说,了解程度要超过研发团队本身。

有些团队把排序工作交给客户,非常不妥。客户任何时候都只是浅层参与,随时可能会懒散、不专心,因此不要尝试把主动权交给他们。即使此事必须通过客户,也要有内部相应的人加以把控,判断排序的真实性。

谁负责拍板?

要想既了解概貌,又了解细节,对产品经理(以下略去项目经理的情况)而言要求过高,这时候一般配备产品总监,以在更高的层面把控方向。

产品总监的工作更倾向于长远化、市场化、人性化。比如很多消费电子类产品的产品经理负责研究新潮的功能,而产品总监则负责研究“使用这些功能的新潮的人”。

研发因素的考虑

尽管一心一意希望按客户价值排序,但实际情况是往往制约于产品功能的技术实现和依赖关系,不得不做变通。

因此,应该考虑研发团队的介入。

什么?客户,产品经理,产品总监,研发团队……导致谁说了算?说对了,这时候一般需要“产品负责人团队”,即PO团队。

第一次听到这种团队,是看一个国外游戏团队的开发经验。他们的产品负责人团队,他们引入了自己公司的高层、策划人员(即需求开发和管理人员)、开发人员、发行商、热心玩家等等,最终工作由主策划(产品经理)汇总。

需求依赖的考虑

其实多数需求依赖都可以被避开,比如没有“删除功能”,在开发的初期,一样可以登录数据库直接暴力删除。

但是这个会带来以后的问题,比如要持续交付,这个让客户怎么用?更深入的问题,下面继续谈。

持续交付的考虑

上次在MPD做培训的时候,有人问到一个问题大致如下:“我们是持续交付了,但是刚开始的产品缺胳膊少腿,界面也不美观,客户看了直摇头,对我们印象很差,该怎么办?”忙了半天才做到持续交付,居然起到反作用。

这里边其实发生的最大的问题是:一定要从客户的角度理解可运行软件和持续交付,而不要从开发角度!

从开发角度看,上了持续集成系统,每天有一个EXE或DLL生成,就可运行了,可持续交付了,其实大错特错。

比如做一个敏捷开发管理软件,从第一分钟,就是可以运行的软件;但估计要做出可以填写、展示用户故事,无论如何也要到第二周;而要最后卖掉,怎么也得有“用户和权限”这些次要功能。把这些所谓“次要功能”做出来之前就给客户,而又未能向客户说明,极有可能适得其反。

当然一种做法是:把“登录功能”提前呗,不就从第一天就能真的给客户了?不。

商业决策的考虑

作为产品而言,永远应该把最体现差异化价值观的功能置于万事之前,也就是三个月内要决定产品是否值得做,六个月内决定产品的主要功能及投入多少人力,九个月到一年的时候,就发布了(这里边的时间点仅为举例,需灵活掌握)。因此千万不要把登录功能这类大路边的功能做在前面,会积压大量资金人力并大大推迟决策点。

比如某家游戏企业,为了能提前获知游戏是否好玩,以平台化的方法做出了很多基本的能登录、能玩、能买卖、有图片的游戏,新团队只需要在上面做出核心玩法,即可提供高层做出是否继续的判断。

提前做体现价值观的功能,或做出平台加速核心功能开发,都是为了更早给出决策。

项目开发的情况,本人遇到的比较少,但是显然不应该从在开始做那些路边的功能。

最佳实践:故事群

所谓故事群,是在观察一些团队及自己亲自实践的结果。

故事群接近史诗故事的概念,即将故事按照每个故事群交付后,客户可完整操作部分功能的方式,将若干个故事归入一群,并尝试在每个迭代中实现一群,交付或展示给客户。

比如如果做一个敏捷开发软件,则可能规划如下的群:

1. 用户故事相关群

2. 迭代计划相关群

3. 日常工作相关群

4. ……

这样的好处包括:

1. 每个群交付后,局部的功能比较齐全,客户可以较为完整地使用,从而可针对某类功能集中地给以反馈。

2. 由于这些功能整体在说一件事情,客户和开发人员的精力比较集中,能把一件事情想得比较透彻。

当然,这种方法对产品经理的工作能力还是有要求的,否则一个一个群之间很难衔接顺畅。

敏捷开发用户故事系列之五:用户故事的分类

引子

在之一、之二、之三中,我们曾经提到了“作为一个……可以……以便……”的用户故事描述方式,还提到应该如何描述用户故事,才能更好地反映客户价值。

下面请尝试一下描述这两个故事:

1. 如果把“保存按钮”统一放在页面上端而非下面,有些屏幕上侧控件的修改,就无需滚屏即可保存。

2. 所有自定义字段,统一改为4000长度的nvarchar。

第一个勉强可以写为:“作为一个用户,可以方便地点击上端的保存按钮,以便在某些控件修改的时候无需滚屏即可保存”,但是这个故事颗粒度显得过小,开发可能只需要1小时,而在客户眼中,也不应该和“作为一个用户,可以对故事进行增删改查,以便……”放在一起。

第二个故事,则找不到“用户”的位置,因为它是我们自己要做的改进,客户完全可以不感知。

这类故事怎么办呢?

分类

有各种分类方法可以把用户故事重新组织一下,下面这种是我自己做的分类,不是一个成熟的方法。

所以在利用这些方法时,一定要理解其用意而不是方法,这样当自己有别的用意时,就能灵活修改。

我自己在开发一个不大的软件时发现,把所有用户故事罗列在一起显示显然极度混乱,于是做了一个相当大的树形结构来显示。

结果发现尽管屏幕利用率很高了,还是难以一眼看到产品的主要功能,原因就是大大小小的故事都挤在一起,有些是产品的卖点应该让客户看到的,有的是要做的重构只和开发团队有关,有些则介于其中,产品经理需要知道,但又不用告诉客户。

另外同样想给客户看的东西,也有大小差异,比如上面例子中的1,如果在“产品版本更新公告”里边,可以写上;但对新客户而言,就不需要,他们完全可以当作产品原来就是这个样子接受下来。

所以最后我的大致分类维度是:横坐标是向外界展现的程度,纵坐标是颗粒度。颗粒度在一定程度上是“有必要呈现的程度”,就是可以以简繁有别地显示产品功能。

颗粒度 客户可见 产品经理可见 开发团队可见
产品功能描述 数据级别 史诗     重构 债务
操作级别 功能    
版本发布描述 增强级别 增强 外部缺陷 内部缺陷

颗粒度维度

所谓文件,就是一组要操作的数据,比如一个要有用户管理的系统,就肯定有“用户,角色,权限……”这些要操作的数据。其特点是文件是系统的使用者能理解的数据,文件都是名词。

所谓操作,就是对某组或多组数据的操作,对一组数据的操作入手“创建角色”“删除用户”,对多组数据的操作如”为用户分配角色“,其特点是操作是系统使用者的业务操作(就是”干活“的操作),操作都是一个动词。

所谓增强,就是此外的用来做定语、状语、补语的内容了。比如开始引子里边的案例1,就是为了用户方便做的东西,既不是用户要管理的数据,也不是用户平时工作的操作。

这个维度,在”客户可见“的层面上理解,非常方便。

比如描述产品有何功能的时候,只需要展示客户可见的史诗和功能。

比如描述产品版本发布描述(升级公告)时,则应该展示发生变化的史诗、功能、增强三者。(缺陷后面谈)

关于这个维度,请参考:http://blog.csdn.net/cheny_com/article/details/6723715。

展现程度维度

除了给客户看的东西,有些东西需要产品经理、开发团队自己知道就可以了。他们所知的范围,向前包括,意思就是说客户能看的,产品经理都能看,产品经理能看的,开发团队都能看。

缺陷有两种,客户提出的,自己发现的。前者要向客户展示(在产品升级公告里边),后者产品经理知道就可以了。

重构则是因为开发的方便性、可维护性、性能、功能的实现方法重新设计等原因引起的内部工作,无需向客户及产品经理透露即可。

债务是开发人员“走捷径”留下的可能出问题的地方。这种“可能出问题”,是指未来的功能、结构发生变化后可能出问题,而不是当前的做每种操作可能出问题(那就应该称为缺陷了)。因此既不需要现在就要改正,也需要留下一个记号日后好查。

实际使用情况

在实际项目里边,我发现这种分类可能会因为项目的不同而不同。比如最近我们想增加三种内部史诗、内部功能、内部增强,因为有些功能是为了内部开发方便做的,而且也有文件、操作、增强的区别。

我们还为不同的故事设置了类似“作为一个……,可以……以便……”的描述模板,但还不是很成熟,日后会分享给大家。

所以,在具体管理中本人也会常常改变分类方法,因此本文的内容日后会发生变化;而大家也应该在每个项目中重新思考以往的分类是否合适。

敏捷开发用户故事系列之六:用户故事的产生与组织结构

一条需求敢跳出来,基本上就能被化成一条用户故事,看完一二三四五,上山打老虎都不怕,这个似乎已经不太难了。

难的是,项目或产品的第一天,给一张白纸:“请列出有哪些故事”。那个时候其实不是大脑空空,而是有千言万语就是说不出。

前年做另外一件事情的时候偶然得到一种方法,去年到今年用在一个敏捷项目上,果然很舒服地列出了大量故事,后来的开发过程证实它们都满足独立交付、可测试、耦合低等特点,属于好故事之列。

引子

这件事情其实在之前的博客中已经多次提到了,就是软件项目的造价管理。注意这里提到的是项目,而非产品研发。项目就是那种一手交钱一手交货的甲乙方项目。

之前曾经提到过:无论有多少种方法对优先级进行排序,作为产品而言,都永远应该把最体现差异化价值观的功能置于万事之前。

这里要说的则是:无论有多少管理方法,作为项目而言,都永远应该把造价估算置于万事之前。

这个前不是一般的前,最好能用几张A4纸的篇幅就搞定,因为一般老板刚去签订合同的时候,手里没有需求,没有设计,没有故事,就这么几张纸。当然另一个尴尬的事情则是:即使有很厚的需求文档了,也仍然没有方法知道要多久才能完成项目,真的很愁人。

其实这两件事说的是一件事:如何在早期列出具有某种表征意义的需求列表。

甚早期的用户故事生成方法

在之前的博客详细描述过了,这里只从产生和组织用户故事的角度谈谈,详情请看文末的链接。

在我们的开发工作中一共有两类东西要开发,一种是数据,一种是操作。

所谓数据,就是比如要编写一个CRM,其中有“用户、角色、权限”这三种东西,就是要管理的数据,这里权且记下用户有“3个史诗故事”要管理。

所谓操作,就是对用户,应该有增、删、改、查、加入角色……这些称之为操作,这里权且记下对用户,用户会有“5个用户故事”。

下面是我们的实际项目的局部截图,课本是史诗,蓝色是故事带括号和加号的是两个合并的故事,箭头是增强请参考上篇故事分类:

史诗都是名词,都是要被管理的核心信息,而且是用户可以理解的信息;

故事都是动词,都是用户平日里使用软件产品所进行的业务操作;

最后一个小贴士是每个史诗故事平均有7个左右的故事,少于4个要怀疑是不是史诗,多于10个要怀疑是不是应该拆分新的史诗了。

最后这条是NESMA 20年来的经验数据,很值得参考但莫较真。比如上面例子分为用户/角色/权限3个史诗对19个故事(平均6.3个),你可以试试再拆拆或合合,效果肯定不如这三个干净。只能说他们20年真没白干。

这个方法听起来很水很模糊,但因为开过几次造价估算培训课,在我经手的3次培训中,通过短短1天培训后,4~5个小组的(最大-最小)/平均 误差只有正负12%,而误差的很大来源,是一个模拟问答环节总是比较嘈杂,很多团队没有注意听答案!@¥#…%!核对需求后,误差可迅速降低到大约一半。课堂练习只有一张A4纸,里边很模糊地隐含了多达90多个用户故事,练习时间只有1小时,能达到如此的一致性已经很满意了。

大尺度上用户故事的组织结构

最早我们在史诗之上,就是无意义的层级式目录结构了,但就像太阳系外有银河系,银河系外有超星系,超星系外有超星系团一样,事情还没有完。

本来以为在史诗之上没有有实际逻辑意义的结构了,但发现“用户角色权限”这三个故事的距离,远远近于其他故事,应该还有一种具有逻辑意义的东西来描述;其他一些史诗故事也发现了这种内聚性,但尚无合理的划分方法将其定义下来。

笔者暂时创造了“故事群”这个概念来描述他们,但没有找到合理的定义,让不同的人可以一致性地划分故事群。

之所以借用功能点分析的概念来产生和组织用户故事,是因为关于用户故事,一直没有非常标准的颗粒度和组织方法;而对于数据、操作,则在接近40年前就开始尝试标准化定义,当前有5个国际标准之多,中国的国家标准也马上出来了。在接受这些标准培训后,不同个体对数据和操作的计数差异,只有不到10%;尚没有任何用户故事的定义能达到如此一致性。

敏捷世界一向有封闭的特性,比如CMMI在尝试拥抱敏捷,但从来没听过敏捷拥抱CMMI的。

不否认创造和使用敏捷开发的一线员工在定义需求、制定计划、每日跟踪中的经验和权威性,但在大尺度上掌握用户故事的组织结构,以及在甚早期判断项目范围的方面,则正是这一人群的弱项。

敏捷方法需要借鉴已有的外界方法。

为什么不用UML方法?因为本人很不熟悉UML。UML比较适合在大尺度上组织用户故事,但很难在甚早期开展(一张A4,隐含90个故事,1小时估完)。

当然这不会抹杀UML在分析用户故事中的作用,日后或许会请另外一位老师写篇文章《用户故事与UML》,我转发过来作为其中一篇,以求完整。


 
相关文章

由外而内看敏捷软件开发
架敏捷开发中史诗故事与用户
看板任务管理
面向全球化的有效敏捷交付
 
相关文档

统一过程及应用
敏捷过程实践
基于XP/RUP的迭代开发
软件开发过程指南
 
相关课程

IT安全原理、框架与实践
ITIL认证
ITIL Foundation认证培训(ITIL V3 Foundation )
IT规划体系与实践
 
分享到
 
 
     

相关文章
由外而内看敏捷软件开发
架敏捷开发中史诗故事与用户
看板任务管理
面向全球化的有效敏捷交付
小型团队快速开发方法
DevOps,不是一个传说!
更多...   

相关培训课程
统一过程及应用
敏捷过程实践
基于XP/RUP的迭代开发
软件开发过程指南
SCRUM过程实践
敏捷测试-简单而可行

成功案例
某博彩企业 产品经理与产品管理
北京 研发团队与工作管理
广东金赋信息 敏捷开发过程与项目管理
某支付平台 软件配置管理与发布管理
富士 软件外包项目管理与进度管理
塞孚耐 基于Scrum的敏捷开发
更多...   
 
 
 
 
 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号