本文是 Quora 上的一篇回答,作者是一名前谷歌工程总监,他认为敏捷宣言从较高层次而言,与谷歌工程师对软件开发的看法是很接近的。但如果落实到细节,比如敏捷宣言背后的某些原则,其所代表的主张短迭代和低文档的 Scrum 流程,过于集中于短期思维,不适用于谷歌这样革命性的工程项目。

在 Quora 上有人提出了 " 为什么像谷歌这种公司的开发人员认为敏捷开发是无稽之谈?" 的问题,关于此,作为一名前谷歌工程总监,David Jeske 提供了一些个人见解,以下是 David Jeske 的回答。

对很多人来说,敏捷意味着很多事情。我认为敏捷宣言从较高层次而言,与谷歌工程师对软件开发的看法是很接近的。

  • 个体和互动高于流程和工具
  • 工作的软件高于详尽的文档
  • 客户合作高于合同谈判
  • 响应变化高于遵循计划

然而,一旦把这些高层次的观点落实到细节,这些协定就开始褪色。敏捷有一些很好的想法,但它也存在一些问题元素,即过于集中在短期思维,对于像谷歌这样的公司进行革命性工程项目并不太适用。在不深入细节的情况下,让我们来看看敏捷宣言背后的原则。

让我们从共通点谈起。谷歌的发展风格是敏捷宣言背后的原则中所提到的激励赋能个体的例证。在这些原则中,最符合硅谷风格,可能本身就是受到硅谷启发的几条原则包括:

  • 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
  • 最好的架构、需求和设计出于自组织的团队。
  • 团队定期反思如何能提高成效,并依此调整自身的行为。
  • 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
  • 以简洁为本,它是极力减少不必要工作量的艺术。

这些原则对于聪明的工程师来说几乎是常识。我认为,硅谷打造了一种以赋能和信任个人为中心的文化。

然而,这些原则的其他部分却并不符合谷歌的开发文化。而这些部分实质上造就了短期迭代的 Scrum 流程。它们似乎更适用于特定类型的开发,最显著的是面向咨询或合同的软件编程,在这种情况下,客户是组织的外部人员,因为他们为开发付费,所以客户占主导地位操纵局势,可以在任何时候改变主意:

  • 我们的首要任务是通过持续不断地及早交付有价值的软件来满足客户。
  • 在整个项目中,业务人员和开发人员必须每天一起工作。
  • 不论团队内外,传递信息效果最好效率也最高的方式是面对面交谈。
  • 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程对变化进行掌控。
  • 频繁地交付可工作的软件,从几周到几个月不等,倾向于采取较短的周期。

这种短期规划、直接与客户接触和持续迭代的风格,非常适合具有简单核心和大量客户可见特性的软件,这些特性的可用性可以增量方式上升,不太适用于那些只有非常简单的用户接口和大量隐藏的内部复杂性软件,这些软件可能直到相当完整时才具有可用性,或实现客户无法想象的飞跃式解决方案。

像谷歌这样的公司一直在编写革命性软件,这些产品以前从未有人编写,在复杂的子组件编写完成之前,软件是无法工作的。这让我立刻想到了 Bigtable 和 Borg 项目。Bigtable 是一种广泛复制的分布式数据库设计,而 Borg 是最早出现的超大规模集群 / 云管理器之一。这种类型的颠覆性创新需要大量的预先设计时间,并且需要在超过一周的迭代中为编写组件而工作。由于项目的外部接口如此简单,以及内部复杂性如此之高,以至于许多工作对“客户”甚至无法可见的,因此没有办法编撰客户可见的相关用户故事。这种类型的软件需要 8-20 个月的时间向客户交付第一个工作版本。

像 Bigtable 和 Borg 这样的项目是反 scrum 的。它们代表了技术领导者非常长远的考虑。在单独一周的时间里,他们并没有做一些可以满足少量需求的事情,而是为集群软件开发方式的根本性转变打下了基础。这项投资不仅在谷歌获得了令人难以置信的回报,而且影响了整个行业。

其他行业也有类似的情况。从税务会计软件到电脑游戏,有些软件在部分完成后并不适宜交付给终端客户。

如果我被要求重写上面的敏捷原则,使之更符合谷歌风格的开发,它们可能会是下面这个样子:

  • 我们的首要任务是提高客户(和程序员)的生产力和对信息的访问。处理你能找到的最迫切、最常见的问题,并产生最大的网络影响。不要仅仅满足客户的要求,要去深入了解客户,并彻底改变他们的世界。
  • 开发人员应该创建一个谷歌设计文档(一个相当小型的,但是结构化的设计文档),对项目做出解释,这个项目希望实现什么目标,以及为什么不能用其他方法来完成目标。此文档应该分发给所有项目干系人,以便在项目开始之前获得早期反馈。书面记录是必不可少的,因为它确保对项目何时抵达成功以及如何达到目标有一个清晰和一致的理解。
  • 在项目的所有阶段,大型组件的关键设计元素应该在设计文档中得到简明的解释和记录。
  • 飞跃式创新。完成并部署一个飞跃式创新比追求完美更重要。不可能做到完美无暇。相反,要灵活,并计划在技术栈的每一层不断地重新创造和改造。
  • 在合理的情况下,尽可能快地交付工作软件,并非一味地追求尽快交付。在对外交付之前先在内部使用自己的产品。确保产品在交付前达到高质量标准。产品的质量比交付产品所花费的时间更重要。

