现在新的故事卡片出来了:
用户故事        故事点
卖饮料        4
取消购买        2
输入管理密码     1
补充饮料        3
取出钱箱里的钱        1
安全警报        2
打印月销售文本报表        2
总计        15

还有其他的2.5个故事点要推迟,我们可以简化“卖饮料”。假设本来我们可以卖不同价格不同类别的饮料。如果现在我们只是简单支持一种价格一种类别的饮料的话,那这个用户故事的故事点可以从4减到2了。客户如果同意的话,我们可以将“卖饮料”分割为“卖单一饮料”和“卖多种饮料”,然后将后者推迟到下个周期发布:
用户故事        故事点
卖单一饮料        2
取消购买        2
输入管理密码    1
补充饮料        3
取出钱箱里的钱        1
安全警报        2
打印月销售文本报表        2
总计        13

现在还剩0.5个故事点,我们再考虑一下“安全警报”。假设本来这个故事是要同时触发本机上的警报,跟通知附近的一个警察局的。如果现在我们只是触发本机的警报,那所花的故事点可以从2减到1了。于是在客户同意的情况下,我们将“安全警报”分割为“本机安全警报”和“通知警察”,然后将后者推迟到下个发布:
用户故事        故事点
卖单一饮料        2
取消购买        2
输入管理密码         1
补充饮料        3
取出钱箱里的钱        1
本机安全警报        1
打印月销售文本报表        2
总计        12

现在我们总计有12个故事点要做了(<=12.5)。上面这个筛选在本次发布的用户故事的过程,叫“发布计划编制”。

增加开发人员来满足发布期限

在上面的例子中,我们以推迟部分用户故事到下个发布周期的办法来解决问题。这种“控制开发范围”通常是好的解决办法。不过,这种解决办法实施不了的情况下,那你只好保留所有的用户故事,然后增加更多的开发人员了。在这个例子中,假定我们需要“n”个开发人员,才能在50天内完成17个故事点。50÷ 10×2.5×n÷2.算出来,n=2.7,我们需要3个开发人员,也是多加一个开发人员进来。不过注意:
    团队人数加倍并不等于开发周期的减半。它可能只会缩短1/3。如果团队超过10个人的话,增加更多的人员可能反而会延缓项目的进度。
    而且项目开发周期越长,团队内的成员对整个项目代码的熟悉度越少,加上不确定的人员流动,新来人员的业务不熟等其他可能性,这项目会越来越复杂。
总的意思是,项目人数不能太多,周期不能太长。

根据参考值来掌控项目

每个迭代周期2.5个故事点的这个参考值,只是第一个迭代周期的数据,第二个迭代周期可能会变成2或者3(一般是不会变动得太大)。假设是2的情况下,那对于第三个迭代周期,我们要将参考值设为2,然后让客户以2为故事点总数来挑选用户故事。
对于大多数项目,参考值很快会稳定下来(比如在几个迭代周期后)。当这个值稳定下来后,我们要重新估计开发周期,重新进行“发布计划编制”了。如果这个参考值告诉我们,我们每个迭代周期可以做3个故事点的话,我们要让客户挑选更多的用户故事放在这次的发布计划中。相反如果这个参考值是2的话,我们要让客户减少用户故事(需要的话可以分割一些用户故事),如果团队人员还不多的话,可以增加更多的开发人员。

这是项目的初始阶段要注意的。

发布计划编制,估算每个用户故事时要考虑哪些细节,忽略哪些细节?

在项目初始,我们要找出这个发布周期内所有主要的用户故事,评估每个故事的故事点。可是要怎么评估里面的细节呢?比如对于“卖饮料”, “卖饮料”这个简单的标题,省略了很多的细节:用户会投入什么样的钱?纸币可以吗?人民币可以吗?按钮的灯的亮度要多少?可不可以多个按钮对应一种饮料?按钮被按下以后,要不要变暗?找零钱是不是全部找10分的面额?
我们是不是要考虑上面所有的细节?对于按钮灯的亮度,我们不用考虑了,它对我们的工作量没影响。不过,零钱的面额对我们的工作量很有影响,我们要认真考虑一下(找一堆10分的零钱很容易实现;如果要尽量减少零钱的个数比较麻烦了)。处理不同币种也要考虑。
    一般情况,我们不用太担心会漏过什么细节。对于每个用户故事,只要考虑一些“重要”问题行了。当然,这里面的“重要”,要根据经验以及客户的观点来决定了。