所有敏捷团队的目标都是一样的:在每一个迭代结束的时候开发出一个潜在的可发布的产品。
有时候也会叫作潜在的可交付的产品来代替潜在的可发布产品。这个目标的意图是为了让团队每几个星期就能够提供足够好的产品交付到客户手中。
但是到底什么是潜在的可发布产品呢?
仅仅因为它可能被发布并不代表它应该发布。
首先我们要知道它被叫作潜在的可发布版本的原因是很重要的。通常要真正发布一个产品都是出于商业的考量。它通常由交付一个产品的更新的成本和用户获取更新的成本来驱动。
如果你们产品的发布是比较大规模的,你们不会每个迭代都进行发布更新,而是选择不那么频繁的发布。例如:我们回到当软件产品还是通过CD来发行的年代,一年发布一次是很寻常的。发布的主要费用是制造和邮寄这个大的产品的所有必需的CD。
同样的,如果客户获得一个产品的新版本的时间成本或金钱成本很高,你也希望它不那么频繁的发布。假设你买了一个最新款的IPhone,而一个星期后,Apple公司又发布了一款新的IPhone,并且一个星期后又发布一款,接着下个星期又发布一款。那么你肯定会很失望,因为仅仅只过了几个星期,你当时买的IPhone就已经落后了两代了。
虽然什么时候发布产品是由商业因素决定。但是即使真正的产品发布不是很频繁,你的团队每个迭代仍然应该以潜在的可发布版本为目标。
潜在的可发布产品的三个关键特征
为了让产品可以成为一个潜在的可发布版本,改进产品的新功能必须满足下面三个条件:
- 高质量的
- 经过充分测试的
- 功能完整的
经过充分测试
任何潜在的可发布版本都必须经过充分的测试。并不是所有的产品都需要经过同等级的测试--医疗管治设备的授权比纺织扫雷舰的网需要更多的测试。但是如果你们发布一个没有经过充分测试的产品时,你的顾客肯定不会高兴。
高质量的
除了经过充分的测试外,研发团队必须修复足够多的缺陷才能使用户认为你的产品是高质量的产品。这并不表示每一个缺陷都需要修复。但团队修复缺陷至少要满足缺陷管理政策中规定的严重等级及频率。
功能完整的
为了使产品待办事项都完成,与之相关的所有事情都必须包含在内。例如,如果一个产品包含用户手册,那么用户手册必须是最新的。
但是潜在的可发布版本不必是紧密耦合的
那么被认为是潜在的可发布版本,产品的更新必须是高质量的,经过充分测试的,并且是功能完整的。但是并不意味着是一个紧密耦合的功能集合。
请记住创建一个潜在的可发布产品不并意味着你必须每个迭代都发布它。意思是在正式发布前包含在发布列表中的功能可以在早期的迭代中被忽略。
例如,你可能不会发布一个只允许用户登录但不允许用户退出的系统。不过只有登录功能,没有退出功能也可以是潜在的可发布版本,只要能满足上面三点要求。
一个潜在的可发布版本就是将他所做的事情做好。但是它并不需要做所有的事情。这正是迭代和增量开发的要点:从一个初始版本开始开发,然后不断的改进,不断添加新的特性,使它更完善。
如果你在一些迭代中不能交付潜在的可发布版本,那么会发些什么呢?
如果在一个迭代结束时未能交付一个潜在的可发布版本,那么敏捷团队应该做些什么?
这取决于敏捷团队是在迭代刚开始时判定的(例如,在做敏捷计划会议中)或者在迭代已经进行的时候发现的。
如果你是在冲刺计划会议中发现的
如果冲刺计划会议中敏捷团队判定这一个迭代不能交付潜在的可发布版本,那么团队成员应该考虑将一些功能从这个迭代中放弃。与其做7个功能点而不能达到可交付状态,还不如改为做6个功能点却能完全交付。
有些时候,不管团队从计划中放弃哪些工作他们都判定他们无法达到可交付目标。大部分时候是由于团队没什么经验,但有些时候可能也是因为那些工作确实是不能分割的。
如果你发现你们和这个情况一样,在你们要放弃可交付版本的目标前再努力一把。然后再接受现实,你们确实不能像计划中那样完成可交付的目标。
如果你确实做不到,那么你真的是做不到。但至少在放弃之前努力(再努力)。
最后,有一些些内疚,因此你也不会经常这样做。
如果你是在迭代过程中发现的
如果团队在迭代过程中发现他们将无法交付一个潜在的可发布版本,那么团队成员最好的方法就是讨论一下为了可以交付一个可发布版本,你们可以放弃哪个功能。
通常情况下,为了让我们成功交付版本有些用户故事可以部分实现或者被从这个迭代中移除。这里大家要记住交付一个潜在的可发行版本不一定要交付一组紧密耦合的功能的。
成为潜在的可发布版本是一种好的习惯
以我的经验来看,尽可能经常地达到潜在的可发布版本对于敏捷团队来说是一个很好的习惯。那些不能达到这个标准的团队常常开始频繁的与可交付版本失之交臂,或者在很长一段时间内都将是这样。
就像我已经指出的,团队可能有一些迭代并不能达到潜在的可发布版本。但当团队一次两次甚至更多的迭代都没法交付的话,那么团队就会离真正的交付目标越来越远。
这不仅仅意味着团队跟他们实际的交付能力交付相比,团队可能会交付更少的价值,而且让团队更难评估要将产品待交付项成功交付到底要花多少的功夫。