虽然敏捷宣言从高层次而言有足够的灵活性,可以和以上这些原则配合应用,但是我认为这些重写的原则与主张短迭代和低文档的敏捷 /Scrum 流程还是有很大区别的,而这些主张短迭代的低文档敏捷 /Scrum 流程如今几乎已经成为敏捷开发的同义词。

文章来源:https://www.infoq.cn/article/6A-uiolKDFyNNQzze4gl

为什么谷歌的开发人员认为敏捷开发是无稽之谈?相关推荐

  1. 敏捷开发人员结构_开发人员可以在敏捷外观方面发表意见的4种方法

    敏捷开发人员结构 敏捷已成为开发软件的默认方法. 有时,似乎每个组织都在做(或想做)敏捷. 但是,许多公司没有尝试改变其文化以使其变得敏捷,而是试图将诸如scrum的框架强加给开发人员,寻找提高生产率 ...

  2. 前端和后端开发人员比例_前端开发人员vs后端开发人员–实践中的定义和含义

    前端和后端开发人员比例 Websites and applications are complex! Buttons and images are just the tip of the iceber ...

  3. 分享15款为开发人员准备的开发移动应用程序必备的新资源和工具

    身为一名开发者,光有技术是不够的,必备的应用可以为您的开发工作如虎添翼.随着Android与iOS系统的不断更新换代,相关的的应用也层出不穷,随着移动应用程序的普及推动,很多新的方面被迅速发展, 下面 ...

  4. JAVA伴我行——项目篇(一):开发模型,敏捷开发和瀑布模型的结合

    在项目的开发过程中,我们或多或少都会遵循一定的模式.最常见的就是瀑布模型了(也许平时没有注意,但你确实在遵循这个模型). 瀑布模型的典型表现就是遵循以下顺序:需求调研/分析,详细设计/概要设计,编码阶 ...

  5. 开发模式(敏捷开发,瀑布式开发,螺旋型开发,迭代开发,devOps开发

    开发模式(敏捷开发,瀑布式开发,螺旋型开发,迭代开发,devOps开发 https://blog.csdn.net/sinat_35566306/article/details/90404606

  6. Soft:软件开发的简介(敏捷开发等6大软件开发模式)、软件测试的简介(单元测试/集成测试/系统测试/验收测试/回归测试、黑白灰功能测试、DEV等四套环境)、运维的简介之详细攻略

    Soft:软件开发的简介(敏捷开发等6大软件开发模式).软件测试的简介(单元测试/集成测试/系统测试/验收测试/回归测试.黑白灰功能测试.DEV等四套环境).运维的简介之详细攻略 目录 1.软件开发( ...

  7. 敏捷软件开发之何为敏捷开发

    敏捷开发,Agile Development,就是指能够在需求迅速变化的情况下快速开发软件.我们接触最多敏捷实践方式有:极限编程(XP).结对编程.测试驱动开发(TDD)等. 追究敏捷的历史,就必须要 ...

  8. 《火星人开发纪实:敏捷开发一千零一夜》序言

    本文是<火星人>系列的子系列,将分期向大家分享火星人敏捷开发管理工具的开发和管理实践. 一直以来,敏捷开发长期受困于各种名词.术语的堆叠.罗列.解释,而较少出现原创和实践分享过程.而敏捷实 ...

  9. 质量管理14条原则、敏捷开发宣言、敏捷开发十二原则

    一.质量管理大师爱德华·戴明博士经典的质量管理14条原则 1. Create constancy of purpose toward improvement of product and servic ...

最新文章

  1. 【Qt】Qt样式表(Style Sheet):官网说明及例子
  2. linux/centos 解决Tomcat内存溢出,centostomcat
  3. ai包装插件_关于DIP异型插件机导入与相关来料标准研究
  4. Ubuntu apt upgrade后黑屏问题
  5. java ftp详解_Java实现FTP文件上传详解
  6. 如何停止CSS3的动画?
  7. 解析带有命名空间问题web.xml
  8. 页面字符编码不一致的处理
  9. 如何在游戏机制中使用AI/剧情脚本----基于LUA
  10. 接口测试工具-Jmeter使用笔记(五:正则表达式提取器)
  11. 日本现代数学发展历程及其启示
  12. 图层重命名快捷键_实际操作,在PS中如何批量给图层重命名并导出
  13. swagger的详细注解
  14. Paypal移动快速支付流程
  15. lzg_ad:打印机需要的组件支持
  16. 连接方法:网线水晶头接法
  17. 干货 | 系统润滑,定时清理内存了解一下
  18. 利用DSRM账号进行权限维持
  19. 以图搜图(基于 Milvus 和 VGG 实现以图搜图)
  20. 关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器

热门文章

  1. 全球知名“骨灰级”浏览器被中国企业收购,会变成流氓软件吗?
  2. android 美图购物车,Android ViewAnimator 实现仿美图的添加购物车的按钮
  3. 六款佩戴牢固的蓝牙耳机、运动型蓝牙耳机推荐
  4. 骨传导耳机能降噪吗?骨传导耳机好不好用?
  5. 3DsMax—纸杯制作
  6. 新玺配资:货币宽松逐步成熟 A股调整低吸良机
  7. Python字符串格式化--format()方法
  8. P1979 [NOIP2013 提高组] 华容道
  9. 漫谈程序员系列 找工作的辟邪剑谱
  10. Unity 常用设计模式