第一部分:网友的报料引发关注
在一个宁静的小村庄里,京东创始人刘强东的老家,发生了一件颇为富有幽默感的事情。一位好心的网友在社交媒体上发布了一段视频,声称刘强东的老家水龙头被忘记关了,而她亲自上门帮忙把水龙头关上了。这个看似微不足道的事件,很快在互联网上引发了巨大的关注,甚至影响到了京东的客服部门。
这个视频在网络上传播迅速,引起了众多网友的热议。人们纷纷在评论区留言,调侃和献言献策,仿佛这个小村庄的水龙头问题成了全民关心的话题。有人开玩笑地建议网友给刘强东发一封信,告诉他水龙头被关上了。而更有趣的是,一位网友竟然联系了京东的客服部门,希望他们能够将这个情况反馈给刘强东本人。这位网友大概是觉得,刘强东是京东的老板,应该对公司外部的事情负有一定的责任。
京东的客服部门也非常有趣地回应了这一请求,表示会后续反馈。然而,这位网友似乎还不满足于此,继续提出了一个小小的要求:要求京东客服给他发一个优惠券,以表示感谢。这个要求引发了更多网友的笑声和调侃,仿佛他们都在为这个善意的举动鼓掌喝彩。
第二部分:刘强东的低价策略和双11
刘强东作为京东的创始人和首席执行官,一直致力于提供高质量的产品和服务,同时坚持低价策略,以满足广大消费者的需求。他曾在内部会议中表示,京东已经让一些消费者有了越来越贵的印象,需要重拾低价策略,回归用户,并要通过供应链的效率提升,将价格降下来,提高服务质量。
从目前的数据来看,刘强东的低价策略在今年的京东双11取得了不错的成果。京东平台的数据显示,自10月23日双11大促活动开启以来,个人及个体户店铺数量较去年同期增长超过11倍,这意味着越来越多的小商家选择在京东上开设店铺,受益于双11的促销活动。京东百亿补贴频道也产生了超过120万单的爆款商品,用户规模较今年6月增长近5倍,显示出双11促销吸引了大量消费者。
更令人瞩目的是,近30个品牌在短短一周内实现了销售额超过10亿元,而近1.5万个品牌的成交额同比增长超过5倍,近9000个品牌的成交额同比增长超过10倍。这表明刘强东的低价策略和双11促销战略得到了广泛的认可和支持,许多品牌和商家都积极参与其中,共同推动了双11的业绩增长。
刘强东一直强调用户体验,他希望京东能够提供更好的服务,让消费者感到满意。双11期间,京东也加强了物流和客户服务,确保顾客的订单能够及时送达,同时积极响应用户的问题和反馈。这种关注用户需求的态度,与网友们关心刘强东老家水龙头的行为有着微妙的联系,都表明刘强东和京东关心用户,尽力提供更好的产品和服务。
第三部分:全文总结
这个看似微不足道的事件,涉及到了刘强东的个人生活和他创办的京东公司。网友的举报和京东客服的回应,不仅引发了一系列的调侃和幽默,也反映出刘强东和京东在互联网上的广泛关注和支持。刘强东一直秉持低价策略,努力提供高质量的产品和服务,双11促销活动也取得了良好的成绩,吸引了大量商家和消费者。他强调用户体验,并积极回应用户的问题和反馈,这与网友们关心他老家水龙头的幽默举报有着微妙的联系,都体现了他对用户需求的关注。这个故事不仅是一则轻松的新闻,也反映出了中国互联网巨头和他们的创始人在公众视野中的形象和影响。
这个轻松有趣的故事不仅在网上引发了热议,也成为了一种有趣的社交话题,人们争相讨论和评论着这个看似不经意的事件。这背后反映出互联网时代信息的传播速度之快,一条微博、一个视频,甚至一个评论,都足以引发广泛的讨论和互动,将普通人和名人的生活联系在一起。
刘强东作为中国电商领域的杰出代表,不仅以他的公司京东取得了商业成功,也以他个人的公共形象成为了公众关注的焦点。这个关于水龙头的小故事,也让人们看到了他亲民的一面。他的低价策略和对用户体验的关注,一直是京东成功的关键因素,而双11活动则成为了中国电商界的年度盛事,吸引了数以百万计的消费者和商家。这次的双11数据再次证明了他的战略是明智的,也为中国电商市场的健康发展作出了贡献。
这个故事还反映了互联网时代的幽默和互动,网友们可以通过社交媒体来表达自己的观点和情感,与名人和品牌进行互动,成为信息传播的一部分。而京东客服的回应也表明,公司在互联网时代需要更加灵活和机智地处理各种意外情况,维护好公共形象。
总的来说,这个小故事是互联网时代的一个缩影,反映了信息的传播速度和影响力,也展示了中国电商领域的竞争激烈和刘强东的成功战略。它也告诉我们,幽默和互动是社交媒体的重要元素,可以促进交流和互动,使生活更加有趣。无论是水龙头忘关,还是双11的狂欢,这些小故事都为我们的日常生活增添了一丝欢乐和娱乐。
(免责声明:文章描述过程、图片都来源于网络,此文章旨在倡导社会正能量,无低俗等不良引导。如涉及版权或者人物侵权问题,请及时联系我们,我们将第一时间删除内容!如有事件存疑部分,联系后即刻删除或作出更改。)
很明显,这是一项有偏见的研究,不值得认真对待:
敏捷咨询是从网络开发咨询公司发展起来的,作为一种管理糟糕的利益相关者的防御性方法。他们吸收了一些真正的行业最佳实践,但也有很多只是为了消除在付钱给你的人不了解软件开发(或项目管理)基础知识的环境下交付软件所带来的最坏影响。
在这种环境下,这种方法实际上很有效–你不会得到高产能的工程团队,但你会得到稳定的交付和足够稳定的工作环境,从而避免最坏的结果(什么都交付不了)。
据我所知,没有一家大型科技公司实施过这种敏捷方法,但有很多大型非科技公司实施过。如果你的公司有一位首席信息官,而企业将软件工程师称为 “IT”,那么你很有可能就是这样做的。这样做效率很低,但对这些公司来说可能已经足够好了,尤其是如果公司已经成立,光是转换成本就会是一场噩梦。
如果你把它当作一家初创公司使用,那就大错特错了,你应该认真重新评估一下你认为公司的未来会是什么样子。
这不仅是一项有偏见的研究,而且是一篇关于一项研究的文章,其中的数据并未公布,因此无法判断是否有任何可取之处。
文章中公布的研究摘录也不能让人产生信心:
1. 敏捷(“Agile Requirements Engineering”,敏捷需求工程)的定义是:在明确需求之前开始开发,没有完整的需求: 在明确需求之前就开始开发,没有完整的规范,开发后期有重大变更。
我想即使是反对敏捷的人也会同意,这是对敏捷开发实践的严重不足,甚至是完全错误的描述。这听起来更像是一份会导致敏捷项目失败的清单。
2. 影响工程的定义是 使用所有研究过的工程实践来提高成功率。
为什么作者不敢在前面给出影响工程的任何属性?这听起来像是在诱导人们购买这本书,以便了解书中研究了哪些神奇的工程实践。这有一股骗人的味道。
没错,大公司基本上都以敏捷为借口,不对创意进行全面规划和审查。只要边做边想就行。然后在两年内重建一切,因为你留下的都是过时的、无法管理的意大利面条代码,而且你烧掉了所有的中小型企业,所以他们也带走了知识。
他们会重建吗?或者只是在功能上再增加功能,直到整个东西吱吱作响。
项目完成数年后,当系统终于可以正常运行,最终用户也知道该期待什么时,新的管理层会在足够高的级别上要求使用他们选择的技术栈重建一切,因为他们需要简历条目。
当然,你会得到一个漏洞百出的第二系统,它又回到了原点,企业不理解/讨厌它,开发人员也讨厌它,因为他们要不停地救火。
一般来说,他们会等到有东西爆炸,或者他们无法在无法维护的混乱系统中添加任何功能,他们别无选择:)
没错,这就是我的经验。也可能是成本爆炸,比如使用昂贵的大型机,在 MIPS 成本爆炸之前迁移到其他设备。
有人成功地从大型机迁移过来了吗?帮朋友问问。
是的,我听说过我们公司的一些系统成功地从大型机迁移过来。这往往是一个痛苦的过程。还有一些应用程序需要迁移。
瀑布式和螺旋式模型在一般情况下都失败了,原因是要提前计划好一切,所以除非是安全关键型系统,否则我认为敏捷式还是比较好的。
我之所以这么说,是因为无论使用哪种方法,都会有意想不到的代码,中层开发人员喜欢过度设计解决方案,初级开发人员不知道更好的方法,只会做 stackoverflow 上最先出现的东西。
企业高管也不知道他们想要什么,所以当他们看到原型时,就会在半路上改变系统,这样你最终还是会得到科学怪人的系统。
为此,你还不如一开始就使用半成品系统,这样可以节省时间。
你说得好像瀑布式设计有完整的计划和完全审核过的想法。
其实不然。
> 只是边做边想。
这听起来就像我参与的数百个瀑布式项目,都是在项目进行到一半时,因为突发情况而导致进度落后。
它比我所在团队的敏捷项目有更好的计划。当然,两者都有可能被滥用。根据我的经验,计划被忽视的情况更多。
很好的意见。
我曾在这类公司中担任过 “客户 ”一职,我认为这种改进是互动更加频繁的结果,因为互动增进了相互理解。
内部客户被迫详细考虑需求(尽管是零碎的)。开发人员被迫解释他们正在做什么。
我见过的太多项目都缺乏沟通。客户会把事情交给开发人员(“只需构建 x”,大量未经深思熟虑的定制要求)。开发人员会开始猜测,并朝着错误的方向工作,往往会因为定制而导致复杂的切入点)。
你所说的 “敏捷咨询 ”确实有助于双方了解实际需要和如何达到目标。
据我观察,敏捷有两种。
“教条式敏捷 “是所有反对敏捷的人都反对的一种,因为他们在为某些公司或经理工作时,在没有真正理解敏捷是什么的情况下喝了 ”酷爱 “敏捷的饮料,结果被 ”酷爱 “敏捷烧伤了。盲目遵循某个顾问的敏捷手册并不是敏捷。
敏捷精神 “有点像 ”蟒蛇禅”: X 通常比 Y 好,但有时做 Y 也是完全合理的。为了让敏捷发挥作用,你需要有理解这一点的领导者和 CI。敏捷强调沟通和灵活性。敏捷是建议性的,而不是指令性的。
大A,小A。
敏捷–Scrum、Scrum Master、epics、故事
敏捷 – http://agilemanifesto.org/principles.html
敏捷是一堆需要遵循的规则和流程。
敏捷是一种理想,需要努力实现,但永远无法完美达到。
—
编辑–文章中的这段话可能是最重要的一句
> 然而,虽然《敏捷宣言》可能存在一些问题,但这些问题更多的是源于它的实施,而不是原则本身。
敏捷不等于敏捷。
至少在我这个卑微的开发人员看来,这基本上是无关紧要的。
我大体上同意你的观点,但在评估相互竞争的方法论时,你所说的 “敏捷精神 ”很快就会变成 “无真知者”(No True Scotsman)。“如果你的项目失败了,那一定是你的敏捷方法不正确”。
你的批评有一定道理,但也不完全正确。你可以通过一些事情来检验一个团队是否真正在做敏捷,比如,你上一次尝试改变流程来检验它是否改善了你的成果?什么实验失败了,并因为没有成功而被冷静地从流程中删除?当团队的工作量性质发生变化时(例如,从新开发到维护),你是如何调整流程以适应变化的?你的流程是从团队和他们的经验中总结出来的,还是从上而下,实际上没有反馈?
在这一点上,如果你正在做这些事情,那么对你的批评就会有一定的道理,即如果没有成功,那就是你做得不对。要么是外部因素阻碍了你,使你无法适应并真正遵循敏捷原则;要么是你的团队由于某些原因(结构、个性问题、经验水平、规模太大而无法做到如此灵活,因为大型团队需要更多的结构)而无法执行适应性调整;要么是由于某些原因(例如 “无论团队多么敏捷和聪明,你都无法让 4 个人在 6 个月内开发出一个符合标准的浏览器,同时也是一个办公套件”),这项任务本来就太难了。
在我看来,“精神上的敏捷 ”失败的最常见证据就是管理层要求特定团队对功能或截止日期变更后错过截止日期负责。这说明管理层不了解软件开发。如果你认为可以增加功能或将交付日期向左移动而不承担后果,那你就错估了整个行业。
是啊,我的前偶像老板非常惊讶地意识到,在我入职期间将公司一分为二并出售其中一部分可能会对我的工作效率产生负面影响。
我们在挑选合适的人来管理事物方面做得并不好;恰恰相反,在很多情况下,尽管我们不得不面对那些垃圾,但无论取得什么成功,我们都是成功的。
正如另一位评论者所说,很难比较 “精神上的敏捷”,但我发现以下做法非常成功
根据团队、产品和公司的具体情况不断改进方法,这似乎是我见过的最好的结果。
我很少每天开会,我们可以偷懒。也许一周会有两次电话会议。
对于故事积分,我见过使用斐波那契数列的模式,也见过将 4 个类别评定为积分的模式,甚至还有 1:1 映射到工作天数的模式(不太理想)。我个人喜欢 4 个类别的方法,尽管每个类别都有一定程度的主观性,但整体上感觉主观性较少。
最后,如果流程妨碍了工作效率,我觉得就去做吧,我们要么回头记录发生了什么,要么稍后再完善流程(不过,我们很少因为好的理由而跳过质量保证)。
> 在我的经验中,根据团队、产品和公司的具体情况不断改进方法似乎是最好的结果。
在我看来,这就是敏捷的核心:从事工作的人可以根据自己的目标和需求灵活调整。顾问行业的很多工作都归结为想方设法帮助那些不愿意给予灵活性或明确要求的业务人员找到听起来不像是说 “不 ”的方法。
精神上的敏捷 “的问题在于,如果采用了它却没有得到预期的结果,敏捷爱好者会很快提醒你,你实际上并没有在做敏捷。
这是一个常见的说法,但我认为并非如此。“精神上敏捷 “的人会认识到失败,并寻找适应的方法,从而减少类似失败的发生。拒绝接受这种反思和调整的机会就是 “没有真正做到敏捷 ”的表现,而这与 “敏捷 ”其实没有任何关系。
如果把同样的推理应用到其他任何迭代式自我调整流程中,你会发现它们往往都会在迭代方面应用之前就失败了。因为这就是它们的本质,它们都是迭代过程,是一种应对失败的机制。
迄今为止,与一个项目是否彻底失败最密切相关的因素是每次会议引用敏捷的频率。
事实上,我发现你可以把敏捷当作一种会议手榴弹,如果你不喜欢会议的方向,好像他们要决定什么愚蠢的事情,你可以直接说:“等等,那是敏捷吗?”然后会议的其他部分就会讨论方法论,永远不会得出任何结论。
是啊。我做的是零散 CTO 咨询,通常与开发人员的沟通效果都不错,因为我非常注重消除瓶颈、无益的流程和会议等。
当你遇到来自其他管理层的 “圣牛 ”时,就会遇到挑战。
– 硬性规定最后期限,同时承认我们没有足够的信息来承诺这些最后期限
– 用故事点来衡量时间
– 要求绝对超负荷的团队交付新功能,却不给他们时间来改善系统中的潜在问题……然后不得不不断停止正在进行的工作,以处理这些潜在问题所导致的生产问题。
有时就像时钟一样,对话总是很艰难。
这就是我的方法。让两个 PM 互相配合,然后去做一些能产生投资回报率的工作。
这是被解雇的好方法。在金融史上,开发人员从未创造过投资回报率,这永远是 MBA 的主意。
我避免了很多损失:)
不过,可能发生的事情通常不会出现在账本上
总得有人给 MBA 出主意。
所以有点像千篇一律的共产主义会议,他们把所有时间都花在会议上,互相辩论,痴迷地讨论社会主义的细枝末节,而不是完成任何事情。
我仍然记得一位项目经理对我抱怨 Scrum 项目会议数量和时间的回应:
“让我们开个会,讨论一下我们的会议是不是太多了?
(她倾向于用一种非常消极攻击性的、天鹅绒手套戴在铁拳上的方式来使用上升终端)。
我很高兴我的公司里没有人的职称叫 “PM”。
这总是一个不好的征兆,因为这些大忙人产生的工作负荷会让人们觉得有道理。
哦,比你想象的还要糟糕。
我的团队都是雇员。但项目经理和几名开发人员都来自一家加拿大咨询公司。我们是从外部进行项目管理的。每当需要添加某些功能时,新老板就会不停地问:”你们为什么不用存储过程呢?
最后,老板决定炒掉所有人,用 Oracle 存储过程取代我们。别开玩笑了,这可不是 “为了 400 美元而没有发生的事情,亚历克斯”(things that didn’t happen for $400, Alex)。
我真的不知道该怎么理解这篇文章,它自己说这是另一种方法的推广者委托进行的一项研究。如果他们是顾问,想推销自己的咨询服务,他们就需要这类东西来推销。
但我的基本反应是,失败意味着什么。因为在我的世界观里,失败应该是意料之中的,是可以接受的,是可以从中吸取教训的。我们完全有可能花费大量时间来避免各种可能的失败模式,而实际上根本没有交付多少价值……但我们成功地避免了工作被视为失败。
– 基于对软件工程师的随机调查(他们在某种程度上可以看到项目的开始和结果)
– 未定义项目
– 成功的定义是不违反铁三角(所以没人知道他们在说什么,或者他们在做微不足道的 “项目”)。
– 如果你看了这本书的评论,就会发现完全是人工智能产生的无稽之谈
> 失败是什么意思
自从我 1992 年开始编程以来(远在 “敏捷 ”一词进入我们的词典之前),我一直在读 50% 以上的软件项目 “失败 ”这一说法。它们总是失败,因为它们总是有截止日期,却没有实际定义。敏捷之前如此,敏捷期间如此,敏捷之后也将如此。
我有时在想,我们对失败的定义是否灵活多变,以至于有一半左右的项目低于平均水平,因而是失败的。我曾经不得不对一个项目超出进度 5%的原因进行事后总结–这是对失败的一个相当软性的定义。
> 但我的基本反应是,失败意味着什么。因为在我的世界观里,失败应该是预料之中的,应该被接受并从中吸取教训。
这在某些领域没有问题。在另一些领域,这是不被接受的(也就是说,你不能只是尝试,看看是否能坚持下去)。
但无论如何,你还是希望尽量减少失败。因此,如果一种方法(敏捷)要求在固定和明确的前期需求上花费更少的时间,从而导致更高的失败率,这仍然是一个问题。
敏捷是对不断变化的需求做出反应。如果需求从未改变,那么敏捷并不能保证比其他方法更好。它来自于.com 泡沫中瞬息万变的崩溃市场。如果需求在项目中期改变了两三次,其他方法论会如何呢?这时就需要敏捷了。
如果没有预先给出需求,他们如何衡量 “成功”?最后他们还能指望什么?
敏捷意味着以频繁的节奏向用户交付非常小的增量,让他们能够尽早并经常提供反馈。如果方法得当,就能消除大量的猜测。但是,如果客户(或者你自己的团队或管理层)并不完全了解这个过程,那么事情就会在很多方面出大问题。
我们仍然需要解释一下什么是 “敏捷”。扪心自问,我们为什么 “需要 ”以频繁的节奏交付小增量?难道不是为了应对变化吗?
我想我说过了。它的主要目的是消除猜测。
它的主要目的是对变化做出反应,使整个过程具有可持续性。这是宣言中的四条主线之一,也是 12 项原则中的第二条,同时也包含在 “敏捷 ”一词本身的含义中,而 “猜测 ”一词并未提及。但我可以看到,要预测 6 个月后的市场会是什么样子,需要大量的猜测,而这些猜测都被排除了。我希望你能明白,猜测之所以棘手,唯一的原因就是在此期间会发生很多变化,因此对这些变化做出反应的能力才是更深层次的、实际的主要目的。
我的意思是,你完全没有考虑到这也允许工程师根据自己的喜好选择任务和进度,并对这些任务的创建和优先级排序提出意见。
每当我听到工程师抱怨这一点时,我都会问他们,你是否希望项目经理只写一份充满猜测的任务分配表,然后你就毫无疑问地执行它们。
有些工程师抱怨他们无法挑选自己的任务,也无法参与优先级排序和规划?这一直是敏捷最吸引我的地方。自我组织的团队。围绕积极进取的个人组建。追求卓越技术。
在论坛上,几乎每个向我抱怨敏捷的工程师都会接着描述他们所处的瀑布式系统。
第二个常见的抱怨是 “我不想做提供意见的艰苦工作,只要告诉我该写什么代码就行了”。
这就是我雇佣学生的原因。我必须在其他公司永远毁掉他们之前,用我的方式教他们。
我从来没有在敏捷环境中工作过,在这样的环境中,工程师挑选任务,给我们一个队列,我们按照优先顺序完成任务,没有选择的余地。
这种情况到底有多常见?
这就是货真价实的 scrum,非常常见的疾病。没有自主权或自我组织的团队。队列应该由更高层次的任务、里程碑组成,团队应该将它们重新加工成实际进入冲刺阶段的小任务。当然,首先挑选优先级较高的任务是有动力的,但团队成员应该能够挑选他们能最有效地为冲刺目标做出贡献的任务,而不一定是最重要的任务。
听起来像精益生产。
我参与过的具有固定、清晰和明确需求(以及必要的对应物–固定预算)的项目通常会变成一场噩梦,因为它们实际上并不固定、清晰和明确。你可以在 80% 的分配时间内假装一切正常,但接下来的 80% 时间都花在了争吵上,争吵的焦点是对规格书中某些并不明确的行的可能解释、死亡行军、相互指责(客户和供应商,但不幸的是也包括公司内部)。
敏捷的主要创新在于及早发现失败,从而能够迅速做出反应并纠正方向,而在瀑布式项目中,项目大部分时间都处于量子叠加状态,没有纠正的可能。
> 这在其他情况下是不可接受的(也就是说,你不能只是试一试,看看是否能坚持下去)。
为什么不能?
> 因此,如果一种方法(敏捷)要求在固定和明确的前期需求上花费更少的时间,从而导致更高的失败率,这仍然是一个问题。
这是对敏捷的不正确描述。也许有些 “敏捷 ”公司以此为借口回避需求,但这绝对不是敏捷过程的一部分。
> 为什么不呢?
如果你扮演的是更大产品(尤其是工业产品)中一个部件供应商的角色,你就不能 “试图制造一些东西”。
如果你告诉他们,你想迭代他们的控制系统并提供增量价值,或者告诉他们按照合同约定的方式这是不可能的,那么人们就会不高兴。
> 这是对敏捷的错误描述。在这些情况下,你只需提前制定出总体要求。
啊,公平。这是一个初创公司的网站,所以我考虑的是那些可以自由转折的组织。
不过,新需求应该来自客户,并与工程团队代表紧密合作。因此,它更像是 “交付 MVP 控制系统软件,与实际用户一起测试,然后将用户要求的修改纳入下一个冲刺”。
如果大多数所谓的敏捷团队都没有这样做,我也不会感到惊讶。
是的,对于初创公司的产品开发(甚至是必要的,因为你不知道需要构建什么)、网络开发、面向最终用户的应用程序……
对于许多其他领域来说,完全的增量/敏捷循环是不可能的,如果导致跳过前期规划,就会成为灾难:
你需要集成的同行往往还没有完成。也许硬件还没有最终确定。最终用户还需要几年时间。也许每次测试运行都非常昂贵。
这里没有 MVP,即系统是否按预期运行。
运行核磁共振成像仪、外科手术系统、财务清算、拾取和放置机器、自动轨道保护等的核心软件无法与最终用户一起进行有意义的迭代,以实现正确性。
我的初创公司是一家硬件公司,我们就是自己的客户。你完全可以迭代这类项目,而不是基于自上而下的瀑布式计划开发。这只需要对产品进行狗粮化,并对尚未实现的部分使用模拟或仿真。
> 因此,如果一种方法(敏捷)推动在固定和明确的前期需求上花费更少的时间
敏捷的根本在于有明确的需求,时间并不固定。
关于质量(范围)、时间和成本三角关系,每种主要方法都会选择一个点来强调,另一个点来固定(不允许改变),还有一个点来管理其变化。
敏捷要求速度,因此时间是其重点,它通过固定成本(在一个发布周期内)和允许改变范围来实现这一点,并通过限制发布的功能来实现这一点。但这并不意味着所需的功能不明确。我将在未来两周内以 X 美元的价格交付 30 个功能中的 5 个。如果其中一个功能还没准备好,我们就放弃它。不,功能 6、7、8 我以后才做。是的,你可以改变主意,决定以后要发布什么功能。
精益生产强调的是质量和固定成本,同时允许有改变的时间。你可以花 X 美元买到汉堡,但你排在队伍的第五位,你必须等待。
传统的做法是可预测的成本,它(试图)固定时间,并允许在预算范围内改变质量。如果一切按计划进行,你应该能按时按预算完成,但功能可能会比你想要的少或差。
当然,我们也知道,传统方法做不好,项目就会超预算、超时,达不到预期效果。敏捷方法似乎被用来掩盖糟糕的管理,因为正如整个主题所证明的那样,人们普遍对项目管理的基本原理存在误解。如果你要参与一个 “敏捷 ”项目,而你的需求并不明确,那么你就需要大吵大闹,让项目经理和产品负责人承担责任。当然,他们应该在每个冲刺阶段开始时就明确需求。
这篇文章也没有详细说明制作的是什么软件等。
如果你要为国际空间站或星际探测器构建控制系统,你当然需要在开始开发之前就把需求敲定下来;你不能只是不断地增量推送更新。
但如果你要在初创公司的第三个支点上构建 “又一个 CRUD 应用程序”,那么事先写下所有需求几乎是不可能的。
这就是敏捷的问题所在。它对每种情况都开出了一刀切的药方,当然……失败了。
如果你说的是客户期望,是的,你可以管理客户期望。只要你诚实、坦率,客户往往会原谅你。
另一方面,如果你说的是核心应用程序接口(API)或下游应用程序接口(API)所依赖的构建模块,那么就不行。你不能提供一个只能在 90% 的时间内正常工作的写入数据库/存储层的 API。
> “我们的研究表明,在预算范围内按时交付高质量软件的关键在于强大的需求工程流程,以及在出现问题时讨论和解决问题的心理安全感,同时采取措施防止开发人员倦怠”。
我差点笑出声来。这不就是敏捷吗?
可能就是最初的敏捷[1]
如今,它已沦为微观管理的痛苦音乐椅。它所宣扬的预防和提供的东西,正是它所提倡的。
[1] https://agilemanifesto.org/
在有人说 “没有真正的苏格兰人 ”之前,请考虑一下 “敏捷 ”的含义:
> 人重于流程
以及
> 应对变化而不是制定计划
而 “大写的敏捷 ”简直就是教科书式的流程。
是啊,就像人们说自己是基督徒却反对帮助穷人一样。从任何合理的定义来看,这显然都不是基督徒……
难道 “基督徒 ”不是那种只要表明自己是基督徒(公开表明信仰)就能成为基督徒的谓词吗?我的意思是,除非你选择一个需要洗礼的教派。
是的,这就是它的演变过程。至少天主教还能保护自己的品牌不受这种疯狂行为的影响。敏捷的家伙们从一开始就应该这样做……如果他们知道会发生什么的话。
每个敏捷教练都会告诉我,敏捷就是适合团队的一切。
方便的是,如果某些事情不奏效,他们就会认为这不是真正的敏捷。
当然,他们强加给团队的所有流程和会议实际上都行不通,但那时他们早已不在了。
> 每个敏捷教练都会告诉我,敏捷就是适合团队的方法。
根据我的经验,大多数所谓的敏捷教练都是 scrum 规定主义者。
我是说 “科学 “也是有效的。如果有些东西被证明是错误的,我们就把它扔掉,说它不科学。这很好。我完全不觉得这有什么问题。
但把没用的东西推向市场,然后离开,这就不是敏捷了:P
科学有行之有效的方法论,这些方法论会被明确地传授、遵循和审查。如果大部分建议都是 “做有效的事”,那么敏捷教练就无法提供真正的指导。别扯了……
方法论是事后才发现的。唯一真正科学的方法就是 “如果你是赢家,你就和我们在一起”。事实上,很多科学方法都是没有经过测试的,而且很可能是超级糟糕的,比如现代同行评审制度,或者拨款写作/提案/评审。
这些都不是实际科学的方法论,而是出版和资金问题。与同行评审关系最密切的方法论是可重复性理念。有很多同行评审过的东西都无法再现。
很多人认为没有经过同行评审的东西就不是科学。
“强大的需求工程流程”
我曾在一个团队中工作过,它非常了不起。它还暗中帮助解决了职业倦怠问题。这是一个 “敏捷 ”团队,但我们遵循的更多是 Scrumifall 模式,该模式在该项目中效果很好。
从那时起,我参加过很多敏捷团队(有些团队比其他团队更敏捷),但需求流程都是垃圾。然后领导们就会想,为什么事情要花这么长时间、有这么多 bug、倦怠感很强等等。这实在不足为奇。
你能详细介绍一下那个团队的 “强大需求工程流程 ”吗?
这是一个非常注重业务流程的应用程序,比如不同小组之间的项目路由。我们为每个业务流程准备了电子表格和流程图。这意味着业务实际上必须考虑可能采取的路线以及每一步所需的数据。因此,电子表格会告诉我们该步骤可能暴露的所有数据,包括数据的处理方式(R、RW、必填、格式/类型等)。这真是神奇。
一旦创建了流程,业务部门就必须向产品负责人推销任何流程变更,要么证明这是一个监管/法律问题,要么使用成本研究来证明这样做可以省钱。因此,不能来回修改,也不能做多余的修改。
这就是我努力向团队灌输的工程方法。这非常依赖于需求管理各个层面的良好实践。
“防止开发人员倦怠”。
……坦率地说,我认为所有的讨论会和不断询问我是否做出了贡献(每天都问?
我不介意每周站立 2-3 次,每次最多 15 分钟。
但 5 次 30 分钟的站立… 太累了。感觉产品经理缺乏信任。
对了……还有不合格的、零工程经验的、多元化招聘的产品经理。这真是超级烦人–管理他们的人并不是通过工程师应有的途径(拥有可证明的工程技能)获得职位的。
如果你读过关于敏捷的书,那么站立应该是在一起工作的开发团队成员之间进行的,主要是为了他们的利益,而不是作为对其他人的状态更新。项目经理或在 Scrum 中被视为 “产品负责人 ”的人可以旁听,帮助解决问题,或向其他人报告延迟情况,但不能要求更多信息或改变已计划好的事情。当然,这种方式很少见,不过我也见过。
我还真没见过这样的情况,但一个表现不佳的产品经理或产品负责人会完全破坏 scrum 或敏捷模型(在它能发挥作用的范围内)。在 Scrum 模型中,产品经理或产品负责人被假定为基本上了解领域并知道需要构建什么,软件需求也是由他们提出的。如果他们不知道需求是什么,不知道如何传达需求,不知道如何与工程师就需求进行协作,那就完全是 “垃圾进垃圾出 ”了。另一方面,如果产品负责人是领域专家,并且乐于帮助定义软件来解决他们的需求,那么与他们合作将是一件非常愉快的事情。
敏捷=站立 “这个等式对敏捷(以及使用敏捷的项目)造成的伤害比任何其他事情都大。我经营着一家公司,我们使用了很多敏捷项目规划方法,但却扔掉了站立。尤其是在远程工作和不同时区的时代,这样做毫无意义。
这是完全错误的。站立最长不超过 15 分钟,如果没有人被任何事情缠住,站立的时间不应该超过几分钟。它根本不应该是一个 “状态会议”。
不幸的是,在实践中,这种情况似乎并不常见。
这是一种同步原型,不是唯一可用的,但却是最常用的。不应该是 30 分钟。也许是 10 分钟。
这也不是对你贡献的测试。这是团队合作的一部分。
“为什么叫站立式会议?”
“这样我们就有动力快速完成工作,然后回到办公桌前”。
“啊,所以如果我们坐下来,就能让会议变得更长….”
> 然而,虽然《敏捷宣言》可能有其问题,但这些问题更多的是源于它的实施,而不是原则本身。
作者是敏捷教练吗?当人们发现敏捷未能改变他们的团队时,最典型的反应就是:你做错了,问题出在你自己身上。当系统在理论上看起来很好,但在实践中却往往失败时,你就应该努力从中吸取教训,然后继续做下一件事。
不,确实如此。敏捷被广泛误解。在 90% 以上的情况下,Scrum 的实施方式完全是对其本来面目的嘲弄。很多教练也完全没有抓住重点。
最根本的问题在于,敏捷与大多数企业的构建方式完全不相容。真正的敏捷团队会与产品的用户沟通,他们对开发过程拥有完全的控制权和责任。但这是不可能的,因为管理者想要管理,而开发人员虽然希望自由,但他们往往宁愿不承担责任。
> 在 90% 以上的情况下,Scrum 的实施方式完全是对其初衷的嘲弄。
如果 90% 以上的人都 “做错了”,你真的能说它被误解了吗?
如果 “出错 ”的几率高达 90%以上,那么它还是一个有用的思维框架吗?
我绝不会购买一个宣传只有10%成功几率的工具,那么我们为什么会喜欢上Scrum呢?
是的,这是误解。
在有人提出 “敏捷 ”这个词之前,我们中的很多人都在进行某种形式的敏捷。
我举个例子:
想象一下制作一款复古视频游戏的过程。首先,你可能会写一个清除屏幕的函数。接下来,你会画出一些简单的东西。也许只是一个简单的块。然后编写一个函数,让你可以用控制器移动方块。然后用某种角色动画交换块。接下来,你将编写一个绘制大梁的例程。然后实现重力。等等等等。不断迭代,直到开发出一款平衡且引人入胜的游戏。
这就是敏捷。你可以事先设计好游戏的很多部分,也可以什么都不设计。事实上,你甚至可以用同样的方法创建游戏设计文档。快速完成初稿,获得反馈,进行调整,然后重复。然后在开发过程中,一旦发现有什么地方行不通,或者出现了更好的想法,就继续回头看。
最初,敏捷与僵化的会议时间表无关。或者是 “适应变化”,或者是人们喜欢抛出的任何流行语。
用 “做错了 ”来表述并不准确。
他们想要这个名称(Scrum、敏捷……),却不需要通过必要的重组来支付费用。
电动汽车有电动马达。因此,如果在不拆卸汽油发动机的情况下,在 F150 上安装电动机,你就拥有了一辆电动汽车。而且它的油耗很低。
> 完全是对 “Scrum ”的嘲弄
我开始编程的时间比 “Scrum”、“敏捷 ”甚至 “XP ”都要早。我对每一种方法论都有一个一致的看法,那就是在推出该方法论之后,管理层的管理方式与推出该方法论之前一模一样。
如果一个流程大部分时间都失败了,那么这个流程就是错的。不能一味地指责实施者。
在某些时候,人们必须承认螺丝和钉子的区别,锤子并不适合这两种东西
老实说,99%的情况下人们都做错了。人们要么过于严格,要么过于 “松散”。
*EDIT* 不一定要正确,只要适合团队中的人就行。如果行得通就用,行不通就改。这就是敏捷。
如果人们只能在 1%的时间内进入 “不太严格、不太松散 ”的金发区,那么几乎在任何情况下,该流程都是不合适的。
1%的成功率可能是在极少数情况下,你有一个小而出色的团队在一起工作,在这种情况下,项目管理方法不太可能是他们工作顺利的原因。
你不必这样做,只需找到适合你团队的方法并加以使用。它可能并不完美,也不完全是它应该有的样子,但如果它有效,那就使用它。
对于成功率只有 1% 的流程,敏捷方法是什么?
让团队反思并提出更好的流程,否则就解散他们。向他们提供他们要求的所有资源。
所以,不告诉他们流程做错了吗?真奇怪。
不,他们需要自己想出来。“错误 “到底是什么意思?为什么你认为你比他们更清楚?如果他们找到了你不知道的更好的方法呢?敏捷说,对于发起人来说,它也需要是可持续的。让团队明白,如果发起人不能支撑下一个冲刺,就不会有下一个冲刺。这个过程取决于他们。
这当然适用于 Scrum,但敏捷与其说是一种系统,不如说是一种宗教。它是一堆极其模糊的 “原则”,其含义往往谁也说不清楚。
什么是敏捷,基本上是一个见仁见智的问题。
– 基于对软件工程师的随机调查(他们在某种程度上可以看到项目的开始和结果)
– 没有定义项目
– 成功的定义是不违反铁三角(所以没人知道他们在说什么,或者他们在做微不足道的 “项目”)。
这项研究没有共享,因此我们无法看到研究方法,无法确定其准确性。我们看到的是调查结果,但那不是研究,调查本身也没有与我们分享。
我并不否认敏捷有其问题 — 如果 “敏捷 ”的失败率不是一个问题,我会感到很惊讶。我们可以根据经验看到 25 年来 “敏捷 ”的结果,这不是我们应该追求的目标。
问题归结为以下几点
1. 采用 “敏捷 ”方法是否足以确保(此处插入目标)?2. 2. 软件行业是否采用了一种创建统计质量控制的运营方法;是否采用了调查和补救造成质量差异的特殊原因和常见原因的做法?
说句不好听的话:对于 #1,答案是 “否”;对于 #2,答案也是肯定的 “否”。
虽然有一些做法与 #2 所描述的世界息息相关,但作为一个行业,我们还没有在软件开发过程中采用一种系统的思维方式来解决问题。
我认为,我们最好采用戴明的管理方法和他的 “深奥知识体系”,这比采用当下流行的 “敏捷 ”要好得多。(参见《新经济学》第三版和《走出危机》,均由戴明撰写)。
在本网站或其他网站上关于敏捷的任何讨论中,你都会发现许多项目经理都在用典型的推理方法为敏捷辩护–“如果你尝试过敏捷,但它失败了,那么你就应该为敏捷辩护。
如果你尝试过敏捷,但失败了,那就不是真正的敏捷。当你证明它实际上是敏捷的时候,说明你做得不对。当你证明你做对了,再回到论点 1。这真是一种循环论证式的 “无真知者 ”论证。
很明显,这项 “研究 ”并不好,甚至算不上是一项研究,但我认为它提出的一般论点并不十分离谱。在我的职业生涯中,我曾是敏捷团队的集成电路设计师,也曾是传统团队的集成电路设计师,我想这种团队应该被称为 “瀑布式 ”团队,我还曾作为团队领导和项目经理负责实施 scrum 流程–我个人从未见过它在运维/基础设施团队中发挥作用。事实上,我确信它无法奏效。它太难确定工作范围、太受干扰驱动、太难衡量实际速度、太容易让工程师和经理在系统中胡作非为。
多年来,我看到的所有支持它的论点都让我觉得非常教条。我现在管理项目的方式是一种带有任务队列的看板系统,以及每周 1-2 次的简短例会,讨论优先级/调整和任何阻碍因素。
编辑:也许应该澄清一下,我在这里使用的是敏捷==Scrum,我知道这在技术上并不正确,但在我的职业生涯中,99% 的情况下我都是这么做的。
> 我现在管理项目的方式是一种带有任务队列的看板系统,以及每周 1-2 次的简短例会,讨论优先级/调整和任何阻碍因素。
对我来说,敏捷的核心在于更快的反馈循环和路线修正。
如果你能定期获得良好的、可操作的工作反馈,并保持一致,我认为你就实现了敏捷的精神。
有很多 “敏捷 ”团队只是走过场、做仪式,但实际上并没有获得真正的好处:频繁获得可操作的反馈,从而帮助指导和调整下一阶段的工作。
我完全同意你的观点,你的话让我想起了几天前我在博客上写的一段话:
> 我假定,如果我把敏捷宣言的要点(不包括标题)拿给一群有着令人讨厌的头衔(如 Scrum Master、敏捷交付经理、敏捷教练或敏捷交付主管)的人看,并问他们:“这是敏捷吗?”几乎所有的人都会说这不是。我只能想象,如果揭示他们的头衔,并解释说,事实上,这真的是敏捷,会对他们那颗被吉拉熏陶的大脑产生怎样的影响。
>如果你尝试过敏捷,但失败了,那就不是真正的敏捷。当你展示它是如何真正敏捷的时候,说明你做得不对。当你证明你做对了–回到论点 1。这真是一种循环论证式的 “无真知者 ”论证。
我很有兴趣看到这种论证方式。像你这样的抱怨,我看到的大多数情况是,有人指出经理用来训斥开发人员的长达一小时的每日例会实际上并不敏捷,而这是完全正确的。或者说,复古的责任分配或使用故事点来衡量开发人员的工作效率实际上并不是敏捷,这至少是对的,因为这显然是 Scrum 所禁止的,而且无论如何都是愚蠢的。
不过我觉得有趣的是,你最后提到了看板–一种敏捷方法。看来你还是喜欢使用敏捷,只是不喜欢 Scrum。
我同意,而且我想应该澄清一下,我主要批评的是我所见过的 “传统 ”敏捷实施方式,即带有冲刺、回顾等功能的 scrum。我觉得这种做法适得其反,但显然有些人在这方面取得了成功,否则这种做法不会如此普遍。
> 我现在管理项目的方式是一种带有任务队列的看板系统,以及每周 1-2 次的简短例会,讨论优先级/调整和任何阻碍因素。
在我看来,这听起来相当敏捷。
敏捷 “的 ”捍卫者 “可能会使用 ”无真苏格曼“(No True Scotsman)的谬论,而敏捷的 ”诋毁者“(我个人认为在 HN 上 ”诋毁者 “更多一些)则经常反其道而行之:拒绝定义 ”敏捷 “的实际含义,而只是就过多的会议和误用估算来衡量生产率的问题,抛出一堆轶事和感受。
> 拒绝定义 “敏捷 ”的实际含义,而只是就滥用过多的会议和估算来衡量生产率的问题,抛出一堆奇闻轶事和感受。
我的意思是–当敏捷宣言极其含糊不清,从业人员似乎无法就敏捷的唯一真谛达成一致时,这样做似乎很有必要–在缺乏正式研究和分析的情况下,除了轶事,还有什么呢?
这很像选择偏差,因为以下说法似乎很有道理
* 如果你有一个对成功非常重要的项目,团队可能更倾向于采用瀑布式方法
* 如果你有一个项目只想试一试,而不在乎失败与否,那么采用敏捷实践的可能性更大。
我喜欢这样想。如果你要在曼哈顿建造一座摩天大楼,你需要一个计划。它必须经过工程设计。材料必须在开工前很久就指定和订购。有工程实践和建筑规范来保证安全。施工过程是有序的。项目计划很可能被称为 “瀑布式”。如果你试图采用敏捷方法,把一个团队扔下,说我们的第一个冲刺阶段先挖两个星期,然后再计划下一步,那是行不通的。另一方面,敏捷方法非常适合规模较小、复杂程度较低的工作,因为这些工作所需的结果是 “流动 ”的。不同的方法对不同的事情最有效。
我只能说,我在敏捷前参与的大型瀑布式项目对错误的事情做了很好的规划,并占用了分配给项目的大部分时间。因此,我们的时间不够,质量和人员都受到了影响。另一个项目被取消,就是因为我们花了太长时间进行规划,导致公司失去了兴趣。
> 如果你有一个对成功非常重要的项目,团队可能更倾向于采用瀑布式方法。
是的,但这与敏捷的承诺–帮助团队取得成功–直接背道而驰。
如果项目成功是因为它足够重要,需要分配更多的资源和时间,那就不会成功。
我不认为这就是选择偏差。如果我有两辆车,一辆电动车用于本地交通,一辆油耗车用于公路旅行,如果我总是选择油耗车进行公路旅行,你不会说这是选择偏差。
你只会承认它们更适合这项任务。
首先要为工作选择合适的工具,然后再根据工作的具体特性对工具进行评估。
如果你在选择了工具之后,又去撰写一篇关于汽油车如何导致驾驶员在驾驶过程中更频繁地上厕所的研究报告,而不考虑行程的长短,你就会像这些人一样,产生选择偏差。
另外,如何定义成功与失败?你是否按时按预算完成了你的计划?
这是一个合理的定义,但它并没有反映出项目是否真正实现了其设定的业务目标。对于许多项目来说,快速失败总比成功后发现不值得做这个项目要好。
研究中还有更直接的选择偏差: “在开始开发之前就有明确要求的项目,成功的可能性要高出 97%”,因为在所有方法中,要达到一个不断变化的目标是比较困难的。
我不同意 “按时 ”和 “按预算 ”是判断项目整体成败的正确标准。按照这些标准,一个多年期项目在最初估计的一天后交付,或者一个盈利丰厚的项目在最初预算的基础上超出了一美元,都会被算作失败的项目。理想情况下,在确定一个项目成功或失败之前,需要包括一些实际的业务成果。
我认为这个问题一直存在于很多关于软件项目成败的研究和讨论中,我们将估算是否准确与项目是否成功或是否满足业务需求混为一谈。
另外,一个项目在两周后就被取消了,因为它被认为没有足够的价值,这就是失败,而一个项目花了两年时间来建设,却没有赚到一分钱,这就是成功,只要它的预算是两年。
有时候,快速失败是最好的结果。
无论采用哪种方法,都需要明确的要求。需求越简单(越简短),就越容易被理解和遵循。迭代开发流程可以使需求更简洁(从而更清晰)。
> 一个突出的统计数据是,在开发开始前就有明确需求记录的项目,成功的可能性要高出 97%。
另外,如果一个项目没有需求,它怎么会失败或成功呢?
编辑:敏捷是迭代的一种,而迭代是相对于瀑布式而言的。)
我见过的 “敏捷 ”项目中,有多少是真正意义上的迭代项目,一只手就能数过来,不管宣言上是怎么说的。如果把这篇文章所说的(自称敏捷的项目)与任何基于小型自组织团队的项目混为一谈,那就大错特错了。
没有测试工具的明确需求是不可能实现的。这是我在考虑敏捷时关注的重点。
我认为 Shape Up 是对敏捷宣言最合理的现代诠释之一。
“一个突出的统计数据是,在开发开始之前就记录了明确需求的项目,成功的可能性要高出 97%。
大多数项目的问题在于,需求并不总是从一开始就很明确,即使很明确,在项目进行过程中也往往会出现偏差。敏捷可以让团队更轻松地应对不断变化的需求,从而缓解这一问题。
尽管如此,遗憾的是,并没有多少公司能够正确理解或实施敏捷。
> 敏捷试图通过让团队能够更轻松地应对不断变化的需求来缓解这一问题。
这往往会导致在实践中对需求的维护不够重视,在很短的时间内,实际产品就会偏离所记录的需求,以至于这些需求基本上毫无用处,而且任何功能都没有明确的目标。
在我参与的大多数注定要失败的敏捷项目中,几乎都是某个经理或更高职位的人过度承诺了最后期限,而没有考虑到现实世界中的阻碍因素。其中一个项目的移动应用在应用商店的评分非常糟糕。
文章来源似乎主要是某个敏捷替代方案的广告,这让人对整篇文章产生怀疑。
大部分 “结果 ”可以归结为:范围蠕变会扼杀项目。这完全与你的团队所遵循的方法无关,而且他们也没有明确说明他们的 “影响工程 ”概念将如何解决这个问题。
我相信敏捷方法做对了会很棒。
我还相当肯定大多数组织都没有做好敏捷工作。
至少在我所在的组织中,我们不预先设计任何东西。我们很敏捷。
我们不考虑适当的 api 建模。我们很敏捷。
我们几乎不做任何测试。我们很敏捷。
我们会根据用户反馈重写用户界面十几次。毕竟,我们是敏捷的。
> 至少在我的组织里,我们不预先设计任何东西。我们是敏捷的
敏捷并不意味着完全放弃设计。
> 我们不考虑适当的 api 建模。我们很敏捷。
见上一点。
> 我们几乎不做任何测试。我们很敏捷。
如果没有测试,要做到敏捷是很难的,甚至是不可能的。如果你想快速发展,你就必须确信你最近的改动没有破坏任何东西。
> 我们会根据用户反馈重写用户界面十几次。毕竟,我们是敏捷型公司。
听起来你是在任何用户给你反馈之前就构建了一个完整的用户界面。这与敏捷恰恰相反。
我喜欢你引用了所有的文字,除了我说 “我相信敏捷做对了是很棒的 ”那部分。(而且大多数组织都没有做好敏捷)。
但在敏捷的名义下,企业往往会做出很多错误的决定,至少在我工作过的地方是这样。
是不是都像听起来那么糟糕?不是,但我听说过很多以敏捷为名而不考虑前期设计的情况。
另外,我不喜欢敏捷工作方式的一点是,每当有人提出反对意见时,人们总是说 “那不是敏捷”。好极了。但如果人们就是这样做敏捷的,那么这种说法就没有意义了。
这就像 REST。休息很好。但实际上,没有人(几乎没有人)会像原始白皮书中描述的那样使用 Rest。我们不能忽视这种差异带来的问题。
这很有趣,因为敏捷几乎允许任何事情。甚至《Scrum 指南》也说,必须根据项目的需要调整流程。这甚至不是一个选项。然而,Scrum会议却被当成了宗教集会。
你能指出 12 项原则中有哪一项说我们应该 “几乎不做任何测试 ”吗?我可以指出一些说 “交付可运行的软件 ”和 “这是衡量进展的唯一有效标准 ”的原则。如果测试有助于交付可运行的软件,那就进行测试,这就是敏捷。
我觉得你漏掉了这些句子的隐形 /s 标记。
讽刺总是无一例外地破坏实事求是的讨论,让人搞不清楚别人到底在说什么(因为即使你完全意识到了讽刺,也仍然搞不清楚)。
没错。不幸的是,我以前也看到过类似的论点被非讽刺性地讨论过,所以我只是在这里没有注意到而已。
有谁真正在做 “敏捷 ”或 “瀑布 ”之类的工作?我从事这份工作已经 30 年了。这就像我们需要的东西或客户需要的东西,收集一些模糊的需求,写一些原型,做内部演示,现在有了更多的需求,更清晰了,对原型进行迭代,等等,重复。使用问题跟踪器,使用 “故事”,使用看板,当然,但我们是否坚持某种僵化的 “敏捷 ”概念?我也无法想象 “瀑布式 ”方法能真正奏效。
据我所知,V 模型是瀑布法的一种变体,目前仍用于规范行业(汽车、医疗、航空航天等)。
敏捷本身并不是一种开发方法,而是一种沟通方法。如果一个小团队正在进行一个隐秘的研发项目,每个人都是同级别的,在同一条船上,那么使用敏捷方法就是自杀。这就是看板的作用。
敏捷是一种开销。它不会让事情变得更快或更有效率,恰恰相反。它的存在是为了避免来自管理层和开发人员的武断的最后期限,而不是在孤岛上工作,没有可视性。这样就会出现一些令人讨厌的意外。“但我们以为你正在做那个,现在就能做好!”
这似乎是为了推广某种新的竞争方法。我也找不到关于研究方法的任何细节,但它似乎依赖于软件工程师对他们参与的项目成败的判断,这……我认为是非常值得怀疑的。现实情况是,有很多软件工程师可能会把一个利润丰厚的项目说成是失败的,因为它有一个糟糕的数据库模式,而且因为最后一分钟的改动而导致大量代码死亡。
看起来,在四天的时间里,他们让 600 名工程师(主要偏向于英国工程师)回答了调查问题。绝大多数失败率较高的问题都是关于 “是否在明确需求之前就开始开发、没有完整的规范、开发后期有重大变更”……这被归入 “敏捷需求”。当然,这些都是敏捷认为会产生风险的因素,而敏捷方法就是要尽可能地降低风险。所以,这不是方法论的指标,而是背景的指标。是的,如果这种风险从未出现过,那么无论采用哪种方法,失败的可能性都会大大降低。
https://www.engprax.com/post/268-higher-failure-rates-for-ag…
我一直很喜欢《敏捷宣言》,但它相当含糊,很多细节需要在实施时才能提供。
我怀疑很多敏捷实际上是 “敏捷™”。一个品牌门面,覆盖在一个非结构化、临时性的开发系统之上。甚至连瀑布式开发也不是,瀑布式开发实际上是一个非常稳健的系统(只是不够稳健和灵活,结果往往不好)。
我喜欢进化设计和适应变化的理念,但我发现必须谨慎从事,而且必须有经验丰富的开发人员;必须专注于结果。
一如既往,我认为正确的答案是 “视情况而定”。对 “唯一真正的方法论 ”的追求永远不会满足。即使是同一组织下的不同项目,也可能需要采取不同的方法。
我只是认为,我们始终需要关注最终结果,所有的开发工作都需要以此为出发点。我认为(对我来说),敏捷就是接受这样的事实,即我们在开始时并不知道 “完成 ”是什么样子,但我们必须有一个启发式的方法来帮助我们了解什么时候完成。
这篇文章确实指出,在没有对问题进行明确分析的情况下,参考研究可能会被视为对这种新的闪亮方法的认可。根据我的经验,事实是敏捷的实施效果很差。冲刺只是两周一次的大规模状态更新,没有开发人员与客户/利益相关者直接对话。因此,文章不应轻视对实施的批评。
尽管如此,在参考研究中,他们还是把一些没有需求的临时开发实践称为 “敏捷”,因为他们喜欢这么叫,然后指责《敏捷宣言》的作者没有兑现他们的承诺。显然,如今很多软件管理弊端都被称为 “敏捷”,然后把失败的过错归咎于组织之外。这是管理层的错,而不是敏捷方法的错。
> 一个突出的统计数据是,在开发开始之前就记录了明确需求的项目,成功的可能性要高出 97%。相比之下,敏捷宣言的四大支柱之一就是 “工作软件高于全面文档”。
有人不理解(或故意误读)“全面文档 ”的含义。
敏捷宣言》并不反对在开始实施前提出需求。它反对的是,在开始实施之前,要有一个长达数月的计划阶段,产生数百页的详细规格说明。
敏捷开发是对现状的一种反动,因为现状是这样做的–而且项目失败的比例大得惊人。
这就是所谓的 “软件危机”: https://en.wikipedia.org/wiki/Software_crisis
宣言描述的是一种效果或理想的最终状态。而不是一种方法。
你所做的任何事情,如果不能带来这种效果,都是你的责任。教练只有在提供帮助时才是敏捷的。
但这也意味着,你可以自由地从所有可能的来源学习,而不必拘泥于任何特定的方法或仪式。
> 一个突出的统计数据是,在开发开始之前就记录了明确需求的项目,成功的可能性要高出 97%。
我既使用过这种方法,也使用过敏捷方法,因此对这些结果并不感到惊讶。不过,我也要说,编写明确的需求说起来容易做起来难–如果这些需求含糊不清,甚至质量平平,就很容易让项目立即偏离正轨。
在我看来,部分原因是瀑布式方法缺乏责任感。如果负责起草需求的 BA 们耗费了大量时间和预算,开发团队最终也会感受到这一点。这就需要工程经理仔细审核这些需求,以确保它们适合开始工作,这就导致了大量的来回奔波。
没错。我最喜欢的情况是,开发人员花太多时间讨论故事点估算,长时间讨论为什么某个点更高或更低……然后除了 “3 ”或 “5 ”之外,什么都不写。
因为敏捷本身已经变得如此沉重,以至于不再敏捷。你有产品经理,然后你有Scrum Master,然后就会开会讨论我们对敏捷实践是否有多么纯粹和虔诚,我们是否有多么纯粹,敏捷之神是否会对我们过去几周的每一分每一秒都感到满意,还是我们的内心深处有一些杂质?别开玩笑了,接下来还有关于这些会议及其成果、行动项目和评估的会议。
对过程本身的痴迷令人目不暇接。现在,这已经成为了一个完整的家庭手工业,主要的技术杂志和网站都有专门针对敏捷的版块。咨询师、教练、大师等等,不一而足。
我永远无法理解这个网站上对敏捷的憎恨。
这个过程的核心是,列举实现目标的各项任务,排定优先级,然后让那些完成任务的人按照自己的节奏和顺序在更大的团队中完成任务。
几十年来,我都是这样管理团队的,从来没有人抱怨过。
我认为这种憎恨源于很多人的工作环境,要么是公司将名义上的敏捷流程官僚化到了荒谬的地步,要么就是上司太过自以为是,这使得任何一种方法论都成了一场闹剧;糟糕的领导力只能通过流程来缓解,尤其是必须有人对上述流程负责,而这往往被默认为是被提及的太过自以为是的上司。
混杂变量。风险较高的项目之所以使用敏捷,可能是因为这些项目一开始就没有那么明确的定义。
我最想看到的统计数字是多少人、多少个月、多少钱。假设一个成功的瀑布式项目可以资助 3 个失败的敏捷项目,而一个成功的敏捷项目可以资助 3 个失败的敏捷项目。
这篇文章给我的启示(有一种 “先人后事 ”的感觉):
> 工程师们认为他们可以自由讨论和解决问题的项目,成功的可能性要高出 87%。
还要小心大写的 “敏捷”,它定义了一个没有项目特征的流程,使其成为一个不敏捷的流程。
也许这样做是最好的,快速失败,然后吸取教训继续前进。
与瀑布式相比,失败率高出 268%,这是它的特点而非缺陷。
是啊,快速、低成本地失败是非常有价值的。事实上,在那些 “没有失败 ”的项目中,有多少仍在死亡线上挣扎呢?
“在开发开始之前就有明确需求记录的项目,成功的可能性要高出 97%”。
我相信巴里-波姆(Barry boehm)曾公开表示,他在设计软件开发流程时犯的最大错误就是相信了那些告诉他可以在前期获得明确需求的人。
所以是的,如果你能在一开始就提出明确而不矛盾的需求,那么你所做的任何事情都可能比不这样做的时候更容易成功。
Demarco 和 Lister 合著的《与熊共舞》(Waltzing With Bears)是一本关于风险管理的好书,书中对此有更多的论述。
敏捷性是提高生产力的一种方法。它对员工的工作进行更细致的检查。
管理层非常清楚,这是泰勒主义在我们行业的应用。泰勒主义的出发点是衡量工人的一举一动,并将他们的专业知识从自己身上剥离。即使没有神奇的 4 倍生产率的提高,每天的站立和点数也能做到这一点,这与制造业的胜利不同(参见 Braverman)。这是一场针对工人的游戏,如果他们自我组织起来,就不会有敏捷。
当你把这些东西变成固定的食谱时,你就会遇到问题。审慎的判断力是你一生都必须学会并不断学习的东西,而审慎的核心是谦逊,也就是说,是一种对真理的顺从态度,而不是一意孤行(这是很容易做到的,也是我们道德沦丧的文化所推崇的)。一般原则是有的,但在具体的、特殊的情况下如何应用这些原则,则需要审慎的判断。
即使是敏捷,业务建模和需求文档化仍然很重要。
不同的是,30 年前,我们会花 6 个月的时间来定义功能需求和详细需求,问题越大,这些文档就越脆弱。
适当的故事开发也很难。大多数 “敏捷 ”实施都不会费心去 “完成 ”故事。这只是事后的想法。
如果你能真正做好敏捷,那么它就会非常有效。
我是不是误读了 “没有真正的苏格兰人”(No true Scotsman)?
十五年来,我只见过两次敏捷做得好的。
我基本同意它已经失败了。
我认为,随着项目规模和复杂程度的增加,衡量成功的标准就变得可疑了。
无论采用哪种方法,成功的更好方法是确保降低任何给定项目的复杂性和范围。
有趣的是,这个想法的根源在于敏捷允许团队在中途改变工作方式,这样我们就能不断改进。但我从未见过一个Scrum Master或PM既有权力又有意愿去倡导改变工作方式。因此,在实践中,它最终只是人们梦游般的一系列仪式。
迪尔伯特》说得最好: “我们的老板无法判断我们工作的质量,但他知道我们什么时候迟到。每个做编程工作的人,都有十个人负责确保在 “到期日 ”前完成工作,无论这个到期日是否有价值。
如果你没有黑客化流程,你就不是敏捷。“根据这个严格定义的流程,我们是敏捷的 “是一个矛盾的说法。
当你想看看自己是否能让某件事情成功时,敏捷是很好的选择。
在我看来,当你想确保事情永远不会失败时,敏捷就很糟糕了。
“确保事情永不失败 “是一个需要大量测试的问题,这可以作为敏捷方法论的一部分来实践。事实上,在开发功能的同时(或之前)编写测试听起来更敏捷。
当然,如果产品负责人明白这一点的话。
“让我们放慢开发速度,确保我们已经写了足够多的测试 “这句话我在敏捷中还没怎么听过。
这是非常正确的。重构也是一样,代码编写完成后,我们从来没有留出时间来清理和重组代码。
不要混淆 “敏捷宣言 ”和 “敏捷”。
我这么说既不是攻击,也不是为两者辩护。请自行决定。但这两件事现在是截然相反的,所以这种用词上的粗心大意会毁掉所有交流或思考两者特点的能力。
在软件工程领域,我只见过三条行之有效的原则:紧密迭代、分而治之和固定最大值。所有这些原则都能奏效,因为开发是一个 NP 问题,我们所能期望的最好结果就是局部最优。一般情况下,你会发现最佳实践的反模式会打破这些原则中的一条或多条,从而被数学所取代。以产品积压为例。一般来说,这些积压工作会成为所有工作的集中地,但这样就会打破 “分而治之 ”和 “固定最大值 ”的原则。由于调度是一个 NP 问题,如果我有一个无边界的积压,我就创造了一个要解决的 NP 问题。正确的做法是承认你找不到最优解,所以你能做的最好的事情就是把问题分成几个部分,分配团队,尽量减少团队之间的沟通,这样这些部分就不会再合二为一了。如果单个问题仍然太大,团队也需要这样做。大规模的单体团队打破了所有原则,基本上注定会失败。或者说,在有人证明 P = NP 之前,它们都会失败。
这个非常明显的公关噱头似乎完全是基于将 “工作软件重于全面文档 ”重新定义为 “不收集需求,不编写规范”。
以下是报告本身,其中非常清楚地表明,委托进行调查的目的是为了帮助宣传一本关于另一种开发流程的书:https://www.engprax.com/post/268-higher-failure-rates-for-ag…
许多非敏捷项目的结果都是 “以失败告终”,那么 “以失败告终 ”又是怎么回事呢?
我不是 Scrum 仪式的忠实粉丝(除了每日站立),但只要人们在看到自己想要的东西之前不知道它是什么,敏捷就是最好的方法。
我们已经尝试过瀑布式的工作方式,但效果并不理想。
没有科学证据支持敏捷。它的支持者,通常是 Scrum Masters 之类的人,会不惜一切代价来保住他们毫无意义的工作。
叹气。如今,几乎不可能就任何与 “敏捷 ”有关的事情进行有意义的对话。这是因为人们对 “敏捷 ”的定义几乎没有一致的看法,所有的术语都有100多种不同的含义,而且每个 “敏捷 ”的实现方式都与其他所有 “敏捷 ”不同。
我只想说,根据我的经验,有几件事是正确的:
1. 敏捷宣言》本身是伟大的。
2. 2. “敏捷开发 ”本身并不是一种方法论。
3. 有许多 “敏捷 ”方法,包括 Scrum、SAFe、Disciplined Agile Delivery、Agile Unified Process、Crystal、XP 等。除此之外,世界上的每家公司都在实施自己的 “敏捷 ”方法,但这些方法都是不完善的、半吊子的、漏洞百出的,几乎无法理解。
4. 大约每个人都误解/误解(有时可能是故意的)了《敏捷宣言》,并根据自己的偏见对其进行曲解。本文就是一个典型的例子:
一个突出的统计数据是,在开发开始之前就记录了明确需求的项目,成功的可能性要高出 97%。相比之下,《敏捷宣言》的四大支柱之一就是 “工作软件重于全面文档”。
在《敏捷宣言》的任何地方,你都找不到 “不要做需求工程 ”或 “不要预先确定需求 ”的说明。我保证。如果你不相信我,现在就去读一读,看看能不能找到这些说明。
相反,你会发现引用的告诫是不要把文档(可能包括需求)放在实际交付软件之上。但《宣言》本身明确指出 “右边的项目是有价值的”。右边的项目 “包括
– 流程和工具
– 全面的文档
– 合同谈判
– 遵循计划
不幸的是,作为一个行业,我们都把注意力集中在左边的项目和 “我们更看重左边的项目 ”的说法上,把孩子和洗澡水一起倒掉了。“我们在做敏捷 “成了放弃需求工程、架构/设计工作、文档等必要性的借口。
基本上,我们在一个方向上摇摆得太远了,需要向中间靠拢。不,我不是在呼吁回归瀑布式或其他什么。我想说的是,我们可以接受敏捷宣言的原则,并且仍然可以完成需求工程、架构和所有其他工作。
一个好的起点是,不要再把 “敏捷 ”当作一种独立的方法论(而不是一系列松散相关的方法论)来谈论,作为组织,选择一种实际的方法论来实施,然后真正接受 Scrum 所强调的 “经验主义 ”属性(无论你是否在使用 Scrum 本身)……以经验来衡量事物,并真正根据现实世界而不是某个人的古怪理论来做出调整。现实高于一切,我迫切希望我们能让每个人都承认这一点。
我对 Scrum 和其他方法论的欣赏之处在于,它可以作为一个起点,在此基础上进行定制和调整,而不是在几乎没有文档或流程的情况下开始构建一个怪物系统,最终大部分都是为了适应现有的破损系统。
是的,没错。这就是为什么我主张从一些已知的流程开始,即使你修改了它。在我看来,从零开始往往会导致制造出一个不连贯的烂摊子。
这不是一项研究,而是一则广告。你只需要知道这些就够了。
这措辞太奇怪了。敏捷 “的问题在于它变得经理至上、会议至上。
我所在的上一家公司就很荒唐。一个项目每周要开 30 个小时的会议。根本没有时间完成任何工作。这只是经理们一边倒的废话。
这才是真正的批评,而不是什么奇怪的二分法:只要开会就能成功,只要有管理者就能成功,只要某些被授权的舆论制造者按照他们两年前写下的圣母思想制定的规范行事就能成功。
我找不到实际研究的任何链接,甚至连研究方法的说明都没有。这项研究似乎是为了介绍新方法论的《影响工程学》一书而做的,但该研究也声称对采用该方法论的项目进行了测量。从这里的营销摘要[1]来看,他们实际所做的似乎是分离出各种方法中对项目成功有影响的个别优点(当然这也没有定义)。然后,他们从这些优点中选择出他们的新方法论所能促进的优点,并用遵守这些优点的项目来代表他们的新方法论的得分。然后宣称结果具有统计学意义。如果这就是实际的方法论,那就很有意思了,因为如果是这样的话,这显然是无稽之谈。
此外,了解成功的定义也是非常重要的。用 “按时完成项目的初始需求 ”来评价一个敏捷项目的成功与否是完全荒谬的,因为敏捷的全部意义就在于适应不断变化的需求。
[1]: https://www.engprax.com/post/268-higher-failure-rates-for-ag…
敏捷与什么?现在有谁不声称自己在做敏捷?
几乎所有的大型科技公司。自从我跳槽到顶级公司后,我想我甚至都没听说过敏捷这个词。
这看起来更像是一则 “广告”(或者是竞争方法论的一项非常有针对性的研究),但过度的实用主义甚至会毁掉最明智的想法。
如果过分 “照本宣科 ”地应用敏捷、测试、设计模式和最佳实践,而不考虑要解决的实际问题,那么所有这些都会导致项目失败。
我曾在一个团队中工作过,团队中大约有 10 个人实际从事开发工作,他们把一整套敏捷 “原则 ”作为规则来执行。每天的站立、梳理、回顾、作为 “扑克牌 ”的指点、每周的 1:1 会议。结果是,我们几乎没有时间实际工作,因为每周都有 10-20 个小时的会议。大多数回顾和例会上,我们整周都在说 “和昨天一样,只有几分钟时间处理这个问题”。
测试也是一样。如果测试时不考虑实际问题,那么达到 90% 以上的代码覆盖率是很容易的,如果没有人关心以后修改代码会有多难、多耗时的话。特别是当一项功能处于开发初期时。
我认为所有这些都是好的,但我有时看到的是,它们被当作绝对规则来应用,不能偏离,这不可避免地会导致糟糕的结果。
我现在的工作环境是 “轻敏捷”,每周只开 2-3 次会议,每次会议时间不超过 1 小时,对公关/测试的要求也不那么严格(我们专注于测试重要的功能,而不是行覆盖率),这样的环境比以前好多了。一些在更严格规定下工作的同事,现在的工作效率是以前的两倍甚至更高。
>尽管这项由 Engprax 咨询公司委托进行的研究可以被看作是对 “影响工程学 ”方法的一种含蓄的宣传、
关闭标签
复杂的事物(生活/政治系统/软件)不能根据宣言或戒律来构建。看看基督教和共产主义给我们带来了什么。
当你把复杂事物简化为简单但可解释的短语时,我们总会为那些自称知道正确方法并试图在各自社区中将僵化的结构强加给其他人的神职人员(敏捷教练、教会、共产党)敞开大门。
我希望能有一种更科学的软件开发方法。而敏捷不是。
嗯,是的。要做好敏捷是不可能的。为什么一个不可能正确执行的实践,除了失败率较高之外,还会有其他结果呢?这都是敏捷的错,而且很明显。
什么要求?敏捷是管理者每天公开鞭打落后于冲刺计划的开发人员的一种方式。
我只知道敏捷意味着更多的会议,而更多的会议意味着我的工作效率会大大降低。
而它的本意恰恰相反。
这不正是快速失败的意义所在吗?似乎整个行业又重新回到了 “任何项目都必须成功 ”的思维模式,而在过去的几十年里,我们都在远离这种思维模式。
事实是,有一些低劣的目标、糟糕的范围界定、高风险的商业假设、管理者在资源和人才方面的低级吝啬,以及许多其他值得提前失败的事情。如今,所有这些都能更快地失败,提供有价值的早期反馈,并促成变革。
很抱歉我没有即时回复,但我想知道这里是否存在相关性/因果关系问题。这些 “敏捷 ”项目之所以失败,是因为它们是敏捷项目,还是因为它们的项目管理方法是由上级管理部门规定的,而不是由适当的上级管理部门规定的。也许他们碰巧选择了敏捷,因为这是当下的流行趋势,但问题恰恰不在于 “敏捷”,而在于错误领导层的不当影响。
“敏捷 “和 ”失败率 “并没有严格的、普遍接受的定义,因此任何研究(即使描述了定义)本质上都是没有意义的。