软件交付的演进历程( 五 )

(真正的)敏捷开发

如果设计可以随着迭代过程中的学习进行更改,那么只做每次迭代所需的设计就会有利于减少可能的返工。

这其实是最难的一步,因为它不仅要求改变项目团队中的一些职能部门的工作方式,还包括支持部门工作方式的改变。

我们没有足够的架构师,无法为每个团队都配备一个,指导他们进行持续的架构选择。架构师们需要定义好实践、原则和强制措施,确保设计符合指定的约束条件,而不是定义一个固定的架构。

开发工程师们将被赋予更多的责任。他们要完成针对问题给出最佳解决方案的任务,而不仅仅是按照需求规格说明书进行软件构建。架构师们不再面对交付的挑战,因此他们的假设经常不正确。最前线的开发人员在面临挑战时往往能提出更好的解决方案。

不进行预先的大量设计,就很难预估时间和成本。在瀑布项目里,时间和成本是基于项目启动时的估计确定的。在增量开发中,项目范围会根据实际遇到的新情况进行调整。时间和成本估计仍可以根据对交付的大致理解和团队规模进行,不过因为项目范围会有变化,投资回报率(ROI)和价值实现进度(benefits realisation schedule)无法在前期给出。

推荐阅读