1. Scrum不是万能药,要在时机成熟时推行。

什么时候算时机成熟呢?我们的经验是需要两点:一、团队有三名或以上的研发工程师 ;二、 团队内有一名合适的Scrum Master 。

刚开始的时候,一个开发团队可能只有一名或者两名研发工程师。这时候并没有全面推行scrum的必要 ,而可以借鉴scrum中的一些做法。比如有道云笔记的Web团队最初就是这个情况。当Web团队只有一名研发工程师时,我们就尽可能地尊重他的工作方式。同时为了保证项目进度可控,我们引入了scrum的sprint机制--以sprint为开发周期,每个sprint进行一次Web产品演示。这不但能够让工程师有一个以sprint为期限的压力,还能够让其他同事即时地了解项目的进展,以便做出相应调整。当Web团队扩充为两名工程师时,我们又引入了结对编程、持续集成、相互代码审核等做法。直到Web团队的规模进一步扩张时,我们才开始考虑全面启用scrum。

当团队内无法找到合适的Scrum Master时,不要轻易推行敏捷。如果你的团队是由新人组成,或者即使有资深员工但是他并不了解或认同敏捷开发的话,那么你需要等待合适的Scrum Master出现。合适的Scrum Master需要具备几个特质:首先,他要认可敏捷开发这种方式;其次,他要熟悉业务,起到教练的作用,能带领团队走正确的流程;并且,当团队遇到问题时,他要有能力和担当引导团队做出决定,在团队成员遇到困难时,他要协助成员解决; 最后,他要能识别重要和紧急的事情,而并不是事无巨细的反馈到Product Owner那里。敏捷开发虽然希望团队自我管理,但是这需要一个过程,开始的时候,一个合适的Scrum Master至关重要。有道云笔记的Web团队在成立一年多以后才开始推行Scrum,很大的一个原因是在培养合适的Scrum Master。依据我们的经验,最胜任Scrum Master的人选是Tech Lead。我们也曾尝试过让产品经理担任Scrum Master,但是由于产品经理本身往往担当Product Owner,兼任Scrum Master会影响他在产品机会和产品体验等方面的投入。

2. 限制Scrum团队的规模,建立Scrum团队之间的协作机制。

随着业务的发展,团队会变大。这个时候不拆分团队的话,效率会变低。有道云笔记Mobile团队就经历过这样一个过程。很长一段时间Android和iOS的研发工程师组成一个scrum团队,有共同的Product Owner和Scrum Master。但是随着Mobile团队人数的增长,scrum会的效率却降低了。 虽然scrum会议只有不到半小时,但是当说一个平台的事情的时候,另一个平台的工程师会觉得无所事事。发现了这个情况后,我们把Mobile团队按照平台拆分成了两个scrum团队,以确保scrum会议上说的是每一名参与者都关心的事情。总的来说,参加scrum会议的所有人,包括产品、开发和测试,不应该超过9个人。

按照平台拆分团队,限制了scrum团队的规模,提高了scrum的效率。与此同时,多个scrum团队之间必须进行有效的协作。在初期,我们鼓励研发工程师通过面对面地商量,快速推进来处理平台之间协作的需求 。但是随着业务的发展,这样的协作越来越多,也越来越复杂,这样面对面的讨论往往会疏忽细节需求。比如说,有道云笔记3.0版本中的待办事项功能,就需要PC、Web、Android、iPhone以及Server多个scrum团队一起对这个功能进行产品定义和确定技术方案。这样复杂的协同需求需要额外的机制来保证。这个机制就是scrum master的定期会议。在这个会议上,我们会讨论各个scrum团队相互依赖的项目,安排好各scrum团队的开发顺序。对某一件具体的事情,其中的一位scrum master会被指定为具体负责人来驱动跨scrum团队的协作。同样,只有当scrum团队间的协作任务比较复杂的时候才需要引入这个机制。

3. 产品经理和研发工程师要拥抱scrum带来的变化

