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. How to reclaim space in InnoDB when innodb_file_per_table is ON

    When innodb_file_per_table is OFF and all data is going to be stored in ibdata files. If you drop so ...

  2. Codeforces 937.C Save Energy!

    C. Save Energy! time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  3. maven与gradle的对比

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证了Maven的没落和Gradl ...

  4. rest与restful

      知乎上面摘抄的,感觉不错,分享下:  https://www.zhihu.com/question/28557115 1. REST描述的是在网络中client和server的一种交互形式:RES ...

  5. [洛谷P1528] 切蛋糕

    洛谷题目链接:切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把 ...

  6. 【20160815】noip模拟(未完)

    #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...

  7. [POJ1423]Stirling公式的应用

    Stirling公式: n!约等于sqrt(2*pi*n)*(n/e)^n 另外,e约等于2.71828182845409523... 试了一下发现math库里面并不能像pi一样直接调e但是发现挺好记 ...

  8. POJ 3617 Best Cow Line (模拟)

    题目链接 Description FJ is about to take his N (1 ≤ N ≤ 2,000) cows to the annual"Farmer of the Yea ...

  9. hdu 3003 Pupu

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3003 题目大意:一种动物身上有n种不同的皮肤,每种皮肤有透明很不透明两种状态,经过一天的日晒,透明的可 ...

  10. Linux 通过ssh传输文件

    一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响 ...