Scrum&Kanban在移动开发团队的实践 (一)
现在大多数团队都在谈敏捷开发,似乎觉得敏捷是软件开发的银弹。只需要实践下一些敏捷开发的模式就能如何如何,其实我觉得不论是敏捷开发还是传统的瀑布流开发都是有他们的市场的,取决于团队人员构成,取决你的产品的属性,所在市场的竞争环境。最终希望达到的目的都是一个:以最快的方式、最高的质量,实现所需的需求。
我最近所在的两个团队都是移动研发团队,一个是在相对大型的外企内部面向企业级软件,一个是创业型团队面向消费级应用。第一个团队我们是从传统的瀑布流开发模式向Scrum转变而来的,第二个团队我主导整个研发团队,结合了Scrum以及Kanban的,采用的是混合型的开发模式。
Scrum实践
Scrum的基本概念我就不赘述了,希望快速了解的人可以一步到此。
我谈下我们是如何操作的:
1. team角色的分配:产品,研发,Program Manager。产品提供业务的需求描述,MockUI。研发包括Scrum Master, Developer, QA,负责软件的研发测试。Program Manager负责整个项目的进度控制以及对外team的沟通协调等等。
2. 使用的工具:VersionOne用于整个Scrum开发的项目管理,后期我们换成了Jira Agile,主要是因为我们也用Jira来做bug Track,分散在不同系统管理也是挺复杂的。代码管理Github,文档管理Confluence,测试用例TestLink。
3. 流程:
我们以一个月作为一个release周期,每个月的15号到下个月15号,发布一般在下个月15号的那个周五。一个月分为3个dev sprint, 1个release sprint。
Release Planning阶段
Release kickoff meeting: 周期开始阶段,产品team负责解释未来一个release要做的功能。通常产品team是维护Epic,并且将Epic分解成backlog(具体需求),并排好backlog优先级。
Engineer backlog discuss meeting: 拿到backlog,研发团队就需要对backlog进行分析,理解需求,并能分解成Task (任务),并对每个task的工作量进行估计。这时会有两种方式进行工作量的估计,传统的人天,或者用Poker Points。
人天的方式比较容易操作,大家熟悉也比较好理解,但这种方式是没有办法去衡量一个团队的生产力变化情况。对于一个固定人数的团队,在固定时间内可以产出的人天数是固定的。
Poker Point的做法是选定一个task作为基准,比如1分,然后评估其他任务的时候始终以这个基准作为参考给出相应的分数。这个时候其实需要注意避免一言堂,所以很多时候是通过出扑克牌的方式来达成整个团队的一致的,可以通过多轮的出牌,一定要整个团队都对这个分数表示同意为止。使用Point的评估方法相对难操作,但好处也是显而易见的,通过每个release point的数量可以非常明晰的了解团队生产力的变化。
这个阶段通常需要在1~2天完成,一个好的planning对于整个release的成功与否至关重要!好的开始以为着成功了一半!
Plan结束后我们会在VersionOne/Jira Agile系统中填入所有数据:
| Epic | Backlog | Task | Effort | Developer |
| EP1 | feature1 | taskA | 1 | MemberA |
| taskB | 3 | MemberB | ||
| feature2 | taskC | 8 | MemberA | |
| EP | feature3 | taskD | 5 | MemberB |
| feature4 | taskE | 3 | MemberA |
Development Sprint
Daily Scrum Meeting: 很多团队都是使用这个,每天的scrum站立会议,通常是每个成员介绍自己昨天的工作,今天的计划以及碰到了什么问题。这个会议一定要强调效率,15分钟内解决,所以超过10人的团队建议拆分分别开这个会议。Scrum Master在这个会议需要起到一个计时的工作,保证控制会议的节奏,如果碰到复杂问题一定要会后再讨论,不要陷入无休止的讨论中。
每人都要及时记录自己做的任务的情况,做了多少,还剩多少。这样可以产生一个非常有用的图表,Burndown Chart。这个图表可以很容易看到项目进展的情况。

在整个Dev Sprint里面,测试团队是和开发团队紧密合作的,测试应该是在整个开发周期最开始就介入,一起讨论需求,一起评估,同时写测试用例,不断进行新功能的测试以及迭代测试。理想状态下3个星期的开发周期内,开发和测试一直是同步的,3周内开发完成,新功能测试也基本能完成。
Release Sprint
这个阶段是为了稳定产品质量,为发布做准备。我们采用标准的Git flow来管理代码库。