在引入scrum之前,一般的项目管理方式是版本式(瀑布)的,产品经理决定下一个版本做什么,预期发布的时间,然后由产品负责人或者技术负责人来兼做项目经理。这个时候遇到的问题是项目往往会延期,但是产品经理会有一种对项目把控的感觉。引入敏捷开发之后,这个事情变了,发布是跟着sprint走的。基于持续交付的原则,一次发布包含一个或者多个sprint的内容,而这些内容是由团队整体决定的,而不是产品经理个人决定。产品经理只是定义了功能需求的优先级,这些功能需求与代码重构、开发工具、以及市场运营等的推广支持等需求一起排期,最后由整个团队决定一个sprint做哪些东西。从表面上看起来,产品经理对产品的把控小了,为此,团队一位资深产品经理有过质疑。最后,我们还是说服了他接受敏捷。事实上,接受scrum并不困难。这样,产品经理可以把重心放在对产品需求的把握上,而不必整天问这个咋样了那个咋样了。而且,团队的开发效率,功能点完成的速度并没有因此而降低。

研发工程师同样要拥抱scrum,调整自己的工作方式。Scrum不鼓励过度设计,而采用涌现式设计。这意味着开始往往不会把技术架构做得大而全,而是鼓励快速出成果。当然这并不是说程序架构能够设计得很糟糕,而是说不要花太多的精力在未知的事情上,小步快跑。为此,代码重构是必须的。我们并不建议整个sprint都去做重构,更建议持续重构,把代码调整也分解成任务,每个sprint做一些。在一些大版本发布之后,重构任务的比例可以适当高一些。

4. 量化衡量团队的执行力的指标:完成度、评估准确度、计划合理度 。

当scrum团队不大的时候,可以依靠主观感觉来评估执行力。有道云笔记团队在初创的一年内,对sprint的完成情况是没有量化的评估的。

Scrum教材对执行力的量化评估用的是故事点和速率。由于团队成员实际上都是有道云笔记的用户,能够直观理解产品经理提出的需求。因此我们省去了用户故事,由产品经理提产品需求,而团队把需求分解成任务。经过一段时间的探索,我们定义了几个量化指标,其中最重要的是完成度,我们用这个指标来衡量团队的执行力。完成度 = 1 - 计划内未完成任务的剩余时间/计划内任务评估时间 。完成度的数值在80~90%之间比较好。过高的完成度说明sprint计划过于保守。有些管理者会怀疑完成度的准确性,第一是团队是否会把计划内任务的评估时间评估得过长,使得完成度看起来高?事实上根据我们的经验,团队对计划内任务的评估往往是偏乐观的。第二是计划内未完成任务的剩余时间是如何出来的?这个是由团队在sprint末尾评估出来的,因为这时技术设计多已完成,这个时间是比较准确的。我们也曾尝试过燃尽图,发现并不如完成度来得直观。

另外,我们还定义了两个指标来作为辅助参考。一个是评估准确度(计划内任务评估时间/实际使用时间),一个是计划合理度 (计划内任务使用时间/计划外任务使用时间)。这两个指标的历史数值可以让我们更加了解团队执行的情况。

5. 高效的sprint计划会的要素:预先梳理需求、合适的任务粒度、随机认领任务、运营调研任务、任务评估。

Scrum开发中,最重要的会议是sprint计划会。但是在这之前,产品经理和研发工程师可以预先梳理一下需求,以保证sprint计划会可以更加高效和准确。我们尝试过多种方式来预先梳理需求:发邮件、产品与研发面对面沟通、开需求梳理会。哪种方式更好,目前还没有定论。

Sprint计划会主要讨论几件事情:将需求分解成任务、评估每个任务的工作量、分配任务。每件事情都有各自的技巧。

首先,任务分解的粒度应该如何?Scrum开发一般认为任务分解得越细越好,但是在实际操作中我们发现如果分得太细的话是有问题的。比如说,认领任务、记录每个任务的工时和完成情况,都会带来时间消耗。我们经过较长时间的实践,发现0.5~3天一个任务是一个合适的粒度范围。

