软件流程的名称太多,RUP,V
Model, ISO9000,CMM等等不一而足。最近接触了SCRUM,收获良多,与诸位同仁分享。
自从有人类社会活动以来,就形成了各种各样的组织和制度,上到社会体制下到家庭环境,西方到东方,社会风尚、工厂流程、等等,这些东西都具有一种共同的特点:都是为了适应一点的社会目的、解决一定的组织问题,而形成的。软件的流程,也具有类似的特点,只不过是适应软件规模化生产而成的东西。我只所以这样说,目的是希望大家不要把软件流程这种东西神秘化,另外也不要把它当成无所不能的万能钥匙。所有为社会化活动定义或者自然形成的东西,一方面有其解决问题的一面,同时也有他的瑕疵。
软件形成的初期,没有任何所谓的process,天才工程师似乎可以把当时的所有问题彻底搞定。随着软件规模化生产以来,所有具体的软件活动,比如设计、分析、项目管理等都有必要纳入流程管理的环节,从而达到可控并优化的目的。软件流程的先驱们从,工业生产、统计科学、心理学等等借鉴了多方面的有价值的东西,而形成了如今各种各样的所谓的软件开发流程。我在工作中也接触到各种流程的思想和操作。有时候老板们总是希望流程来解决碰到的问题,可是有时候又形成了一个过于流程化的局面,为了完成一个小问题,却要付出几倍的流程的成本;有时候某一个流程过于僵化缺忽视了真正应该重视的问题。软件生产是一种智力活动,这又具有很大的不同,某些方面非常难以把握,太硬性的东西反而戳伤了员工的创造性。等等,我相信所有参与过软件开发的工程师,可以列出更多的问题。如何解决种种问题,不同的软件流程都提出了一套不同的方法。现在看这些,process,
我们不能说那一个更好,只能说那一个更适合你。如同找老婆,没有最好,只有更适合自己的。
绕了这么一大堆,我只是想澄清一下对软件流程方面的基本认识。对与不对不同的人可能有不同的看法。下来我想聊聊SCRUM,我不想列举SCRUM如何具体操作的步骤,网络上有好多这方面的资料。诸位可以找相关的资料看看,我这里只想写一些对SCRUM的感受,列一下我所理解的SCRUM具体的思想精髓。欢迎网友和我交流,也使我能有所提高。
软件开发是一个复杂的群体智力活动
SCRUM把软件开发看作,是一个解决复杂问题的群体的、智力劳动。这一点很重要,首先这把软件开发与平常的工业化流水线生产区分开来,让我们认识到软件开发的特殊性。你可以把软件生产比作流水线生产,可是软件生产是一种特殊的群体智力活动。不认清这一点,就不能把软件开发中人的因素放在首位。不是说,软件工程师都培养成象流水线上的工人,你的企业就成功了,这恰恰是一个软件企业行将没落的一个不好的兆头。软件生产需要创造,需要思想活跃的人才。苹果公司有了乔布斯就活了,还活得有声有色,这就是人才的重要性。企业的CEO需要如此,同样从事具体软件创造的工程师也需要有创造性的环境。真真成功的企业100%都是有创造性产品的公司!SCRUM基于此,提出软件开发团队需要时自我学习,自组织的团队,来到达充分利用各个员工智慧来解决复杂问题的目的。
为了充分利用团队成员的智慧,众人拾材火焰高吗!!!SCRUM实施的过程中有如下的具体操作:
1)任务不是有SCRUM master 自作主张分发的,而是有团队成员主动申请。这就是task 的poll方式;
2)SCRUM master 不是老板,开会的时候不是听取汇报的。而是帮助团队解决困难的,要保证团队成员到底彻底的沟通理解;
3)Inspection 要做到发挥团队其他成员的积极性,及早发现错误。当然这一条也不是SCRUM 特有的。但是SCRUM
对此事重点强调的噢!!!
4)要重视团队的自组织行为,团队为了解决一下问题,总是会找到一个最合适的方式来达到有效解决问题的目的。SCRUM
master 应该鼓励这样的行为。
有效的沟通是软件成功的关键
沟通,沟通,沟通。国际问题,家庭问题,上下级问题等等都需要需要沟通。归根结底是人际问题,人之所以为人,科学家说,因为人有语言善于沟通。可是具体中许多问题,恰恰是缺乏沟通造成的。软件开发过程也是一样的道理,客户需求没法被所有人理解,变动没有在个个关系人之间有效地传达。项目存在的问题,没有被领导和解决问题的负责人发现,等等都是由于没有沟通造成的。由于这些原因造成的损失往往是致命性的!!!
需求方面所有的软件开发过程都强调,需求变更的管理以及能适应需求不停变化的现实情况,可是我个人认为SCRUM所定义的运作方式做得彻底、做到比较好。表现在如下几方面:
- 客户的需求被Product Owner全面反映到TEAM中来
- 客户看到的是一个可deliever的东西,基于此客户可以有更现实的想法或者,更合理的变动
- 每个Sprint开始,需求的变动被及时地反馈给TEAM
- 需求的优先级,满足客户利益的最大化
团队开发方面:
- Daily SCRUM Meeting使团队的进度得到同步
- Daily SCRUM Meeting使问题及时地发现并尽快得到解决
- 不同Component之间的依赖,也能得到有效沟通。这是有效解决的前提
- 项目的困难进度,能使客户,领导及时得到
另外,团队的成果,客户能及时地看见,客户能够通过Product Owner将需求及时反馈给团队,这大大促进了项目的成功,减少了项目的风险。
自我检查及时调整是团队走向成功的保证
古人云“日三省乎己”,对人如此对一个组织也是这样。返过头来,看看我们的软件开发。我看到过一些组织有下面一些问题,网友同志们或许有其他补充。
- Process太过于费时,浪费了大量的时间
- 以前曾经就有这样类似的教训,现在还犯
- xxx问题已经拖了很长时间了,为什么还没有解决
- 大家长时间地走一步看一步,没有一个规划。好象没有人来解决
- 一件事情,反复地改,脑子里面长水了。不理解这些人怎么想的
- 。。。。。。
我相信大家或多或少碰到过类似的问题,有问题比有问题却发现不了问题强得多了。如果有问题,及时地自我发现,并能够及时地调整,这是一个健康组织必有的一套体系。只有这样一个组织,项目才能很好地适应市场需要,很好地站稳脚跟。可是,能做到这些,并做好并不是容易的事。
SCRUM有专门的定义来做到发现问题解决问题的目的:
- Sprint结束时要审视自身。Retrospection meeting
- 发现问题要及时调整
- Scrum Master 要对这些活动在Process上负起责任来
结语
SCRUM是从软件管理的角度定义的一个Process,现在越来越得到软件开发群体的认可。本文只是一些个人的认识和看法。软件管理是一门“艺术”,SCRUM不可能涵盖所有的问题。这就需要具体的执行人scrummaster,要具体问题具体分析。希望本文能对大家理解SCRUM有益。欢迎交流,批评和指正。
|