1. 技术负债在敏捷团队中会快速的膨胀。
是事实,但这并不是敏捷本身的问题,只不过是在敏捷导入和实施过程中没有引起足够的重视。经验丰富的敏捷教练往往十分重视工程类实践,会强调重构在迭代中的重要性。很多的敏捷实践(比如TDD,持续集成,重构)及很多敏捷开发者提倡的原则(比如S.O.L.I.D原则,Clean Code,Implementation Patterns )都能帮助敏捷团队避免过多的技术负债。Uncle Bob甚至认为应该在最初的敏捷宣言中加入第五条原则“Craftsmanship over Crap”,来强调技术的对成功的敏捷项目的重要性。
2. 敏捷软件开发团队会想当然地认为每个团队成员都专业,称职并富有责任心。如果事实不是如此,项目开发很快会变得举步维艰。
是事实,但这恰恰又是敏捷的卖点。我们应该做到:谦虚有耐心;勇于承诺;团队成员互信互助,而不是互相指责批评;承认自己的能力不足,不断追求进步,需要的时候寻求团队成员的帮助。很多方法论认为只能通过审查监控的手段来确保项目的顺利运行,而敏捷团队更多的是依靠个人的责任心。在优秀的敏捷团队中,能力较弱的的团队成员会感受到来自其他成员的压力,要不然尽力做好,要不然只有走人。
3. 由于对敏捷开发实践的错误理解,导致团队不合理地频繁交付,疲于奔命。
说老实话,在了解敏捷之前,研发团队才是疲于奔命。敏捷原理打破了传统的思维模式。人很容易犯错误,但是很多敏捷实践(结对编程,持续集成,TDD)能够帮助开发团队及早发现问题,纠正错误。因此敏捷反而把我们从传统的思想束缚中解脱出来。可能是由于对敏捷的过度宣传,导致大家对敏捷期望值过高,认为敏捷开发是解决所有问题的万灵药。其实我们导入敏捷也是受种种因素(客户环境,团队对敏捷的认识程度,成员的能力)限制的。如果能够从其他更成熟的敏捷团队或者敏捷教练那里吸取经验这样会更好,否则只能合理的逐步的导入实践。很多敏捷项目确实存在过于频繁的交付,那是由于人们迫于各种压力,“好大喜功”的天性而忽略了敏捷其实一直在强调的“根据每个迭代能够实际发布量”(也就是真正能够达到Done标准的工作量)来调整下一个迭代工作量。如果团队不能自主调整工作量,这其实已经偏离了敏捷。
4. 实施敏捷的门槛太高,敏捷开发需要更强的团队和个人的纪律性,勇于承诺和高度的公开性,但对一个不成熟的组织来说这个门槛太高。
是事实。但是这并不意味着不能在不成熟的组织中导入敏捷实践。这类组织可以逐步地导入敏捷实践。很多人太过心急,想“一口吃一个胖子”,但这往往是不切实际的。当然,同时必须要注意的是,不能因为采取逐步导入的手段,而降低敏捷定义的门槛(Ron Jeffries有一篇文章"Agile Is, Not, Maybe")。
5. 绩效差的团队成员很难在高度公开的敏捷团队中掩饰自己能力的不足。好的团队往往能够采取一定的措施来帮助这类成员。但如果没有采取措施,这些成员往往会想方设法通过消极怠工来掩饰自己能力的不足。
绝对是事实,敏捷需要勇气,但是这绝对是好事。态度决定一切!敏捷团队所不能容忍的是那种故意偷懒的成员。每个人都会经历从学徒到专家的过程(获得技能的Dreyfus模型,及Apprenticeship Patterns: Guidance For The Aspiring Software Craftsman)。由于每个人的能力不同,背景不同,能达到的高度也是不一样的。团队成员应该承认个体差异,努力帮助较弱的团队成员,使其快速成长。
6. 敏捷团队容易过份关注眼前的短期目标,而忽视长期的战略目标。尽管在短期内能够取得成功,长期注定还是会失败。
可能是事实,但是这在非敏捷团队中也屡见不鲜。不可否认的是在敏捷项目中,很多人过分强调了YAGNI,因而在早期忽视了一些战略性的目标,尤其是业务需求目标,从而导致后期重构十分困难。YAGNI是很有用的,但是需要其他实践比如TDD和BDD(行为驱动设计)的支持。Kent Beck在极限编程一书中讲述了怎样借助TDD,实现演进式设计。另外需要注意的是,这其实在很大程度上是一个平衡的问题,怎样在YAGNI与预先设计之间做平衡。
7. Product Owner承担了太多的责任,不堪重负,从而成为团队的瓶颈。
也是事实。但是作为对产品最有热情的人,Product Owner难道不愿意花时间和精力帮助团队开发出符合需要的产品么?敏捷极大地缩短了从需求到软件的周期。再也不会出现Product Owner等上6个月或者更长的时间,结果发现做出来的并不是自己想要的东西的情况。Product Owner可以在短时间内就能看到软件,及时作出调整,因此敏捷极大地减少了开发成本以及相应的机会成本。公司高层的支持也是十分必要的。没有高层的承诺和授权,不可能组成全功能的团队。
8. 敏捷的效用被过度夸大,大家的期望值太高,很多人认为导入敏捷能以最小的投入解决实际开发中的所有问题。
这可能也是事实。其实在其他方法论风行的时候,也遇到过类似的批评,比如RUP。大家都期望找到一种能够解决所有软件开发痛苦的方法论。作为有经验的敏捷实践者,教练,经理和架构师,对敏捷的宣传应当适度,尽管敏捷确实能够解决很多软件开发中遇到的问题,但是它毕竟不是万灵药。不要使他人有过高的期望。
9. 可能出现另一种形式的“相互诟病”。成功的敏捷开发团队一般不会成为产品开发的瓶颈,因此其他部门不能以这个为借口来指责开发团队,但是这有可能进一步演变成为政治游戏。
这绝对是事实。Chris Tyler提出的建议是,尽早与其他部门沟通,大家的最终目标是一致的,各个部门应当一起寻找生产系统的瓶颈,然后努力突破瓶颈(参见约束理论)。基于这个共同目标,各个部门一起对流程进行修改,就会减少相互诟病。
10. 当Product Owner开始决定开发的方向,他就会被过度授权。敏捷开发中缺乏足够的审查和平衡机制。
这并不是一个问题!Product Owner应该控制产品发展的方向。Product Owner应当熟悉业务,明确他最终想要什么。尽管开发团队要利用技术手段,提供解决方案,满足业务需求。但作为开发团队不应该对业务方面干涉太多。
11. 敏捷实践大多是针对程序员的,很难在组织内平衡工作量。缺乏对团队中的非程序员提供更好的文档以及培训支持。
对于这个Chris Tyler既同意也不同意。敏捷团队是全功能的团队。如果业务分析师、Product Owner没有和团队在一起参与开发,那不是真正的敏捷。敏捷教练、经理也应该承担培训团队中除了工程师以外的成员的职责。对某些团队来说,文档会是一个问题,因为客户总是要求开发团队提供文档。其实行为驱动测试BDD就是一种既能够提供需求文档又能够照顾到代码实现的好方法。敏捷中也有文档(参见“敏捷的文档”),只不过是文档的形式发生了变化,变成了XUnit测试以及代码。进一步BDD可以成为业务人员和开发人员的桥梁,能够使业务人员更好地理解XUnit测试以及代码(另外其实还有Fit)。对于已经习惯于基于类似于IEEE的那种需求管理方式的Product Owner和公司高层们,对开发文档形式的改变,他们应当保持开放和学习的心态,充分信任团队,而不是给开发团队带来阻碍。
最后,Chris Taylor总结到,敏捷理论很美好,但是实践起来还是会有各种各样的问题,也有可能失败。其实理论描述的是理想情况,实际情况往往不尽相同。但是我们不能因为这个就放弃向理想努力。尽管过去有很多团队导入敏捷失败,我们还是不能全面否定敏捷,毕竟也有很多成功的敏捷团队。正如敏捷项目团队在开发中不断进行反省修正一样,我们也要通过反省来加深对敏捷的理解和认识。
分享到:
相关推荐
Scrum+XP是敏捷开发中常见的模式,前者偏重于流程管理,而后者偏重于敏捷技术实践。由于敏捷开发的流程和方法对市场和技术变化的快速响应能力,使得其特别适合于移动互联网等快速发展的项目。敏捷开发模式能够使项目...
Martin(也被称为“鲍勃叔叔”),作为软件开发和工程领域的大师,阐述了敏捷开发中的核心原则、设计模式和实践,尤其是在极限编程(Extreme Programming, 简称XP)方面的应用。XP是一种敏捷软件开发方法,它在预算...
乔梁的演讲可能列出了敏捷转型的关键步骤和注意事项,帮助团队规避常见陷阱,顺利过渡到敏捷开发模式。 8. **姜信宝--如何激活你的Kanban**: Kanban是敏捷开发的一种可视化工具,姜信宝的分享可能涵盖了如何利用...
3. **Scrum框架**:Scrum是最常见的敏捷开发框架,由角色(产品负责人、Scrum Master和开发团队)、事件(Sprint、Sprint Planning、Daily Scrum、Sprint Review和Sprint Retrospective)和工件(产品待办事项列表、...
力软敏捷开发框架资源手册包含了丰富的信息,旨在帮助开发者更好地理解和使用力软这一高效敏捷的开发工具。这个压缩包中的文档可能涵盖了从基础概念到高级技巧的全方位指导,旨在提高开发效率,降低项目风险。 首先...
**敏捷开发框架开发手册**是指导开发者在软件开发过程中运用敏捷方法的一个综合指南。这份手册涵盖了多个关键领域,旨在帮助团队高效地实现敏捷开发流程,提高软件开发的灵活性和响应能力。 1. **部署和管理** ...
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法论,强调适应性而非预设性,灵活性高于僵化流程。2001年,Martin Fowler、Jim Highsmith等17位专家在美国犹他州的雪鸟会议上提出了“敏捷开发”概念,他们共同...
**Scrum**和**XP**是两种常见的敏捷开发框架,它们提供了具体的方法论来指导团队实施敏捷开发。 1. **Scrum**:偏向于过程,强调通过固定的会议和角色来确保项目的顺利进行。 2. **XP (Extreme Programming)**:...
在敏捷开发中,常用故事点(Story Points)进行工作量估计,这考虑了任务的复杂性和不确定性。测试驱动开发(TDD)是Scrum中的常见实践,它要求在编写功能代码之前先编写测试用例,以确保代码质量。 **敏捷项目管理...
故事板(Story Board)和看板(Kanban)是敏捷开发中常见的工具,用来追踪项目进度。敏捷开发强调团队协作,跨职能团队共同估算任务并进行迭代开发。为了提升代码质量,敏捷团队也可能会进行代码审查。 敏捷开发...
在敏捷开发实践中,常见的框架包括Scrum、Kanban、XP(极限编程)等。每个框架都有其特定的实践和规则,如Scrum中的冲刺(Sprint)、每日站会(Daily Scrum)、产品待办事项列表(Product Backlog)等,旨在帮助团队...
**推行CMMI的常见问题** 1. 过于重视方法,忽视其他要素,如人的因素、技术和工具。 2. 盲目引入大型工具,期待工具解决所有问题。 3. 未能充分认识到人的作用,过程改进的核心是人。 4. 忽视技术改进,技术提升...
松结对编程和代码审查是敏捷开发中常见的实践,旨在提高代码质量和团队成员之间的知识共享。结对编程可以让两个开发者一起编写代码,一人打字,另一人审查,这种做法不仅可以减少错误,还能促进技能传授。代码审查则...
虽然题目中并未给出具体的管理工具界面草图,但在敏捷开发实践中,常见的工具界面往往包括以下几个部分: - **项目概览**:显示项目的基本信息、当前状态和关键里程碑。 - **任务板**:展示待办事项、正在进行的...
**敏捷开发** 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法论,它强调灵活性和响应变化。在2001年,一群软件开发领域的专家共同提出了敏捷宣言,以此来对抗传统瀑布模型的僵化和低效。敏捷宣言包含四个核心...
【敏捷开发】 敏捷开发是一种以人为核心、迭代、逐步交付的软件开发方法论。它强调灵活应对变化,鼓励团队间的协作和沟通,以提高软件质量和满足客户需求。敏捷开发的核心价值观包括个体和互动高于流程和工具,可...
总之,敏捷开发强调灵活性、客户参与和快速反馈,但其实施必须根据项目特性灵活应用,避免陷入常见的误区。理解并正确运用敏捷原则和实践,才能充分发挥敏捷的优势,提高软件开发效率和客户满意度。