Agile是一个重大创新,程序虽乱,由测试钳制着。结构设计好了,能不断更新。
对小公司和大公司中的小单位,最大的问题是客户不清楚,客户需求不清楚或是变动大。这时候就需要一位顶尖高手大概设想这个软件需要一些什么功能,大的构架是怎么样的,然后迅速地把整个工程分成几大块,各个分系统之间如何联系,每个分系统在每一个施工周期里要大概完成什么功能。然后每个程序员认领或被指派这些小功能。每一个这样的小功能可能需要一个周期设计和试验,再一个周期Code和测试,测试最好写成UnitTest,这样以后不管谁来改,不会捅大漏子。
在好的项目中,刚开始的时候,数据,逻辑,UI,基本的构架Back Bone就写好了,各个分系统都有MockUp,整个系统可以运行,用户很早就可以看到一些关键的功能的演示,尽管那些都是“表面文章”。一个施工周期过后,写好的每一个功能都连到基本的构架上运行,用户可以看到这些新功能,以及整个系统变成了什么样。如果用户有异议或者任何人有改进意见,下一个施工周期就可以试验或实施。这应该算是Continuous Integration.
一个施工周期不长,三个星期左右,再有一两个星期合成,Deploy,测试。一个程序员可能负责几个功能,一个施工周期内全做完。也会有可能一个程序员要几个施工周期才能做完一个功能。有大致的计划和时间表,有大的软件构架,但是没有完备和准确的功能清单和交货时间,这应该是Agile的意思。
至于Code的混乱,有经验的程序员在忙乱中也能把程序写得有模有样。经验不足的程序员只能有时间的时候回过头来清理程序。有Unit Test, 问题不会太大。
这几年来在市场,用户,需求,功能都剧烈变化的小公司里,Agile发挥了很大的作用。但是在大公司,做大项目,是Agile未经验证的领域。Scrum Master,Micro Management,这些大公司病不可能因为大公司用了Agile就消失。当然,大项目也不会因为有了Agile,所有的难题就自动消失。一切都在探索之中。