写点什么

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

  • 2019-08-15
  • 本文字数:2248 字

    阅读完需:约 7 分钟

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

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


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


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


  • 个体和互动高于流程和工具

  • 工作的软件高于详尽的文档

  • 客户合作高于合同谈判

  • 响应变化高于遵循计划


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


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


  • 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。

  • 最好的架构、需求和设计出于自组织的团队。

  • 团队定期反思如何能提高成效,并依此调整自身的行为。

  • 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。

  • 以简洁为本,它是极力减少不必要工作量的艺术。


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


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


  • 我们的首要任务是通过持续不断地及早交付有价值的软件来满足客户。

  • 在整个项目中,业务人员和开发人员必须每天一起工作。

  • 不论团队内外,传递信息效果最好效率也最高的方式是面对面交谈。

  • 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程对变化进行掌控。

  • 频繁地交付可工作的软件,从几周到几个月不等,倾向于采取较短的周期。


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


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


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


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


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


  • 我们的首要任务是提高客户(和程序员)的生产力和对信息的访问。处理你能找到的最迫切、最常见的问题,并产生最大的网络影响。不要仅仅满足客户的要求,要去深入了解客户,并彻底改变他们的世界。

  • 开发人员应该创建一个谷歌设计文档(一个相当小型的,但是结构化的设计文档),对项目做出解释,这个项目希望实现什么目标,以及为什么不能用其他方法来完成目标。此文档应该分发给所有项目干系人,以便在项目开始之前获得早期反馈。书面记录是必不可少的,因为它确保对项目何时抵达成功以及如何达到目标有一个清晰和一致的理解。

  • 在项目的所有阶段,大型组件的关键设计元素应该在设计文档中得到简明的解释和记录。

  • 飞跃式创新。完成并部署一个飞跃式创新比追求完美更重要。不可能做到完美无暇。相反,要灵活,并计划在技术栈的每一层不断地重新创造和改造。

  • 在合理的情况下,尽可能快地交付工作软件,并非一味地追求尽快交付。在对外交付之前先在内部使用自己的产品。确保产品在交付前达到高质量标准。产品的质量比交付产品所花费的时间更重要。


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


谷歌程序员觉得敏捷开发没搞头,你怎么看?| 话题


作者介绍:


David Jeske,计算机工程师,前谷歌工程总监。


英文原文:


Why do some developers at strong companies like Google consider Agile development to be nonsense?


2019-08-15 08:3036229
用户头像

发布了 63 篇内容, 共 43.2 次阅读, 收获喜欢 119 次。

关注

评论 9 条评论

发布
用户头像
該敏捷的敏捷,该规划的规划
2019-12-19 17:18
回复
用户头像
和 震惊 有异曲同工之妙
2019-12-13 08:39
回复
用户头像
“Don’t give the customer what they ask for” 翻译成 不要仅仅满足客户的要求?客户需求A,可是我们想做B,我们是要同时把A和B都做了吗?还是我们告诉客户我们不做A我们在做B?
2019-09-06 11:27
回复
用户头像
精益开发了解一下?
2019-08-22 17:29
回复
用户头像
适合的才是最好的
2019-08-21 14:40
回复
用户头像
内容中肯,标题耸人听闻
2019-08-20 13:56
回复
没有这个标题 怕大家发现不了这篇 内容的中肯啊~
2019-08-21 16:02
回复
用户头像
Stacey矩阵已经明确敏捷适合的区域
2019-08-15 16:39
回复
用户头像
不错,因地制宜,适合自己的才是最好的。
2019-08-15 10:10
回复
没有更多了
发现更多内容

mysql之事务

急需上岸的小谢

9月月更

开源密码管理器更安全吗?(1)

神锁离线版

开源 数据安全 密码管理 开源安全 开源软件

首次全面解析云原生成熟度模型:解决企业「诊断难、规划难、选型难」问题

阿里巴巴中间件

阿里云 中间件 成熟度

MySQL高级

楠羽

笔记 MySQL 数据库 9月月更

跟着卷卷龙一起学Camera--LensShading

卷卷龙

ISP camera 9月月更

使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!

Python猫

Python

JSON 之父:10 天赶工出的 JavaScript,最好的归宿就是让它退役

图灵教育

JavaScript 程序员 代码

微信小程序,Python爬虫抓包采集实战,采集某成考题库小程序

梦想橡皮擦

Python 9月月更

C++ STL容器详解【三万字超详细讲解】

Fire_Shield

c++ stl 9月月更

天呐,我居然可以隔空作画了

华为云开发者联盟

人工智能 华为云 企业号九月金秋榜

百万奖池角逐,华为云IoT边缘带你看懂“边缘计算开发者大赛”

华为云开发者联盟

云计算 物联网 华为云 企业号九月金秋榜

「趣学前端」读取Excel文件内容

叶一一

JavaScript 前端 9月月更

【git】:有关git的基础指令以及分支概念

翼同学

git 开源 版本管理 9月月更

面试突击80:说一下 Spring 中 Bean 的生命周期?

王磊

Java 面试题

白话讲解创建型设计模式:单例、原型,构建

山河已无恙

9月月更

企业知识管理平台在企业中扮演什么样的角色?

Baklib

知识管理

如何高效解决 C++内存问题,Apache Doris 实践之路|技术解析

SelectDB

c++ 大数据 数据分析 Doris 企业号九月金秋榜

SD-WAN组网场景概览

阿泽🧸

SD-WAN 9月月更

你真的会使用C语言中的 “ 操作符 ” 吗?

Albert Edison

C语言 开发语言 操作符 9月月更

JSON之父:10天赶工出的JavaScript,最好的归宿就是让它退役

图灵社区

JavaScript 编程 程序员

共探人工智能新发展,AICON 2022 即将重磅开启

极客天地

经验分享|分享搭建在线帮助中心的方法

Baklib

设计模式的艺术 第十九章迭代器设计模式练习(设计一个逐页迭代器,每次可返回指定个数(一页)元素,并将该迭代器用于对数据进行分页处理)

代廉洁

设计模式的艺术

【Git】:SSH公钥配置、远程仓库的基础使用...

翼同学

git 开源 版本管理 9月月更

C++学习------cinttypes头文件的源码学习

桑榆

c++ 源码阅读 9月月更

13th 发布在即,一文带你回顾Intel 12th Core

鼎道智联

英特尔 13th处理器 酷睿处理器 12th处理器

如何用AscendCL的接口开发网络模型推理场景下应用?

华为云开发者联盟

人工智能 企业号九月金秋榜

想了解Python中的super 函数么

华为云开发者联盟

Python 开发 企业号九月金秋榜

你还不知道什么是Git?

翼同学

git 开源 版本管理 9月月更

连接与计算无处不在,火山引擎新一代边缘云

火山引擎边缘云

云原生 CDN 边缘计算 火山引擎 边缘云

产品经理的进阶指南

产品海豚湾

产品经理 产品设计 职业发展 职业道路 9月月更

为什么谷歌的开发人员认为敏捷开发是无稽之谈?_语言 & 开发_David Jeske_InfoQ精选文章