准备工作 ?第一个决策是最简单却最为重要的,属于意识形态的一种:那就是软件是由开发者控制的。开发者需要控制软件,而不是反过来,让管理者、产生负责人控制软件。唯一能控制软件的人就是编写它们的人。 第二个决策就是必须拥有能够掌控的小型工作单元。先解决整个问题的一小部分,并部署到生产环境中,显然比让整个大型项目挂掉要好得多。将初期的小型工作单元作为后面探索的测试平台。 开发者有责任一直掌控软件,这是关键,其它都是手段。一旦出现bug,就会影响到开发者的工作日程(修复bug!);此外最后期限也会确定开发者的工作日程和软件质量(在此之前完成工作!);这样等到最后期限到来时,开发者需要对尽在掌控的那部分软件实施部署,而将不在控制的那部分回滚。 对软件所做的任何变更都应该是简洁快速的,并且是将系统从一个稳定点移动到另一个稳定点。宁可少完成一些内容,但要保证完成的部分质量优秀。一旦部署的内容中有错误,就会影响到生产数据,修复起来代价极高。最糟的情况下,甚至必需重置多年来的数据,这样十分浪费时间。 软件是以一系列项目的形式写就。每个项目都是很小的、独立的,并有确定的完成时限。每个项目的人数都很少,不超过6个;完成时间都不会超过2个半月;并有确定的成功条件。项目的成功标准就是:该项目能够完成自己的工作。 每个项目都始于24-72小时全神贯注的基础工作,这段时间为整个项目奠定了核心,为系统可行性描绘出了原型。如果基础工作失败了,这个项目就会被放弃,同时让开发者从中学到经验。所有工作都能被简化或者切分为项目的核心工作,这部分工作的目标就是为了查看整体项目是否可行,并建立所有人对这个项目的信心。 每个项目通常都是一次赌博:做从未做过的事或者高风险/高回报就是赌博。选择新编程语言是赌博,使用新框架也是赌博,采用新的应用部署还是赌博,了解哪些地方是在冒险,哪些是软件的稳定因素,这是我们控制风险时需要知道的。准备回滚也是出于负面因素而进行的赌博。 每个项目始于“在这个项目中我们不会解决的问题”列表,列表中的很多东西似乎很有诱惑力,限定范围会帮助我们设定需求重点,定义哪些是未来需要拓展的,并将这些内容放在以后的其他项目列表中。 了解项目在整体中所处的位置:越是核心的组件就需要更多测试、开发速度越慢、对错误白癜风早期儿童白癜风
|