今天听了一个内部的分享,结合自己以前的经历,记录整理一下:
什么是Scrum
Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球。
虽然Scrum是为管理软件开发项目而开发的,它同样可以用于运行软件维护团队,或者作为计划管理方法。Scrum之间的合作称为“Scrum of Scrums”。
Scrum是一种系统而不是具体的过程。只要基于这套系统或者说原则,其具体实现可以是多样的。
Scrum中的角色
Scrum当中的角色主要分为:
Product Owner(PO):主要负责维护Product Backlog,类似产品经理的角色。Product Backlog类似于一个基于重要性排序的feature库。那么PO需要对真个产品线有足够的了解,才能正确的对不同的feature进行排序。而且PO需要将feature拆分到足够小,并且定义的足够好。所以通常PO适合由有一定资历的人来担任。
Scrum Master:主要承担项目经理的角色。控制团队进度;带领团队进行Scrum实践;保护团队。保护团队有很多方面,比如:确保在一个Sprint内每个feature的优先级不会发生变化。
Scrum Team:唔,干活的咩。采用一些敏捷方法还是很好玩的。而且当团队采用Scrum的时候,有些东西可以自底向上完成。
Product Engineering Manager(PEM):唔,在哪里都有老大咩。
Sprint
Sprint就是一个开发周期。每个开发周期从product backlog中选取合适的任务,然后大家一起开发。个人认为一个比较好的实践是:首先对任务进行拆分,并通过一个相对点数进行时间预估。然后组员依次根据重要性选择任务进行完成。当一项任务完成之后,再选择下一项完成。这样的好处是能够保证一个人在单位时间内相对专注。专注往往意味着高校。
一个比较好的经验就是:不要把对于项目预估的点数用作其他任何用途,特别是考核。一旦有了其他用途,点数往往将不能够继续保持其真实性。从而导致整个团队无法真实的预估项目进度。
Definition Of Done
其实这是一个很好的话题。什么叫做做完了一件事情:Code Ready?Release?Pass Test?每个人都有不同的定义,如何达到一个共识。
延伸一下,为什么做这件事情。是想验证一个假设?想发布一个功能,从而改善产品?这件事情怎么算是成功?怎么算是失败?换句话说,如何判断是否继续投入资源,甚至砍掉这个功能。这些东西应该在一开始就定义好,并且一直坚持。
Action
我会尝试在自己的工作中引入Scrum。我并不认为这是一个需要全组都采用,否则就不能使用的模式。基于我对它的理解,我认为其关键点如下:
任务的拆分与预估。把任务拆分成足够小、足够独立的部分。从而使得整个过程更加可控。这一点对于我来说会是一个难点。刚开始的拆分和预估都可能会做得很烂。Practice makes perfect。只要保证所有的数据真实且完整,就好了。
Weekly Sprint & Daily Scrum。以周为单位计划工作,这样能够有一些buffer来完成较难的工作。每天回顾总结一下当前进度,能够帮助自己及时作出调整。是需要加加班;还是需要通过一些方法来unblock自己;还是就是预估错误了,需要delay或者cut off。
Definition Of Done。提前明确好Goal & Non-Goal。这样可以让他人作出正确的预期,同时避免南辕北辙的故事。
工具。个人觉得One Note对于一个人来说就够了。所以目前我会采用One Note来帮助我进行实践。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。