Scrum&Kanban在移动开发团队的实践系列:

Scrum&Kanban在移动开发团队的实践 (一)

Scrum&Kanban在移动开发团队的实践 (二)

在第一篇分享文章中介绍了下Scrum的开发模式,介绍了Scrum中团员的角色、开发阶段、每个阶段中需要做的事情。在这篇分享我会介绍Kanban模式,相对于Scrum,Kanban比较轻量级。

首先分享些干货:

Kanban和Scrum对比的Mini书:Kanban and Scrum - making the most of both  中文

下面是一个非常经典的Kanban图

看板强调几点:

  1. 流程可视化
  2. 限制WIP (Work in Progress)
  3. 度量生产周期

流程的可视化 

想上图所示,Kanban强调的可视化流程,通常团队可以把需求分解成小任务,一个小卡片写一件任务,把卡片放到墙上。其实现在有很多敏捷开发工具都可以支持可视化管理,不过我还是建议贴在墙上这种“原始”做法。这样可以“强制”所有的成员非常容易的看到整个Kanban,有什么问题、更新都能一目了然。

  • 每个任务都会有不同的状态,所以在墙上每列需要定义状态。我们的做法是分成Next、Analysis、Development、QA四个阶段,每个阶段都有Ongoing和Done两个子阶段。
  • 每个阶段都有Ongoing和Done的状态,每个阶段的"Definition of Done"需要精确定义,保证所有团队成员对完成的定义达成一致。以下是一些定义的例子:
    • Analysis - Definition of Done: Backlog建立好了,提供需求描述,提供MockUI
    • Development - Definition of Done: 功能实现,程序员自己进行过测试,通过Unit Test,进行过Code Review,代码合并到Develop分支
    • QA - Definition of Done: 完成功能测试,修复所有高优先级的bug
  • 每个任务尽量细化,保证不超过一个星期的工作量。
  • 每个任务都是分配给特定的一个人。如果是多个平台一起合作,比如iOS/Android/Server,可以把任务拷贝几份分配给不同的人,这样可以保证开发者对这个任务具有Ownership。

下面是我们团队实践的Kanban墙:

  • 四个阶段(列):Next, Analysis, Development, QA。每个阶段都有Onging和Done。
  • 四个小团队(行):Android, iOS, Web, Server

看到字条在最终状态越积越多还是很有成就感的!

限制WIP(Work in Progress) 

在看板里面一个核心的概念就是限制WIP,简单的说就是每个状态下面的Ongoing的任务数目是有上限的。这样做可以带来不少好处

  • 可以让团队成员更加专注
  • 一旦发生任务阻塞,团队会第一时间知道,并且很容易发现问题,这时团队可以集中精力解决阻塞的问题
  • 每次计划任务的时候都会考虑首先做最重要的事情,避免后期随便加塞任务

下面的漫画很好的描述了WIP的作用,大家可以领会领会:

WIP的模式看起来很美,但实践起来并不容易,需要大家非常遵守WIP的限制严格执行。很多时候团队会迫于外部的压力,不断增加工作,于是kanban上面的小字条越来越多,这样其实是非常影响效率的。所以Kanban模式也是需要一个类似Scrum Master的角色来保护这些原则。

WIP的设置数量应该是多少呢?其实这个因团队而异,可以不断调整至到大家都觉得比较舒适的状态。一开始可以建议简单粗暴的设置,比如开发人员有多少人,就设置Development WIP的数量是多少。

度量生产周期 

Kanban的模式并没有固定的开发周期,也没有特定的计划、开发、发布的阶段,所有的事情都是想流水线性的一直持续下去。那么Kanban模式如何来评估生产的效率和周期呢?

一般会参考下图 - Cumulative flow diagram (堆积图?)

这个图统计了每一天,在每个状态中累计的任务数量。纵向可以表明WIP的作用,横向可以表明每个任务完成所需大概时间。

我一般会重点查看每个状态的趋势线的斜率情况,斜率越大说明任务开发所需的时间越少,团队效率越高。同时也要保证各个状态趋势线的平滑性,斜率要大体保持一致,这样说明任务没有在某个状态下积累太多而影响整体交付效率。

Kanban相对于Scrum的模式并没有太过于繁琐的条条框框,就只强调三件事:

  • 可视化的流程
  • 限制WIP
  • 度量生成周期

