热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

导致你的敏捷开发项目失败的5个原因

我并不是说团队不应该有责任制。但如果你想以敏捷的方式管理一个软件项目,你必须让团队在达成共识的基础上自我组织以及自我管理。
太多的敏捷开发项目失败。这很难甚至精确地测量这么多的软件开发项目失败的次数,因为最终“完成”和发布,即便:

  ? 他们花了足够长的时间来构建

  ? 构建的质量很差

  ? 构建的产品不是客户所期望的的

  ? 构建的成本大大超出预期

  多年来,我在多个不同的敏捷开发团队工作过,同时也为一些敏捷开发提供咨询和培训。在这期间,我发现5个共同的问题,如果这些问题不被解决,就很可能会导致项目失败。

  1. 不是产品所有者

  所有的事情,都可能会导致一个敏捷软件项目的失败,而不是一个正在开发的产品 的最终的决策者的人,是确保其(产品)消亡最快的方式。

  如果你追随Scrum的,没关系,只管做你自己的Kanban style project 项目或者别的事;如果你想你的项目能取得成功,你需要能一个能多所开发的产品设定方向和做决定的人。

  想想要改造一个厨房。如果你聘请了一堆的承建商进来,做各种各样的工作,如:管道,木工,地板等,但你没有一个人来决定实际完成的厨房看起来应该像什么样,最终你将会得到一个乱七八糟的厨房。

  少有的几个承建商可能会足够的聪明的,能找到正确的人以询问应该做什么,但设计一个厨房需要的不仅仅是随意的决定橱柜放哪儿,而是需要更多。你需要的是有人能真正的提出符合实际的设计和愿景,并随着工程的不断推进能对愿景进行纠正,以避免问题的发生。

  话费大量钱财重建你的厨房,看起来相当疯狂,但不想在设计成品或者雇佣人员上投资任何时间和努力,已完成该项工程。

  当然,日复一日,我在软件项目中的确看到很多这样的行为。我看见很多公司在敏捷开发上花费了大量的金钱,但并不会委任任何人成为正在建设的项目的真正的主人,并为它设置愿景。

  2.没有迭代

  迭代是敏捷开发给软件开发世界带来的关键价值之一。

  但什么是迭代呢?

  你可能会认为,这意味着将你的项目分成两个短周期或者迭代周期。虽然这样做可以促进迭代开发,这并不意味着你是在使用迭代。

  感到困惑了吧?下面就让我们揭秘吧:

  迭代的关键是在时间范围内,一点点的开发一个产品。这将准确的,作为一个产品的演进来描述迭代过程中的商品。

  无论你是否相信宏观进化,微进化,或适应性是否是一个成熟的概念。进化背后的想法是事情随着时间的推移逐渐被改变。由量变到质变。

  试想一下,如果进化论是最“敏捷”软件内置的方式工作,这将是多么的愚蠢。

  试想一下,如果你是一条在大洋中游动的鱼,并有一些自己的在出生时就有功能健全的腿的鱼宝宝。然后,那些有腿的鱼宝宝长大了,然后又有翅膀的鱼宝宝。

  也许腿和翅膀并不会让鱼能活的更好,也没有被恰当的设计,因为腿和翅膀的出现,不是随着时间的推移因适应所做的改变,而是突然出现。

  产品功能不应该以单一的短周期或迭代来建立。好比在单一的一代鱼的身上出现退一样愚蠢。

  反之,功能应该随着时间的推移和进化。某种功能不应被放入到某种单一的短周期或迭代,然后去实现。一种功能应该从小规模开始,并随着时间的推移进行进化和开发收到反馈,客户或者产品所有者试图将其开发出来。

  太多的时候,我看到敏捷开发的项目进行了错误迭代和迭代开发产品。

  不要试图发送一次完成的功能,而是让它随着时间的推移来完成。


  3.没有将事物分解的足够小

  对于将事物分解成小的、易接受的块,我是坚定支持者。

  为什么如此重要的一个主要原因,是这样做可以避免延期。

  延期经常发生在当我们对大型的可能困难的任务感到畏惧的时候,或者我们不知道接下来该做什么的时候。

  如果你能将大项目分成很多小块,这将使项目看起来很容易完成,并有一个明确进展步骤。

  我经常看到,没有给之前的软件项目考虑足够的工作,人为的创造了积压工作或工作项目。

  我创造了一个长期的积压类型:fatlogs。Fatlogs积压没有分解成足够小,并且经常对于要完成什么非常模糊。

  当试着理解和解释他们的时候,Fatlogs是出了名的难以估算和浪费时间。关键是fatlogs被分解成更小的可操作的积压工作给敏捷开发团队或大量的时间将被浪费。

  很多时候,我发现fatlog 的创造者可以很容易的将工作分成小的易于解释和理解的积压工作,即使对于软件开发知之甚少。

  我时常建议敏捷开发团队,他们应该彻底拒绝fatlogs 并将其送回到某条链上。

  如果你不能花足够的时间来清楚地说明你想要什么,那么它就没那么重要。

  但这也不足以豁免开发团队。 开发团队应该将他们得到的任何积压工作分解成小块任务。

  4.没有设置标准

  当你订一块牛排的时候,服务生问你的第一件事是什么?

  显而易见,他们问你你想如何完成它。

  如果厨师不知道你想要完成的牛排的制作标准,厨师就必须决定他或她的制作标准是什么。

  你可会得到一个完美的牛排,或者一个让你难以置信的牛排,或者介于两者之间,完全取决于为你烤制牛排的人。

  这不是一个烤制牛排的好方式,同样也不是制作软件的好方式。

  在大多数软件项目中,我经常遭遇到大量的在烤制时没有定义的牛排。积压工作当时间耗尽的时候,经常被“做”。

  对于一个敏捷开发团队,做任何积压工作有一个明确的标准是相当重要的。

  这意味着,产品所有者应该定义一些可接受性测试。测试是手动测试还是全自动测试没有关系,与团队指定的标准是否能达到其测试目标有关。

  缺乏标准,好比父母对孩子所提的问题“我应该吃多少豆子?”时所做的回答:“吃饱就行”一样。

  没有制定标准会导致负面情绪,并为什么在手指指向的方向没有做正确的事。

  我发现,如果你详细的告诉某人你对他的期望是什么以及评判的标准是什么,你将会比仅仅分配给他们任务得到更好的结果,牵着他们的鼻子说,“好好干。”

  5.不要为了团队而建立团队

  团队是一个奇怪的组织,特别是敏捷团队。

  有很多的变数,会影响到团队的行为和交互。有太多的方式组建一个健康的团队,亦有很多方式创建很烂的团队。

  一个健康积极的团队具有协同作用,一个不健康的消极团队比其团队成员各干各的好不了多少。

  关键是有一个健康的团队,能让每个团队成员都变得很自主。无论你的政见如何,你也许会同意以下观点,当一个国家入侵另一个国家,并建立了一个并非由公民选举的政府来管理人民,肯定有问题的。

  同样的问题发生在敏捷开发过程中。

  我并不是说团队不应该有责任制。但如果你想以敏捷的方式管理一个软件项目,你必须让团队在达成共识的基础上自我组织以及自我管理。

  当团队老大总是监督和干扰的话,团队互动变得非常困难。

  自然而然的,团队时常有他们自己的开发节奏,领导力和角色(称之为准则)。

  然而,当外部力量直接干扰团队工作时,他们没有权力决定他们自己的命运,团队成员就会开始意识到他们需要好自为之。

  额外的敏捷开发资源

  我发现在这些议题中发现好的资源是相当困难的,但这里有一些书,我发现了一些和我上面描述的有用的期刊的地址。

  Succeeding with Agile: Software Development Using Scrum-这本书专注于Scrum 但它同样适用于不同种类的敏捷项目。 Mike Cohn和我时常在大部分敏捷主题上达成一致。

  Agile Retrospectives-我发现这本书对于团队回顾能得到启发,这些想法将真正有助于打破障碍,帮助团队解决他们自身遇到的问题。

  Scrumban 和 Kanban and Scrum - 两本书都提供了丰富的信息,关于combining Scrum and Kanban以及对于解决上述提到的问题,提供了好的解决方案。

  你认为如何?我错过了任何的敏捷项目真凶?与他们打交道的任何有用的提示?

  让我们从下面的评论中寻找答案。


推荐阅读
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 深入理解父组件与子组件的引用和访问
    本文详细介绍了如何在Vue.js中通过$children和$refs属性实现父组件对子组件的访问,并提供了具体的代码示例及最佳实践。 ... [详细]
  • 极大似然估计(MLE)及其3D可视化解析
    本文详细介绍了极大似然估计(Maximum Likelihood Estimation, MLE)的推导过程,并通过3D可视化展示其在概率密度函数中的应用。我们将探讨如何利用MLE来估计参数,以及它在实际问题中的重要性。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 郑州大学在211高校中的地位与排名解析
    本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 电子元件封装库:三极管、MOS管及部分LDO(含3D模型)
    本资源汇集了常用的插件和贴片三极管、MOS管以及部分LDO的封装,涵盖TO和SOT系列。所有封装均配有高质量的3D模型,共计96种,满足日常设计需求。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
author-avatar
手机用户2502906281
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有