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 实施中遇到的典型问题的更多相关文章

  1. Scrum实施调查案例

    什么是敏捷开发方法?什么是SCRUM? 有人在这个字面上下功夫,说敏捷就是反应要灵敏,动作要快捷:有人还在字面上进行延伸,说敏捷就是又好又快,或者就是多快好省:有人说敏捷就是光写代码不写文档:有人觉得 ...

  2. openerp 经典收藏 workflow中的‘非典型’自动触发器trigger_model(转载)

    workflow中的‘非典型’自动触发器trigger_model 原文:http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85% ...

  3. CRM实施中应避免的5大问题

    越来越多的人认识到,杂乱的客户信息应该统一管理.曾经人们用excel表格甚至是纸笔来记录客户信息,可是假设想知道这个客户我们销售接触过几次?邮件里都谈了什么?在线客服都和客户聊了什么?报价单发的啥价格 ...

  4. sqlserver中几种典型的等待

    为了准备今年的双11很久没有更新blog,在最近的几次sqlserver问题的排查中,总结了sqlserver几种典型的等待类型,类似于oracle中的等待事件,如果看到这样的等待类型时候能够迅速定位 ...

  5. workflow中的‘非典型’自动触发器trigger_model

    Openerp中workflow的设计机制 工作流程系统在OpenERP里是非常有用的机制,可以用于即时描述单据(模型)状态的演进过程.工作流实现了状态流转的可配置,通过迁移的 condition代替 ...

  6. Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  7. javascript中三种典型情况下this的含义

    this本意:基于函数的执行环境绑定. 1)一般函数内部,返回的是window(作用域链中的第二层全局作用域) function test() { return this; } alert(test( ...

  8. 使用JSF框架过程中的若干典型问题及其解决方案

    1.commandXxx点击后,不调用action中的方法: 原因1:xhtml后缀名的文件,最终也会转化为普通的html文件(这是熟悉JSF框架的关键.),commandXxx点击后不调用后台act ...

  9. 微软Team Foundation Service 的Scrum模板中的Feature和Backlog Items 的区别【转载】

    Features help us plan work better in Team Foundation Service Scrum process [原文:http://www.nsilverbul ...

随机推荐

  1. ios 全方位修改工程名

    本文针对于彻底修改iOS工程名,不需要另外建工程,会整理的跟新工程完全一样 1. 选中旧工程名,改为新的 然后选择rename 2. 依次选择黄色文件夹,修改名字,千万不要在Xcode外修改!!! 修 ...

  2. leetcode-501. Find Mode in Binary Search Tree

    Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...

  3. Chrome 本地通信

    http://blog.csdn.net/ztmaster/article/details/52684772

  4. 【Foreign】Research Rover [DP]

    Research Rover Time Limit: 25 Sec  Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample ...

  5. 汕头市队赛 SRM 06 C 秀恩爱

    C 秀恩爱 SRM 06 背景&&描述         KPM坐在直升机上俯瞰小渔村景象.         渔村可看作二维平面,密密麻麻地到处都是单身狗,KPM当前所在坐标为(sx,s ...

  6. codevs1163访问艺术馆 树形dp

    算裸的树形dp吧 回来复习一波 #include<cstdio> #include<cstring> #include<algorithm> #include< ...

  7. bzoj3779: 重组病毒 link-cut-tree

    题目传送门 这道题看了做了个神转换.....推荐个博客给各位大爷看看吧神犇传送门 代码敲了半天....题目也读了半天 线段树维护的东西很容易和lct混在一起 调了调能过也是很开心啊 运气比较好吧233 ...

  8. 安装l Xposed Framework

    How to install Xposed Framework on Android 4.x.x :   1. For Android 4.0.3 through 4.4.4 Visit this X ...

  9. Django-Form 补充

    一.Form的前端循环 class LoginForm(Form): name = ... pwd = ... def func(request): form = LoginForm() return ...

  10. python学习笔记 async and await

    用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异 ...