Scrum是敏捷开发的一种,是一种以人为本,迭代式增量软件开发的过程,以英式橄榄球争球队形(Scrum)为名,因此可以想象,整个团队是高效而富有激情的。以人为本,即Scrum开发特别强调沟通,要求团队所有人员都坐着一起工作,通过高效的沟通解决问题。
传统的软件公司大都是使用瀑布开发模式,流程是以下这样的:
瀑布开发模式
瀑布开发模式一般都需要很久的开发时间才能交付,笔者目前所在公司,以前开发产品都是利用瀑布开发模型,往往需要至少三个月到半年的开发周期,而过程往往都是这样的:产品经理完成一款产品的所有需求—UE设计出原型和视觉— 开发完成开发— 测试完成— 产品经理和UE验收的时候永远是一副不可思议的惊讶表情,觉得交付的产品和自己当初的设计相差甚远,这个时候就会出现很纠结的事情,改?还是不改?改,牵扯到软件结构,项目周期,交付时间等一系列问题;不改,产品最终效果无法交付。因此最终的结果都会是稍微改一点,即产品结果接近而不同于原本需求,所要增加的人力和时间成本又不会太高。另外还有一种情况,就是开发过程中遇到不可抗拒的需求变更,这个时候对开发的架构、交付日期都有非常大的影响,经常出现一个变更导致前3个月甚至更久的工作返工白做,而这个时候浪费的成本是非常大的。久而久之,会发现每次的产品开发都是这样一种令人疲惫的模式。
上述这种情况,我相信有很多团队都会遇到,而且很普遍。当然这里有最大的问题是,产品经理和UE交付了需求和设计之后,则和开发团队的沟通变得很少,开发和测试团队遇到问题,也很少和产品经理沟通。这里原因很复杂,可能和人有关,可能和公司文化或者公司流程有关。当然,这不能说是瀑布开发模型的错,只能说瀑布开发模型比较容易出现这种问题,原因很简单,开发周期越久,不可控的因素和风险就越大,最终的结果就越容易偏离最初想法。
而敏捷开发的流程是这样的:
迭代瀑布
可以看出和瀑布开发模型的区别了吗?就是将一个完整的瀑布开发过程切成很多个短的,迭代式的瀑布开发过程,即迭代瀑布。那么这么做,就一定能解决上述遇到的问题吗?本文将在最后给出答案。
以下是标准的Scrum开发模式:所有的需求都到达PO/PM这里,整理出Product backlog,每次的迭代开发(Sprint)都是PO/PM从Product backlog里挑出需要开发的部分需求,然后团队一起开planning meeting,确定出sprint backlog及交付日期。接下来利用2到4周的时间进行开发和测试,其中每天都要开站会(Scrum meeting),团队内部成员在这个会议上了解整个迭代的进展情况,最终交付后,团队一起开sprint review和retrospective会议,而这整个过程都有一个很关键的角色Scrum Master来把控和组织。
标准Scrum开发模式
这样描述可能还不太理解,下面则进行详细的分类描述。
Scrum开发一般建议为2-4周为一个周期,以两周为例,整个时间线大概如下,可以看到第一个迭代的结束和第二个迭代的开始是有重合部分的。
Scrum开发周期
Scrum开发有一个“三三四”原则,即三个角色、三个产出物、四个会议:
三个角色:PO、Scrum Master、Dev Team
三个产出物:Product Backlog、Sprint Backlog、Potential Shippable Product Increment
四个会议:Sprint Planning、Daily Scrum Planning、Sprint Review、Sprint Retrospective
Sprint Planning:需求评审会和迭代启动会,这个会议上,需要得出以下结论:
Daily Scrum Planning:每日站会,顾名思义,就是站着开会,大家围成一个圈或者半圈,这样做有两个目的,一个是高效,另一个是可以方便团队所有人都可以看见对方。站会的目的有以下3个:
站会的时间,建议不超过15分钟,只描述状态和任务,不讨论技术细节,另外,每个人围绕以下3个话题来简单描述自己的进展:
站会的时候,Scrum Master一定要注意以下问题:制止不必要的讨论、禁止小会、控制发言时间、不要跑题等,另外,站会的时候,Master需要修改燃尽图(后面会有对燃尽图的详细描述)。
Sprint Review:迭代评审会,此次会议的主要内容是相关利益者及团队成员展现本次迭代的功能增量,需要注意的是不展示未完成的功能,也不需要PPT,演示结束后记录好相关反馈。很多采用敏捷开的团队都不开Review会议,其实Review会议是有一定的好处和目的的:
Sprint Retrospective:迭代回顾会,会议主要是回顾此次迭代的整体情况,一定要全员参加,一起回顾此次迭代做的好的地方,以及需要改进的地方,并对这些需要改进的点,提出改进措施。
User Story:即用户故事,是一个解决用户某个问题的,对用户有价值的,某个功能的,一目了然的描述。这里有一个理念需要注意,即多个小故事胜过一个庞大的故事,因此User Story的描述非常重要,好的用户故事具备INVEST原则:
User Story的描述一定要站着用户角度,而且一定要注意颗粒度,一般以这种格式”作为一个<角色>,想要<活动>,达到<目的>”来描述。另外,根据经验,笔者建议描述的时候可以不用这种句式,但是思考的时候一定要这样思考,因为所有事情,过分的追求形式就会失去他本身的价值,但是从这个角度去思考每一个需求和功能点,对产品经理分析需求确实有非常大的帮助。接下来举几个User Story的例子:
“图片编辑功能“:不是一个好的User Story,首先颗粒度太大,其实大小不可评估,因此需要对这个需求做拆分,拆分成小的User Story;
”作为一个喜欢自拍,又希望自己可以拍出来比较白的用户,可以通过图片编辑的美白功能,使自己看起来白一点“:该Story是一个比较好的User Story,当然,思考这样思考,记录的时候,完全可以简单描述为”图片编辑增加美白功能“。
User Story的分解是一个技术活,对产品经理是有一定的要求的,当然,一切从用户角度出发,多思考用户场景,那么这个问题也就也就没有那么难了。
Product Backlog:User Story的集合,即产品需求池,这里面包含所有和该产品相关的需求,根据笔者经验,这些需求最好包含以下状态:need to check、pending、reject、planning、developing、released、wait to dev,这些状态基本包含了一个需求的所有可能的状态,对产品经理管理需求有非常大的帮助。
看板一般是一个物理白板,目的是做迭代进展可视化跟踪和协作沟通。看板上需要将每个人的任务,以对应的状态(To Do/Not checked out、Doing/Checked out、Done)展示出来,一般使用便签纸。
同时要在白板上画出燃尽图,燃尽图指示的是当前剩余的工作量,是一个跟踪项目进展非常好的指示器。燃尽图上一般有2条曲线,如下图的燃尽图,灰色的直线表示的是最优剩余工作量曲线,蓝色的表示实际的剩余工作量曲线,正常情况下,蓝色的线应该在灰色的线上下浮动,并在最后一天合到同一个点上。燃尽图可以在每天站会的时候由PO更新状态。
看板&燃尽图
关于看板和燃尽图,有以下一些需要注意的点:
上述基本将Scrum敏捷开发的核心内容和工作流程描述完全,那么在实际操作过程中,难免会遇到各种问题,下面笔者将根据经验,提出实操过程中需要注意的事项:
首先,回顾下文章一开始的问题,文章开始提到瀑布开发模型容易遇到的2个问题;
第一,开发结束时,交付产品无法达到预期:Scrum开发将开发周期缩短到了2到4周,并且每天通过站会的形式进行状态的沟通和跟踪,团队成员通过沟通来解决问题,这些工作方式理论上可以完全避免这种问题的出现。
第二,不可抗拒的需求变更,导致大量的资源浪费:根据上述敏捷带来的价值,我们可以看到,小步快跑+快速试错,即使浪费,最多也只是浪费2-4周的资源。
当然,Scrum开发只是帮助团队减少上述问题的出现概率,而非完全解决,这里的核心不是瀑布开发模式或者Scrum开发模式,而是团队责任感和意识的问题,没有责任感的团队,无论如何使用Scrum开发模式,也只会到徒有其表,甚至可能造成反作用,团队成员为了敏捷而敏捷,没有交付出好的产品,反而在这些形式上浪费大量的时间。所以,敏捷开发不是万能钥匙,有些领导一听说敏捷开发,就要团队去实行,结果往往造成更大的问题,因此,团队出现任何问题,都首先要从根本出发,寻找问题原因,再进行对症解决,Scrum开发模式只是办法之一。
另外,Scrum开发里所有的工具和方法都只是协助,不要过分的依赖形式很重要,敏捷只是一种方法和理念,或者说是一种态度。现在很多互联网公司,虽然没有在嘴上每天吵着敏捷开发,没有看板,也没有站会,或者将Scrum开发的流程“本土化”,但是他们依然敏捷,依然可以高效的开发和产品迭代,原因很简单,使用了敏捷工具和流程并不是真正的敏捷,“敏捷意识”最重要。