敏捷方法是否为牛仔提供了太多方便的借口


73

我认为,敏捷方法最适合需求模糊且需要大量交互以帮助塑造最终用户想法的项目。

但是...在我的专业工作中,我一直不停地被那些使用“敏捷”方法作为为什么不花精力在前期设计上的公司作为最终结果。当要求很容易理解时。

我忍不住想,如果没有敏捷方法,我会坐在这里,拥有一个很好的高级规范,而不必在第二天左右出现其他问题时隔天重新访问相同的屏幕和功能所以没有想到这一点。

敏捷方法学的好处真的足以超过给牛仔技术领导者带来la脚的借口吗?

更新:具有讽刺意味的是,我现在是一名认证的Scrum Master。在Scrum课程上发表的一篇论文指出,最好的开发过程是只有一个专家或专家来进行设计决策的过程,但是它存在明显的弱点。Scrum将生产高质量软件的责任转移到“团队”,这意味着不合格的团队可以摆脱意大利面条的困扰,我想这与其他敏捷和非敏捷开发流程没有什么不同。


6
Downvotes eh ...我确实发现一些敏捷转换者会有些防御,特别是当他们在同一句话中看到敏捷和牛仔时。而且我什至没有袋装敏捷,这是牛仔激怒了我。
sipwiz 2010年

2
这可能与为什么许多敏捷宣言中的许多原始签署方都对“敏捷”一词表示不满,因为该词在大多数公司中都在使用。相反,他们现在正在谈论诸如“软件工艺”之类的东西。
达西·卡塞尔曼

1
首先,让我说我不喜欢敏捷。其次,我会说,根据我的经验,“资本敏捷”只会减慢所有人(包括牛仔)的速度。我从来没有在那种让敏捷使能所谓的“牛仔编码器” 的情况下工作过。
TM。

1
我认为称呼您所描述的“牛仔编码”并不正确。这不是个人问题,而​​是群体问题。这是糟糕的产品和团队管理。
马特b

3
我发现预先思考几乎毫无意义。如果您采用明智的编程实践,那么遵循本能进行迭代可能会非常有效。我的经验表明,那些事先制定了实质性计划的人一旦开始编程就无法对现实做出反应。
dash-tom-bang 2010年

Answers:


87

我很高兴它有一个名字

我相信,如果您以敏捷开发作为牛仔风格编程的借口,那么您并不是真的在关注敏捷开发。牛仔将永远是牛仔,无论您采用什么程序。


17
迪尔伯特(总是)岩石..
TheVillageIdiot

20

敏捷不应该再归咎于BDUF。问题出在实践的纪律上或缺乏纪律。BDUF做法的目的是确定项目方向并事先确定风险。敏捷实践的目的是保持开发状态足够灵活以快速改变方向。敏捷项目可以准备高度详细的用户故事,因此团队可以知道未来的发展方向,并且每次迭代仅选择2或3个就可以完全实施。无论使用哪种方法,问题都保持不变:管理让牛仔们无所适从。

[BDUF:前端大设计]


3
无论采取哪种方式,都永远不可能挫败牛仔。但是,至少对于瀑布而言,他们至少必须产生需求文档,分隔文档等。借助敏捷,他们基本上可以直接敲入代码就可以逃脱。
sipwiz 2010年

3
同样,这是无法正确管理流程的失败。客户应就用户故事中的业务价值向开发人员进行教育,并且测试应验证它们已集成到代码库中。记录开发人员必须追溯其步骤的区域。他们是否精通客户的业务流程?他们不确定部署环境吗?如果项目由于“组件返工”而产生额外的开发成本,则管理层应希望对此进行更正,以减少预算或进度超支的可能性。
2010年

4
如果您只是开始研究代码,那么即使您这样称呼,您也没有在做敏捷。如果我在开始时花了5分钟来思考需求,是什么阻止了我猛冲代码并称之为瀑布。
克雷格(Craig)2010年

1
蛇蝎属是对的,问题不在方法论上。问题出在管理团队让牛仔经营部门。
杰夫·西弗

7
@sipwiz:即使在瀑布中,牛仔也会直接撞击代码。最终,他们记录了他们编写的任何设计规范。
TMN 2010年

13

其他任何东西一样,敏捷可以用来掩盖不良行为或尝试解决团队认为自己不负责的问题。

但是,某些敏捷方法(如Scrum)的魔力在于它们将为组织内的问题提供很多可见性。包括团队内部的问题!

然后,您将有机会在它们出现时解决它们。

如果问题出在牛仔身上,那么在第一次迭代之后就很明显了。如果问题出在其他地方,您很快也会看到它。


12

