Scrum 实施中遇到的典型问题
Scrum实施过程中遇到的典型问题,答案综合了网络中的借鉴和自己实践中的体会。 Q1:技术负债在敏捷团队中会快速的膨胀。 A1:由于敏捷开发过程没有充足的事前(up-front)设计,技术负债是不可避免的,虽然可以通过TDD、连续集成、重构减轻症状。同时敏捷开发者提倡的原则(比如S.O.L.I.D原则,Clean Code,Implementation Patterns )都能帮助敏捷团队避免过多的技术负债。传统的瀑布式开发技术负债是较少的,敏捷开发不是瀑布式开发的对立面,必须在实践中结合两者的优势。根据国外专业网站的调查,在敏捷实践中超过60%的团队都会进行一些事前设计以减少技术负债。Agile Modeling个人觉得是可以借鉴的办法之一。
Q2:敏捷软件开发团队会想当然地认为每个团队成员都专业,称职并富有责任心。如果事实不是如此,项目开发很快会变得举步维艰。 A2:敏捷开发团队的气氛应该是:勇于承诺;团队成员互信互助,不断追求进步,需要的时候寻求团队成员的帮助。责任心不是每个人都会有,这和性格、素质和既得利益有关。在实践中团队成员不可能都专业,称职并富有责任心,所以实践中的做法是:首先努力找到专业有责任心的人,其次是创造团队气氛,再次是建立绩效考核(见6-25文章:如何对Scrum团队进行绩效考核),能力较弱的的团队成员会感受到来自其他成员的压力,要不然尽力做好,要不然只有走人。
Q3: 由于对敏捷开发实践的错误理解,导致团队不合理地频繁交付,疲于奔命。 A3:我们导入敏捷也是受种种因素(客户环境,团队对敏捷的认识程度,成员的能力)限制的,只能是逐步导入。很多敏捷项目确实存在过于频繁的交付,那是由于人们迫于各种压力,“好大喜功”的天性而忽略了敏捷其实一直在强调的“根据每个迭代能够实际发布量”(也就是真正能够达到Done标准的工作量)来调整下一个迭代工作量。如果团队不能自主调整工作量,这其实已经偏离了敏捷。公司和团队对敏捷开发的正确理解是解决这个问题的根本。
Q4: 实施敏捷的门槛太高,敏捷开发需要更强的团队和个人的纪律性,勇于承诺和高度的公开性,但对一个不成熟的组织来说这个门槛太高。 A4:在不成熟的组织中导入敏捷实践只能是逐步地导入,同时应该是在敏捷宣言的原则下找到适应组织目前状态下的做法。具体的做法,我的实践体会已经在博客中有共享,例如(5-8:没有自动化测试,没有TDD,没有连续集成,如何保证质量?,5-19:没有自动化测试,没有TDD,没有连续集成,如何保证质量?续)等。
Q5: 绩效差的团队成员很难在高度公开的敏捷团队中掩饰自己能力的不足。好的团队往往能够采取一定的措施来帮助这类成员。但如果没有采取措施,这些成员往往会想方设法通过消极怠工来掩饰自己能力的不足。 A5:态度决定一切!敏捷团队所不能容忍的是那种故意偷懒的成员。团队成员应该承认个体差异,努力帮助较弱的团队成员,但较弱的成员必须表现出:a)主动 b)努力 c)对结果负责。这三点同样重要,“主动”包括主动需求帮助,如果有delay主动沟通等。如果不是这样,只能走人。
Q6: 敏捷团队容易过份关注眼前的短期目标,而忽视长期的战略目标。尽管在短期内能够取得成功,长期注定还是会失败。 A6:过分强调了YAGNI(You Aren't Gonna Need It),因而在早期忽视了一些战略性的目标,尤其是业务需求目标,从而导致后期重构十分困难。这其实在很大程度上是一个平衡的问题,怎样在YAGNI与预先设计之间做平衡。预想开发是个迷人的陷阱,在编码时时刻提醒自己:它究竟是会让代码变得更好,还是平添复杂度?同时,需求设计时也必须要考虑某个功能虽然在目前是不需要的,但可能在可以预计的时间商业价值很高。最好的方法是在产品开始之初做好Roadmap,而不是想一步做一步。设计也要根据Roadmap做一些预先设计。
Q7: Product Owner承担了太多的责任,不堪重负,从而成为团队的瓶颈。 A7:敏捷极大地缩短了从需求到软件的周期。再也不会出现Product Owner等上6个月或者更长的时间,结果发现做出来的并不是自己想要的东西的情况。Product Owner可以在短时间内就能看到软件,及时作出调整,因此敏捷极大地减少了开发成本以及相应的机会成本。公司高层的支持也是十分必要的。没有高层的承诺和授权,不可能组成全功能的团队。的确,和传统开发相比,PO需要更大的热情和精力,同时也需要更好的沟通能力。在实践中,往往PO是由两个人Peer组成的。
Q8: 敏捷的效用被过度夸大,大家的期望值太高,很多人认为导入敏捷能以最小的投入解决实际开发中的所有问题。 A8:实际上,敏捷开发不是以最小的投入解决开发问题,也不是使开发效率大幅提高,而是快速地得到可以工作的产品(功能较少,但核心),快速的得到反馈以改进产品,始终以市场/客户的要求为每一次推出产品的原始驱动力,这样产品的ROI(Return of Invest)才是最高。客观的说,和传统开发方法比较,Invest不见得是最小的,但Return却是较高的。
Q9: 可能出现另一种形式的“相互诟病”。成功的敏捷开发团队一般不会成为产品开发的瓶颈,因此其他部门不能以这个为借口来指责开发团队,但是这有可能进一步演变成为政治游戏。 A9:尽早与其他部门沟通,大家的最终目标是一致的,各个部门应当一起寻找生产系统的瓶颈,然后努力突破瓶颈。基于这个共同目标,各个部门一起对流程进行修改,就会减少相互诟病。要想最终的目标是一致的,公司的绩效考核中的KPI就应该以此为中心。
Q10: 当Product Owner开始决定开发的方向,他就会被过度授权。敏捷开发中缺乏足够的审查和平衡机制。 A10:Product Owner应该控制产品发展的方向。Product Owner应当熟悉业务,明确他最终想要什么。尽管开发团队要利用技术手段,提供解决方案,满足业务需求。但作为开发团队不应该对业务方面干涉太多。需要说明的是,在实践中公司的管理层/老板其实是最大的Product Owner,所以被任命的PO在产品的决定方面必须和公司的管理层/老板有充分的沟通,这里的沟通技巧主要是和上层的沟通技巧。
Q11: 敏捷理论很吸引人,但失败的案例非常多 A11:敏捷理论很美好,但是实践起来还是会有各种各样的问题,也有可能失败。其实理论描述的是理想情况,实际情况往往不尽相同。这需要有更多实践经验的培训师进行培训或者直接加入到团队中。
Scrum 实施中遇到的典型问题的更多相关文章
- Scrum实施调查案例
什么是敏捷开发方法?什么是SCRUM? 有人在这个字面上下功夫,说敏捷就是反应要灵敏,动作要快捷:有人还在字面上进行延伸,说敏捷就是又好又快,或者就是多快好省:有人说敏捷就是光写代码不写文档:有人觉得 ...
- openerp 经典收藏 workflow中的‘非典型’自动触发器trigger_model(转载)
workflow中的‘非典型’自动触发器trigger_model 原文:http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85% ...
- CRM实施中应避免的5大问题
越来越多的人认识到,杂乱的客户信息应该统一管理.曾经人们用excel表格甚至是纸笔来记录客户信息,可是假设想知道这个客户我们销售接触过几次?邮件里都谈了什么?在线客服都和客户聊了什么?报价单发的啥价格 ...
- sqlserver中几种典型的等待
为了准备今年的双11很久没有更新blog,在最近的几次sqlserver问题的排查中,总结了sqlserver几种典型的等待类型,类似于oracle中的等待事件,如果看到这样的等待类型时候能够迅速定位 ...
- workflow中的‘非典型’自动触发器trigger_model
Openerp中workflow的设计机制 工作流程系统在OpenERP里是非常有用的机制,可以用于即时描述单据(模型)状态的演进过程.工作流实现了状态流转的可配置,通过迁移的 condition代替 ...
- Python 中 -m 的典型用法、原理解析与发展演变
在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...
- javascript中三种典型情况下this的含义
this本意:基于函数的执行环境绑定. 1)一般函数内部,返回的是window(作用域链中的第二层全局作用域) function test() { return this; } alert(test( ...
- 使用JSF框架过程中的若干典型问题及其解决方案
1.commandXxx点击后,不调用action中的方法: 原因1:xhtml后缀名的文件,最终也会转化为普通的html文件(这是熟悉JSF框架的关键.),commandXxx点击后不调用后台act ...
- 微软Team Foundation Service 的Scrum模板中的Feature和Backlog Items 的区别【转载】
Features help us plan work better in Team Foundation Service Scrum process [原文:http://www.nsilverbul ...
随机推荐
- POJ2155 Matrix 【二维线段树】
题目链接 POJ2155 题解 二维线段树水题,蒟蒻本想拿来养生一下 数据结构真的是有毒啊,, TM这题卡常 动态开点线段树会TLE[也不知道为什么] 直接开个二维数组反倒能过 #include< ...
- 【NOIP 模拟赛】钟 模拟+链表
biubiu~~ 这道题实际上就是优化模拟,就是找到最先死的让他死掉,运用时间上的加速,题解上说,要用堆优化,也就是这个意思. 对于链表,单项链表和循环链表都不常用,最常用的是双向链表,删除和插入比较 ...
- NOIP2010 引水入城 贪心+DFS
我们先把简单的不能搞死,具题意可证:每个蓄水长的管辖区域一定是连续的.证明:既然我们已经能了那么我们就可以说如果这个区间不是连续的那我们取出这个区间中间阻隔开的那一段,那么对于这一整个区间来说水源不可 ...
- bulk_insert_buffer_size and InnoDB
Q: I read the following on this page http://dev.mysql.com/doc/mysql/en/server-system-variables.html ...
- 构建一个类jq的函数库
jqfree core var $ = function(selector, context) { return new $.fn.init(selector, context); }; $.fn = ...
- CSS选择器及CSS3新增选择器
转自:http://www.cnblogs.com/libingql/p/4375354.html 1. CSS1定义的选择器 选择器 类型 说明 E 类型选择器 选择指定类型的元素 E#id ID选 ...
- 最短路径算法 SP
dijkstra求最短路径长度 dijkstra求最短路并记录路径 #include<stdio.h> #include<string.h> #include<stack ...
- bzoj 2115 路径xor和最大值
首先我们可以将这张图转化为一棵树,其中可能有好多环,肯定是从1走到N,其中可能经过好多环, 因为我们不走N在的一支,最后还是会走回来,因为a xor b xor b=a,所以相当于没走,就是走了个环, ...
- kickstart构建Live CD 添加文件问题
在构建自定义ISO的时候,有时候需要从母体机器拷贝文件到Live CD系统.比如拷贝/home/xiaoxiaoleo/hello 程序,在Kickstart配置文件里, post脚本添加--noch ...
- I2C和SPI总线对比【转】
转自:http://blog.csdn.net/skyflying2012/article/details/8237881/ 最近2周一直在调试IIC和SPI总线设备,这里记录一下2种总线,以备后忘. ...