《敏捷软件开发实践:估算与计划》第9章 确定主题的优先级,重点和要点的思维导图及文字内容。
第9章 确定主题的优先级
The indispensable first step to getting what you want is this: Decide what you want.
通常我们很少会有足够的时间来完成所有的事。所以我们要确定优先级。
确定优先级的责任是由整个团队共同承担,但整个过程由产品负责人主导。
9.1 确定优先级时的因素在敏捷项目中,产品负责人“要根据业务价值确定优先级”。
对新功能开发的优先级进行确定时必须考虑 4 个因素:
1. 获得这些特性带来的经济价值
2. 开发(可能还包含支持)新特性所需的成本
3. 开发新特性所产生的学习和知识的数量及重要性
4. 开发这些特性所减少的风险
9.1.1 价值确定主题价值的理想方法往往就是估算它在一段时间——通常是接下来几个月、几个季度或几年内所带来的经济影响。
9.1.2 成本成本的一个重要、但是常常被忽视的方面是成本会随着时间变化。
降低变化所产生的成本的最佳办法就是尽可能晚地——没有了变更的时间、高效地实现一个功能。
若只考虑所需的时间,主题常常似乎是值得开发的。记住时间就是金钱,在确定优先级时最好的办法就是大致地把功能点或者理想人天转换成金钱。
9.1.3 新知识团队挖掘到的知识可以分为两类:
1. 关于产品的知识:关于要开发什么的知识。
关于产品将会包含的特性和不会包含的功能。产品知识越多,就越能更好地做出关于产品的本质和特性的决策。
2. 关于项目的知识:关于如何创建产品的知识。
关于将要使用的技术的知识、关于开发人员技能的知识,及关于团队共同工作得怎么样的知识等。
不确定性可以分为两种:
1. 目标不确定性。
对新产品应该包括什么功能的不确定性。可以通过获取更多有关产品的知识来消除。
2. 方法不确定性。
对应该如何构建这个产品的不确定性。可以通过获取更多有关项目的知识来消除。
在敏捷开发过程中,敏捷团队承认不可能在项目开始时就消除所有关于“产品是什么”的不确定性。需要开发出产品的一部分并展示给客户,收集反馈和提炼看法,并对计划做一定的调整。这些工作需要时间。在这个过程中,团队也可以更多地了解到他们将如何开发这个系统。这将同时降低目标不确定性和方法不确定性。
尽早降低有关“产品应该是什么”的不确定性是非常重要的。不需要(也不可能)在一开始就完成消除目标不确定性。但大多数项目最大的风险之一就是构建出错误的产品。
尽早开发那些可以最能帮助我们把可工作的软件放在实际用户面前或手中的特性,可以大大降低这种风险。
9.1.4 风险风险就是尚未发生但是可能会发生,而且会防碍或者限制项目成功的事情。
项目中存在各种类型的风险,包括:
1. 进度风险:无法按期完成。
2. 成本风险:无法购买到合适价值的资源。
3. 功能风险:无法正确工作。
4. 技术风险:无法实现想要的功能。
5. 商业风险:无法销售出去。
在项目的高风险特性和高价值特性之间存在着典型的竞争。解决方法是在确定优先级时,既不要让风险也不要让价值占据绝对主要地位,而是同时考虑风险和价值。
应该首先开发高价值、高风险的特性。这些特性可以提供最高的价值,而对它们的处理可以消除显著的风险。接着是高价值、低风险的特性。这些特性提供了和第一个特性集相当的价值,但是风险较低。可以将它们安排在进度表稍晚的位置。应该采用首先处理高价值特性,但把风险作为附加区分原则的指导思想。排在第三位的是低价值、低风险的特性。因为放弃它们对产品的总价值产生的影响较小,而且它们的风险也很低。最后,最好避免开发那些提供低价值但具有高风险的特性。推迟所有低价值特性的工作,尤其是那些具有高风险的特性。尽可能把低价值、高风险的对象推迟到项目以外。但要注意特性风险和价值的关系会随着时间发生变化。当其他特性都完成了,原来“避免”象限的低价值、高风险特性可能就会位于“首先处理”象限中。
9.2 综合 4 个因素要综合这 4 个优先级因素(价值、成本、新知识、风险),应首先考虑特性的价值与现在开发它所需成本间的关系。这就会产生一个初始的优先级顺序。通常价值/成本比率高的主题应该首先完成。
其次,考虑其他优先级因素来把主题提前或推后。
9.3 一些例子 9.3.1 基础设施一个常见的优先级挑战是开发应用程序的基础设施或架构元素。
下一个优先级因素是成本。在进行任何的“现在还是将来?”决策时,都需要考虑功能变化所带来的成本。
下一个因素是说我们应该加速开发可以产生新的产品知识或过程知识的特性。对于一个新技术,若之前没做过类似的工作,为了减少不确定性可能会提高它的优先级。
最后的一个优先级因素是风险。框架、关键组件或是其他基础设施的失败常常是项目中的一个显著风险。
9.3.2 用户界面设计常见的敏捷开发建议是把用户界面设计和底下的特性完全放在同一次的迭代中完成。
应用优先级因素,我们可以了解到:
一,用户界面的开发会产生显著的、有用的新知识吗?如果是,就应该把一些活动移动到进度表的前部。对部分用户界面的早期开发允许向实际的或可能的用户展示这个系统的早期形态。来自这些用户的反馈可以带来有关产品的新知识,而这些新知识可用于保证团队确实正在开发可能具有最高价值的产品。
二,开发用户界面可以减少风险吗?它可能不会消除技术风险,但常常会降低大多数项目所面临的最严重的风险:开发错误产品的风险。
三,如果先开发用户界面可以显著降低成本,就会是另一个把这些特性安排到进度表前部的有利条件。不过,大多数情况下并不是这样。
9.4 小结通常很少有足够的时候来完成所有事项,因此需要通过优先级来确定首先处理哪些工作。
确定优先级时需要考虑以下 4 个主要因素:
1. 获得这些特性带来的经济价值。
2. 开发(可能还包括支持)新特性所需的成本。
3. 开发新特性所产生的学习和知识的量及重要性。
4. 开发这些特性所减少的风险。
需要综合考虑这些因素,首先是主题的价值和成本。这样做可以给主题排出初始的顺序。然后可以根据其他因素把主题的顺序提前或推后。
版权声明
本人所读图书的版权属于原著者和译者。这里仅为个人学习使用。但由本人学习整理所形成的音频、图片、文字和视频等的版权为本公众号拥有,任何人不得未经授权转载。 如果你觉得本文有用,欢迎分享给其他人。谢谢。