# 价值驱动
与制造业和建筑业相比,IT是一个年轻的行业,很多软件管理者认为软件是一个生产建造过程,因此在寻求软件交付管理指导时,他们已经将其与工业制造或者基建工程相类比,在这种思维模式下,他们自然期待可预测性,然而通过详尽的项目计划和发布计划活动可预测这个梦想,其实从未发生过。
项目计划是一种预测,它预测由N个人组成的团队奖在Y日期前完成X工作量的任务,当我们将软件开发视为生产过程时,似乎就可以假设软件开发可预测,但事实并非如此。不断重复的失败已经教育了我们,执著的追求可预测性并不一定是一个好的方式。如果把软件开发这个过程当成生产,我们先来看看这个过程它生产了什么,什么是软件开发的产品。
如果软件开发是生产过程,那么它最终的产出的应该是可用的产品,而不是放在仓库里的源码或二进制文件,产品是给客户使用的东西,因此只有当部署好的软件给客户提供服务时,那才是真正的产品。源码一定程度上代表的是对这个软件的设计,在软件开发过程中,任何团队总有一些“不知道自己不知道”的东西,在开发过程中,团队会遇到意想不到的挑战,一般不可能通过前期工作来根除“不知道自己不知道”的问题,谁都不能将无法预料的事情进行预先设计,在无法预先设计的情况下,计划将会失去原有的效用,在这时我们思考的方向就变成了追求价值而非可预测性。
与其追求可预测性,还不如尝试追求适应性和价值最大化,这其实就是敏捷宣言中说的:“响应变化高于遵循计划”。为了最大限度的提高适应性,拥有良好、快速反馈至关重要。价值驱动的团队能以稳定的速度增量交付有价值、有用的功能,但可能无法准确预测在什么日期交付什么功能。在价值驱动的模式下,团队不预先定义解决方案,只定义问题。在价值驱动的团队中,响应能力会受到团队设计的影响,如果带着重视响应能力的思维,我们就会从客户或者请求者的角度来考虑时间效率,而不是从服务者的角度来思考成本效益。