奇怪的是,在我参与的“敏捷”项目中,似乎更像是管理人员的一个借口,跳过了需求收集阶段,而不是像牛仔一样渴望简单地开始编码。我的项目已经非常令人沮丧,因为我们不具备任何最终用户进行交互。取而代之的是,我们有一个主管与销售人员进行交谈,以找出他们认为客户想要的东西,然后召开会议并向经理进行描述,然后经理开始向开发人员分配任务。在一个“好的”项目中,我们可能要引用PP演示文稿,但是通常我们会结束日常的Scrum会议,询问某些功能的工作原理,经理写下问题并询问主管。这是浪费时间,但是却很“敏捷”!


我们什么也没说,但这基本上就是这里的事情。实际上,我们有一些大型的设计文档,但是它们已经过时了,没人看。取而代之的是,每个新功能或修补程序都仅由副总裁认为热门或销售人员说客户想要的东西来决定,这些东西在会议中迅速散开,并在繁重的最后期限内被抛弃。
CodexArcanum 2010年

+1:@ TMN,@ CodexArcanum:我也有同样的经历。没有用户冠军。销售决定了产品管理的新功能,然后由他们将其传递到开发中。
Jim G.

7

我不会说我是Waterfall的粉丝,因为我也处理令人沮丧的示波器蠕变问题,但是我一直认为敏捷是解决该问题的一种让步,而不是有效的解决方法。具有早期迭代测试和大量纸张原型的良好设计似乎更加有效。


4
问题是,对于一个琐碎的项目而言,好的设计几乎是不可能的。设计的问题仅随着项目的进行而变得明显。用户无论多么熟练,都不知道他们想要什么。
克雷格(Craig)2010年

@克雷格 虽然我同意您的看法,几乎无法确定规格,但即使是平凡的系统也应该能够在纸上进行原型设计,这比实际编写整个系统只是为了发现它需要这样做要便宜得多。被重写。如果不能用纸做原型(至少对于基本功能而言),那么很难想象该特定系统将运行良好或最终可以合理实施。如果您和用户在开始工作之前无法坐下来在纸上浏览测试场景,那么将会出现严重的问题。
Morgan Herlocker 2010年

2
@克雷格我不同意一个好的设计是不可能的。预先了解系统的每个复杂性几乎是不可能的,但这并不意味着无法针对已知的设计进行生产。我的意思是说,甚至连“此应用程序将使用DAL实体框架作为MVC应用程序编写”一句话也是如此。除此之外,我还看到招标书中有180多页的需求,您不能告诉我,细节不足以产生出不错的设计。
sipwiz 2010年

sipwiz,我的经验是页数与规范的实用性无关。写的东西更重要,而不是多少。180页的好与否完全取决于系统,如果要构建Windows,我认为它会亮一些。
Craig 2010年

3
另外,我认为您需要记住,敏捷并不意味着没有任何规格。
克雷格

6

我看到敏捷开发的辩护说它对牛仔造成的失败不负责。敏捷成功需要勤奋和智慧。

只要您对其他方法应用相同的让步,这似乎是一个合理的位置。如果不能将牛仔造成的项目失败归咎于敏捷,那么就不能将牛仔导致的项目失败归咎于非敏捷方法。

然后我们可以争论敏捷与牛仔之间是否存在关联(不是因果关系!)。我相信只有轶事证据。这是否被认为是不被管理层发现的与牛仔习俗相处的好方法?

当然,如果我们接受牛仔可能不会在各种方法中平均分布,并且我们接受牛仔破坏了流程的成功使用,我们将很难测试流程是否成功。关于一个过程更好(在上下文中)的说法几乎是不可证伪的。这是使我对自己的职业感到羞耻的问题之一-许多主张缺乏科学依据。

(顺便说一句,我讨厌将敏捷的替代方法称为“瀑布”,因为瀑布过程似乎是每个人都在攻击的稻草人,但很少有人实际使用而没有任何迭代。)


4
开发失败不是牛仔在场的结果。开发失败是管理不存在的结果。
Huperniketes 2010年

@Huperniketes,那是个惊人的新闻。程序员永远不要责怪!我们选择了多么理想的职业!
奇怪的想

@Oddthinking,不要再局限于二元思维了。程序员当然不能因其专业水平的表现而受到指责,但是程序员绝不应该为项目失败负责。这是项目经理的责任。
Huperniketes

@Huperniketes,请您进一步说明一下?您最初说的是“开发失败”,但是后来转移到“项目失败”。我同意,如果项目经理之一的开发人员的表现低于预期,则项目经理可能必须“背着罐头”,但是很难看到牛仔们交付失败的原因永远不会成为项目失败的原因。
2010年