Kanban是个非常高效的管理工具,但因为缺少了很多Scrum的规范,实际操作起来并不容易,在现实世界Kanban往往和Scrum一起使用,相互吸取经验融合使用。

Scrum&Kanban在移动开发团队的实践 (二)的更多相关文章

  1. Scrum&Kanban在移动开发团队的实践 (一)

    现在大多数团队都在谈敏捷开发,似乎觉得敏捷是软件开发的银弹.只需要实践下一些敏捷开发的模式就能如何如何,其实我觉得不论是敏捷开发还是传统的瀑布流开发都是有他们的市场的,取决于团队人员构成,取决你的产品 ...

  2. c++开发ocx入门实践二

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51374355         IDE:vs2010,c++,测试工具,vs自带的TstCo ...

  3. 20145211 《Java程序设计》实验报告三:敏捷开发与XP实践

    实验内容 使用 git上传代码 使用 git相互更改代码 实现代码的重载 XP基础 XP核心实践 相关工具 一.git上传代码 这一部分是与我的partner合作的,详见他的博客- 20145326蔡 ...

  4. 2017-2018-2 20165206 实验三 《敏捷开发与XP实践》实验报告

    2017-2018-2 20165206 实验三 <敏捷开发与XP实践>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:韩啸 学号:20165206 指导教师: ...

  5. 20165336 实验三 敏捷开发与XP实践

    20165336 实验三 敏捷开发与XP实践 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:康志强 学号:20165336 指导教师:娄嘉鹏 实验日期:2018年4月28日 实验时 ...

  6. 20165320 Java实验三:敏捷开发与XP实践

    实验内容: 敏捷开发与XP实践 一 实验要求: 安装alibaba 插件,解决代码中的规范问题在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Co ...

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

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

  8. 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见

    微服务与敏捷开发(Scrum/Kanban)的核心思想之我见   关于"微服务"和"敏捷开发"的文章网络上有很多,所以这里不再重复叙述这些概念的解释和特点,而是 ...

  9. 杨学明老师推出全新课程--《敏捷开发&IPD和敏捷开发结合的实践》

    课时:13小时(2天) 敏捷开发&IPD和敏捷开发结合的实践 讲  师:杨学明 [课程背景] 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Developmen ...

随机推荐

  1. HDU1724 Ellipse(数值积分)

    补一下一些小盲区,譬如simpson这种数值积分的方法虽然一直知道,但是从未实现过,做一道例题存一个模板. #pragma warning(disable:4996) #include<iost ...

  2. ZOJ3717 Balloon(2-SAT)

    一个很玄乎的问题,但听到2-SAT之后就豁然开朗了.题目的意思是这样的,给你n个点群,每个点群里面有两个点,你要在每个点群里面选一个点,以这些点做半径为r的圆,然后r会有一个最大值,问的就是怎么选这些 ...

  3. codeforces 455B A Lot of Games(博弈,字典树)

    题目 参考自博客:http://blog.csdn.net/keshuai19940722/article/details/38455269 //字典树,博弈 根据当前节点的后续来确定当前节点的状态, ...

  4. Gdata XML解析配置和简单使用

    导入libxml2,使用第三方AFNetworking网络请求,第三方XML解析GData GData需要的配置 Build Settings 里搜索,添加如下

  5. JavaWeb开发好资料

    以下来源:http://oss.org.cn/ossdocs/ Documents 操作系统: GNU, Linux, Linux核心, Linux Kernel API, Linux核心架构: a1 ...

  6. lintcode:买卖股票的最佳时机 III

    买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组 [4,4,6,1,1,4,2 ...

  7. lintcode:交错正负数

    交错正负数 给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组. 注意事项 不需要保持正整数或者负整数原来的顺序. 样例 给出数组[-1, -2, -3, 4, 5, 6],重新排序之后 ...

  8. BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别

    一.简介: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean 通常包含了大量的属性,很多情况下,对Jav ...

  9. hibernate中openSession()跟getCurrentSession()方法之间的区别

    Hibernate openSession() 和 getCurrentSession的区别 getHiberanteTemplate .getCurrentSession和OpenSession 采 ...

  10. RTMP/RTP/RTSP/RTCP的区别

    RTCP RTMP/RTP/RTSP/RTCP的区别 http://blog.csdn.net/frankiewang008/article/details/7665547 流媒体协议介绍(rtp/r ...