泡水膨胀球
这是一种小玩具,干燥时拿在手里,小巧紧致。
泡在水里,一段时间之后,浑圆饱满,一只手都未必能捧的住。
放在干燥通风的地方晾晒,一段时间过后,又可以恢复原本的大小。
软件需求
软件需求与泡水膨胀球也有类似之处。
一开始时看似简单明了且完备正交,做起来发现越做越大,越做越多。
原本一只手能抓好几个的小球,后来变成两只手都抓不住一个。
然后的结果要么是超预算多花钱做完,要么是转嫁成本给乙方要求对方做完,要么是延期,要么是痛苦地去压缩需求。
无论哪种,都是不健康的。
膨胀系数
小球泡在水里会膨胀,暴露于干燥环境中会缩小。
这个过程可以用一个简化模型来表示:
膨胀系数 ≈ 吸水力 - 斥水力
小球体积 ≈ 初始体积 + 膨胀系数 x 时间
当吸水力大于斥水力时,膨胀系数为正数,在时间的作用下,球会膨胀。
当斥水力大于吸水力时,膨胀系数为负数,在时间的作用下,球会缩小。
当两个力接近相互平衡时,膨胀系数约等于零,在时间的作用下,小球体积趋于稳定。
我们希望看到小球体积怎样变化?
一直变肥?那不行。做软件是有成本的,时间人力都是成本。
持续变瘦?也不行。需求受到过分压抑也是不健康的。
健康的变化过程应该是:
先让小球丰满起来(充分收集需求,以免后面出现始料未及的“惊喜”)
然后削减多余的赘肉(使用奥卡姆剃刀)
之后长期维持健康范围内的波动
力的阶段性施加策略
时间的流逝是不受我们控制的,因而想要控制体积就要从膨胀系数下手。
而膨胀系数又与两个力相关,因而想要控制体积就要控制吸水力与斥水力。
首先让吸水力尽情释放,这时斥水力蛰伏着静待吸水力的衰减。
之后斥水力爬坡,达到与吸水力持平的水准,二者长期和平共处。
当我们如上使用这两种力的时候,小球体积的变化就会是这样的:
总结
调研阶段积极创造环境来让吸水力得以释放,先允许小球变肥。然后施加一定的斥水力,让小球苗条下来。
到了研发阶段,由于吸水力在之前就已经得到了有效的释放,这时施加适量的斥水力来平衡所剩无几的吸水力就能让小球体积的波动维持在可控的范围内。
在不同的阶段有策略地利用这两种力,则可以趋近前期需求收集充分考虑各方诉求不留大的隐患,后续研发稳定不坐过山车的目的。