@Oddthinking,我的意思是“开发失败”和“项目失败”之间没有区别。它们在这里是同义词。当然,一个项目可能不会成功,因为编程工作没有达到标准,但是项目经理的职责是识别这些情况,并在需要时通过团队变更来补救。看到项目成功是他的工作。如果他不能这样做,就需要被解雇。因此,他需要确保团队成员,甚至牛仔编码员和摇滚明星程序员,都能履行对项目的义务或解雇他们。
Huperniketes 2010年

5

只要对您的团队有用,敏捷就可以了。

太多的人出售它是为了将一个糟糕的团队变成一个好的团队,而这种方式是行不通的。您不能容忍坏人,而要采取措施突然使他们有用。

我喜欢敏捷背后的许多想法,但是我一次又一次地看到失败是,经理们在推动一套严格的“敏捷过程”,这些过程面对整个敏捷概念,即团队应该是自我-组织。

就“牛仔”而言,我发现对于我所参与的所有敏捷团队来说,这些流程不仅会使他们放慢脚步,而且使他们放慢脚步。我从来没有遇到过敏捷启用 “牛仔编码器”的情况。

对于一支优秀的团队,它似乎运作良好(然后,当您拥有一支优秀的团队时,大多数流程似乎都运作良好,有趣的是,不是吗?)。

根据我的经验,对于其他团队来说,它永远不会帮助坏人做得更好,但是有时它 会使生产人员陷入困境。

总的来说,我认为重要的是建立一个好的团队,告诉他们您需要什么,然后避开。我不认为使用任何流行语都可能解决团队不佳的问题。

(如果您还没有从上面弄清楚,那么我至少不喜欢“ Capitol-A Agile”。另一方面,我也不认为这会鼓励牛仔。)


3

如果做得好,敏捷应该可以控制“牛仔”技术主管和“英雄”程序员。如果您没有观察到这种效果,则可能表明您的敏捷实现中缺少重要的东西。

我想补充一点,“敏捷”实际上是一个接口(我在这里使用的是面向对象的隐喻),您无法实例化它。如果您的具体实现是XP,那么您必须遵循大量的技术惯例,而这对于牛仔编程几乎没有余地。另一种可能是,组织良好的Scrum团队的团队合作将使其受到控制。


3

牛仔编码人员也倾向于编写测试性很差的代码,并且他们倾向于不喜欢编写测试。我认为让每个人都进行TDD可以有助于保持牛仔的态度,并使开发人员对体系结构的思考更多。当然,没有方法是完美的。


1
不要忘了偏执狂“如果(VAR!= NULL)”检查洒遍布代码...
约尔根Sigvardsson

3

我目前在这种情况下在一家商店里工作,除了与组织文化有关,而不是与特定的个人牛仔有关。

该组织始终采用相对宽松的“非正式敏捷”方法。我不会说它是真正的敏捷,而是“名称上的敏捷”,而只是实践中不存在的简单方法。不同的团队运作方式不同,但是由于整个组织文化除了非常松散的“仅以名字命名的敏捷”流程之外没有其他方法可利用-这是相对牛仔般的总体混乱情况-尤其是在整合方面(其中有很多)。

这个故事的寓意是-是的,这确实发生了。如果我现在正在找工作,我会非常小心。如果一家商店声称自己是敏捷公司,那么我会在面试中问一些非常棘手的问题,以确保实际遵循的不仅仅是敏捷的误称。


1
听起来也很像我的情况。整个问题的重点在于,如果“敏捷”不在身边,那么组织可能会坚持瀑布式计划,而无论其缺点是什么,它都比没有流程要好得多。
sipwiz 2010年

2

我发现,只有拥有可以使用的应用程序以及可以在其上输入数据的屏幕,用户才能向我们提供反馈。只有这样,他们才能真正理解我们在需求文档中要说的内容(客户签名,但每个人都有自己的意思版本)。如果它不是敏捷开发,那将是一个超出预算的瀑布式项目,但是一旦交付,应用程序就会发生变化。您的第一个版本只不过是供用户讨论要求的原型。因此,我宁愿称其为敏捷,也不愿超出预算。


我也已经看到了这一点(看到较早版本并深陷于您所知道的错误/功能中的客户尚未准备好),并且您有时可能会难以获得有用的反馈。不过,我认为这是对客户进行教育的问题。
Dean Harding

原型设计..
sipwiz 2010年

2

我认为这是真的,在某些环境中,敏捷是没有纪律的借口。真正的问题是,我们没有意识到为什么要使用任何方法。就我个人而言,我认为该方法论是体系结构问题,因为系统的体系结构应该解决非功能性,质量属性,该方法论应该解决某些相同的属性(可维护性,开发生产力,知识转移,等)。