如何评估工作量和分配任务这两个事情是关联的,不同的人做同一个任务,往往时间会相差很大。所以这时候有一个艰难的选择,是让大家做自己熟悉擅长的事情,还是随机认领任务以达到团队人员对所有模块都很熟悉的状态。一个短期见效,另一个长期可发展。有道云笔记PC平台的scrum团队经历了一个从前者转向后者的过程。在开始很长一段时期里,scrum团队把自己PC客户端按模块进行拆分,每个模块由一位研发工程师负责,工作量的评估也以这个人判断为准。这个办法帮助团队快速开发了PC的第一个版本和后续几个小版本。但是慢慢的,这种做法的瓶颈就出现了。之前的模块划分随着项目发展变得有些过时,有的模块出现了瓶颈。在最近的几个sprint里,PC平台的scrum团队已经开始随机认领任务的方式。

此外,在实际研发工程中,往往会有一些由于团队没有相关的经验而比较不确定的事情。对于这样的事情,我们会先安排一个调研任务,并且将这个任务尽量安排在sprint的早期,并且凭借经验会在计划会上留出后续实际开发的时间。如果调研任务确定这个事情的复杂度可控,我们会在后续的sprint会议上根据调研成果分解出详细的任务,另一方面,如果这个事情的复杂度太大,那么我们会把完不成的内容放到下个sprint。

任务评估的办法,或者用纸笔写下后同时公布或者用估算扑克,两者本质上没有区别。当有较大分歧时经过讨论后再次评估,次数不宜过多,一般1-2次就好,不超过3次。如果讨论不清楚,scrum master不妨先定一个时间,让会议进行下去。后面实际开发过程中会越来越清楚。敏捷开发本来就是渐进的过程。

6. 流水化安排开发环节与测试环节。

如何安排测试与开发从项目一开始就是我们反复思考和尝试的问题。经过一段时间的实践,我们目前采用流水化的方式来安排开发环节与测试环节。具体来说,就是在开发sprint结束后再开始测试这个sprint的产出版本;而在开发的sprint内,开发团队fix上一个sprint的产出版本测试出的bug。虽然这意味着开发团队要在测试环节还未开始之时(Sprint计划会上)就要估计并预留出上个sprint的产出版本的bug的修改时间,在实际操作中,开发团队能够通过历史数据做出比较准确的估计。因此这种方式的效果是良好的。

7. 版本发布基本按照sprint周期。

我们通常在一个或者多个sprint之后(在测试环节之后)发布版本。具体选取几个sprint往往会参考一些市场情况的考虑,比如说将一个做了较多重构的sprint与一个做了较多新功能开发的sprint打包作为一个新版本发布出来。我们基本上不会为某个大版本打乱我们的sprint周期。

8. Scrum需要配备合适的工程实践,例如,单元测试、代码审核、持续集成、项目管理工具。

我们要求研发工程师必须要写单元测试和相互审核代码。测试驱动开发和结对编程目前还有许多争议,我们也不建议贸然尝试。在实践中,我们采用了简化版本,对可以写单元测试的模块都要求测试覆盖,并且通过测试覆盖率来量化单元测试的力度。此外我们将研发工程师两两结对,相互review对方的代码,只有经过review的代码才能最终提交。

此外,我们对代码进行了持续集成。每天凌晨持续集成系统会自动下载前一天的代码,进行编译和部署。Web端会直接部署到Web测试服务器,而客户端(PC、iPhone、iPad、Android)会自动拷贝到一个内部服务器上。测试人员或者感兴趣的人每一天一上班就可以用到最新的版本。

关于scrum的任务管理,我们采用过不同的项目管理工具,包括白板、开源软件等等。总的来说,工具只是简化了一些统计,scrum最重要的还是敏捷开发本身的思想。