在Release sprint开始的时候,我们会从develop分支checkout出Release分支。在Release分支只接受bug fix的commit,在develop分支依旧可以提交新功能,不过这时提交的新功能是要到下个发布周期才会发布的。
发布的标准:
1. 没有高优先级的问题
2. 没有regression的问题,就是以前版本是好的,新版本导致
发布时,将release分支的代码同时merge到develop和master分支,并在master分支上打上标签。
每个release结束后还需要retrospective meeting, 大家可以总结,并进行不断的改进。
Scrum是个相对完善的项目开发模式,各种工具也非常完善。我觉得需要注意几点:
1. 固定的发布周期:这样可以培养良好的开发迭代的周期性,同时也容易可以评估每个周期的效率。
2. 产品团队和研发团队的时间是不一样的,一般产品团队工作要提前1~2个星期,保证研发团队不会因为需求的不明确而影响效率。
3. 避免需求的变更,无论何种开发模式,需求的变更总是不可避免,所以最好是将周期缩短,可以让产品团队可以忍受延迟些时间来实现这些变更的需求。
4. 要预留一定的buffer,毕竟程序员也是人,也会有不能出活的时候,也需要学习分享知识,所以不要把时间完全填满,留给大家时间调剂。
Scrum&Kanban在移动开发团队的实践 (一)的更多相关文章
- Scrum&Kanban在移动开发团队的实践 (二)
Scrum&Kanban在移动开发团队的实践系列: Scrum&Kanban在移动开发团队的实践 (一) Scrum&Kanban在移动开发团队的实践 (二) 在第一篇分享文章 ...
- 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍
如何避免Scrum敏捷开发团队反思会形式化? 迭代压力很大,根本没时间,而且,反思会上大家都在互相推脱责任,会议成了“批斗大会”,所以团队的人都觉得这个会很鸡肋. 很多团队在开反思会时是这么干的:产品 ...
- 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见
微服务与敏捷开发(Scrum/Kanban)的核心思想之我见 关于"微服务"和"敏捷开发"的文章网络上有很多,所以这里不再重复叙述这些概念的解释和特点,而是 ...
- 杨学明老师推出全新课程--《敏捷开发&IPD和敏捷开发结合的实践》
课时:13小时(2天) 敏捷开发&IPD和敏捷开发结合的实践 讲 师:杨学明 [课程背景] 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Developmen ...
- 开发团队(Team)的主要职责和特征
角色介绍 开发团队是Scrum团队的三个角色之一. 开发团队包括架构师.开发工程师.测试人员.数据库管理员和UI设计师等,这几类人的跨职能组合.具备的技能足以实现产品开发. Team的主要职责 1.S ...
- Scrum Master如何让敏捷团队正常运转?
官方<Scrum指南>中定义:Scrum Master在Scrum团队中属于服务型领导,负责践行和支持<Scrum指南>中定义的Scrum,要帮团队的每个人理解Scrum理论. ...
- 20145205 《Java程序设计》实验报告三:敏捷开发与XP实践
开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软件工程包括下列领域:软 ...
- 20145213《Java程序设计》实验三敏捷开发与XP实践
20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...
- 记一次小团队Git实践(上)
公司规模不大,成立之初,选择了svn作为版本控制系统.这对于用惯了git的我来说,将就了一段时间后,极为不爽,切换到git-svn勉强能用.随后,因为产品需要发布不同的版本,而git-svn对远程分支 ...
随机推荐
- 使用node的http模块实现爬虫功能,并把爬到的数据存入mongondb
刚开始使用http中间件做爬虫其实蛮多坑的,最主要的坑就是编码问题,有很多中文网站的采用的gb2313的编码方式,这个在爬到的报文解析就很蛋碎, 因为http中间件对utf-8支持的比较好,所以针对这 ...
- [C/CPP系列知识] 那些程序C语言可以编译通过但C++无法编译成功 Write a C program that won’t compile in C++
http://www.geeksforgeeks.org/write-c-program-wont-compiler-c/ 1) C++中在函数声明之前调用一个函数会引发错误,但是在C中有可能可以. ...
- Consumer closed input channel or an error occurred. events=0x8 channel is unrecoverably broken and will be disposed(待解决)
跟文件读取有关?关闭文件读取试试. 有可能是读取文件 出现报错
- ARRAY_SIZE宏
宏ARRAY_SIZE,是求设备结构体中设备的个数, 定义在linux/kernel.h中 #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[ ...
- kill 非法用户
主要涉及到的相关命令如:who/w/ps/kill/pkill/killall查看当前登录用户:[root@localhost ~]# whoroot pts/1 2010-08 ...
- 如何通过热修复,搞定开发中的那些 Bug?
作为程序员,Bug 修复终究是绕不开的话题,本期移动开发精英俱乐部讨论的主题便是 Bug 修复中的 Hotfix,即热修复.接下来让我们跟随大牛的脚步来了解 Hotfix,就算你不能一下豁然开朗,相信 ...
- form表单中的enctype属性什么意思?
enctype就是encodetype翻译成中文就是编码类型的意思!multipart/form-data是指表单数据有多部分构成:既有文本数据,又有文件等二进制数据的意思.另外需要注意的是:默认情况 ...
- java打印时间精确到毫秒
package net.floodlightcontroller.conflict; import java.io.*; import java.util.*; import java.text.Si ...
- Play Framework 发现并没有热启动的特殊情况
解决办法: 删掉 target目录下的两个文件夹: src_mananger 和 twirl -----或者删掉整个target文件夹. 因为play framework 运行的是 在target 文 ...
- 客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。
1.客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出. 利用httpclient进行ip地址和端口号连接后,http的输出端作为http请求参数设置.h ...