将方法论视为对过程属性的控制意味着两件事:1)没有度量标准,我们无法将一种方法论的有效性与另一方法论进行比较; 2)需要就哪些属性很重要(交付时间与代码)做出积极的决策质量与知识转移)。

如果既没有指标又没有明确的目标,我们只是选择一种方法作为我们的“魔术羽毛”,只要坚持下去,我们就可以交付软件。

现在,敏捷,XP,Scrum等的反对者都在谈论这种特定方法论的脆弱性。争论是:为什么要使用一种可以被缺乏纪律的个人破坏的方法来遵循所有规则?这个问题是有效的。但是,这只是症状,而不是原因。如果定义,测试和及时反馈一组准确而有意义的(这是困难的部分),我认为我们会发现特定的方法论与成功无关。(有趣的是,我看到过使用无数方法论的成功项目,而使用相同方法论的失败则是两倍)

那么指标是什么?它们因项目而异,因团队而异,有时也不尽相同。当交货时间表很重要时,这很有用,我个人使用的是估算技能和质量。大多数开发人员可以准确地估计为期一周或更短的任务。因此,一种方法是将项目划分为一个开发人员一周的任务,并跟踪谁进行估算。随着项目的进行,他们可能会更改其估算。任务完成后,如果关闭超过10%(每天1/2),我们将其视为错误-我们确定为什么关闭估算(即未考虑数据库表),确定纠正措施(即将DBA包括在估算中),然后继续进行。利用这些信息,我们可以创建指标,例如每周的估计错误数,每个开发人员的错误数,

所以呢?那就是方法论的来龙去脉-如果您的预测模型无法满足流程质量,则可以选择添加或删除方法论的某些方面,并查看其如何影响模型。当然,没有人会因为担心失败而愿意参与开发过程,但是我们已经以持续高且可预测的速度失败了。通过进行单独的更改并衡量结果,您可能会发现敏捷是您团队的理想方法,但是您可以轻松地找到RUP,瀑布式或最佳实践的杂烩。

因此,我的建议是让我们不再担心我们所说的流程,进行与我们的开发流程目标相关的检查,并尝试使用不同的技术来改进该流程。


好点。我对敏捷方法中的可交付成果的挫败感更加不稳定,这使得无能的技术领导者无法获得他们想要的任何东西,而根据我的经验,最终结果是没有任何过程可以==牛仔编码。
sipwiz

1

我会坐在这里,那里有一个很好的高级规范,而不必每隔一天就要重新访问相同的屏幕和功能,因为其他东西突然出现了,所以没有想到这一点。

这似乎与我的同事在他所从事的“敏捷”项目中的经历相吻合(我自己从来没有参与过):要求他为某些规范编写一段代码,然后在完成测试并准备提出一项新要求,要求他进行更改并重新测试。他发现这很令人沮丧。

我不是在抨击敏捷,我怀疑团队没有正确地进行敏捷-但是,正如您所说,牛仔有时可以使用“敏捷”一词来说服尖锐的领导层管理者半熟的设计是积极的,而不是消极的。


没有自动化测试的敏捷就
Steven A. Lowe 2010年

1

有趣的是,没有人认为自己是牛仔编码员。我打赌很多海报是或曾经是;)


1
我怀疑我们大多数人都是从牛仔开始的。
David Thornley,2010年

您可能是对的,而且我从事编程工作的时间并不长,但是当我在一家没有方法论的商店里时,我们就有牛仔了。我现在在一家敏捷咨询公司中,您所做的一切都是巨大而可见的,实际上让我很难想象有这样一种环境的牛仔编码。
埃里克·威尔逊

1

牛仔编码员很好,因为他们喜欢快速完成工作。他们通常不关心大图问题或代码质量,这就是为什么“牛仔编码器”通常是一个绰号。他们的方法减轻了项目后期交付的机会成本风险。

非牛仔编码员喜欢以安全,有纪律和有序的方式进行工作。他们喜欢正确地构建它并构建一次。他们以永远收集信息,考虑假设条件,产生没人阅读的大文件以及迟到或迟到交付系统而闻名。他们的方法试图减轻劣质软件的风险。

敏捷方法的卓越之处在于,它们通过强制进行短时限的工作迭代来利用这两种类型的编码器的优势,这些迭代要求编码人员快速生成高质量的小型作品。而且每次迭代都减轻了延迟交付的机会成本风险和质量低劣的软件的风险。


0

敏捷很少强调前端设计/规范的原因不仅仅是因为需求可能会发生变化。更深层的原因是,即使需求稳定,规格仍趋于:

  • 错误-无法捕获需求。

  • 不一致-充满矛盾,因为它们包含足够的信息,以至于作者/阅读者无法抓住它们。

  • 分离-它们没有合并来自正在运行(尽管已退化)的系统的有价值的反馈。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.