Scrum敏捷开发实践之有道云笔记相关推荐

  1. scrum敏捷开发实践—leangoo任务看板

    任务板展现了我们在Sprint过程中所有要完成的任务.在Sprint过程中我们要不断的更新它.–如果某个开发人员想到了一个任务他就可以把这个任务写下来放在任务墙上. 无论每日站会过程中或者之后,如果估 ...

  2. [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum

    [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum 1,Scrum概述 上篇中提到敏捷开发有两种主流的方法,一个是XP,另一个是Scrum,本篇简要介绍Scrum方法.Scrum是 ...

  3. scrum敏捷开发工具实践分享

    随着敏捷开发越来越火,自然我们也不能落后,我们公司也开始向敏捷转型,前段时间请了Scrum中文网的廖老师给我们企业做了全面的scrum敏捷开发培训课,第一次对敏捷有了全新的认识! 而在我们实施敏捷的过 ...

  4. 线下活动【西安站】用Leangoo做Scrum敏捷开发实战课(免费)

    Leangoo诚邀您参加 2017<用leangoo做Scrum敏捷开发>实战课!在此实战课上,您不仅可以听到一线资深敏捷顾问带来的敏捷落地实践经验,还可以和众多企业同仁共同探讨敏捷实践过 ...

  5. 线下活动【深圳】用Leangoo做Scrum敏捷开发实战课(免费)

    课程安排: 时间:2017年8月12日  14:00 – 17:30  (13:30签到) 地点: 中南海滨大酒店十一楼海涛厅,南山区南新路3125号. 人数限制:100人 本次活动免费 课程概述: ...

  6. Leangoo大讲堂:免费Scrum敏捷开发实战—武汉站

    活动信息: 授课时间:2016年5月21日 下午 14:00 – 17:30 (13:30签到) 授课地点:武汉市洪山区民族大道一号光谷资本大厦二楼培训中心 人数限制:150人(企业报名每家限制3人以 ...

  7. leangoo大讲堂:scrum敏捷开发实战——深圳站

    授课时间:2016年4月23日 下午 14:00 – 17:30 (13:30签到) 授课地点:深圳软件园,南山区科技中二路深圳软件园二期14号楼三楼大厅 人数限制:150人,企业报名的每家限制为3人 ...

  8. 敏捷开发系列学习总结(11)——Scrum敏捷开发流程的三个角色、四个会议和三个物件

    Scrum敏捷开发流程主要包扩三个角色.四个会议和个三物件. 三个角色 Scrum团队中包括三个角色,他们分别是产品负责人.开发团队和 项目的直接管理者(Scrum Master). Scrum 团队 ...

  9. 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍

    如何避免Scrum敏捷开发团队反思会形式化? 迭代压力很大,根本没时间,而且,反思会上大家都在互相推脱责任,会议成了"批斗大会",所以团队的人都觉得这个会很鸡肋. 很多团队在开反思 ...

最新文章

  1. js中操作数组的一些方法
  2. [转]Oracle DB 复制数据库
  3. python手机版下载3.7.3-Python 3.7.0 来了!
  4. SSM实现导出报表为Excel
  5. linux解压tz zip,TZ 文件扩展名: 它是什么以及如何打开它?
  6. java 多线程 举例,Java多线程简单举例
  7. oracle中的ROLLUP函数
  8. ul阻燃标准有几个等级_UL阻燃标准
  9. 浅谈弱监督学习(Weakly Supervised Learning)
  10. 【python】列表元素统计
  11. 一元云购CMS微信分享打不开解决办法
  12. Quartus 软内核NIOS II 入门指导
  13. pyecharts查看版本_pyecharts 安装及使用指南
  14. 用Python找回微信撤回信息
  15. 我靠海外抖音搬运视频赚到了人生第一桶金:这个风口行业,真的很赚钱
  16. Windows日常使用快捷方式
  17. Win11关闭Windows Defender实时保护,暂时关闭和永久关闭方法 | Win10怎么永久关闭Windows Defender实时保护
  18. ERROR | RuntimeError: Python 3.5 or later is required
  19. 吉林大学软件学院——UMl作业3
  20. 多方安全计算-秘密共享

热门文章

  1. HTML、CSS要点精华
  2. 数据加密存储---加密文件系统(EFS)介绍
  3. mldonkey 安装详细过程
  4. excel表格内文字怎么换行_Excel | 单元格内换行与撤销换行的方法
  5. 云计算在互联网发展史中的坐标
  6. DNS加速之“智能DNS”跟“双线加速”、“CDN加速”的区别
  7. Java位运算优化:位域、位图棋盘等
  8. matlab如何保存csv文件,Matlab:将输出写入csv文件
  9. 观察 :人工智能与伦理道德
  10. 151202storyboard中, 设置子控件和父控件的高宽比