2011 年 10 月,谷歌工程师史蒂夫·叶格(Steve Yegge)在 Google+ 上写了一篇长帖,按 GeekWire 的统计有 4771 个词。这篇东西本来只想给谷歌同事看,文中还专门招呼了一句「在座 150 来位前亚马逊的同仁」。结果他手一滑,发成了全网公开。他很快删了帖,可帖子还是被人存了下来,照样讨论得很热闹。
叶格进谷歌之前,在亚马逊干了大约六年半。帖子最核心的,是他在那边亲历的一件事。大约 2002 年(他自己说,「前后差一年」),杰夫·贝索斯下了一道命令。照叶格的回忆,大意是这样的:
「所有团队今后都要通过服务接口,对外提供自己的数据和功能。」团队之间只能通过这些接口沟通。不许直接读别的团队的数据库,不许共享内存,不许留任何后门。用什么技术无所谓,「贝索斯不在乎」。每一个接口从设计第一天起,就得做到将来能对公司外部的开发者开放。
然后是第六条:「不照做的,开除。」
第七条是「谢谢,祝你愉快!」,叶格承认这是他自己加的玩笑。第六条,他写道,「是来真的,于是大家开始干活」。
关于怎么用服务搭软件,外面早就有不少文档和经验之谈。叶格说,放到亚马逊这么大的规模上,这些东西的用处,大概相当于提醒印第安纳·琼斯过马路要左右看。
接下来两年左右,亚马逊硬是把自己改造成了一堆服务的集合,工程师们一路踩坑,才知道代价在哪。一张故障工单,可能要在 20 个服务调用之间转来转去,才找到真正该负责的人。隔壁随便哪个团队,都可能一下子发来海量请求,把你的服务压垮,于是每个服务都得限定每个调用方最多能要多少。用叶格的话说:「按服务来组织,让团队学会了互相不信任,方式和不该信任外部开发者的那些方式大体一样。」
亚马逊首席技术官沃纳·沃格斯讲过公司这一边的版本,里面没有开除的威胁。他在 2019 年写道:1998 年,亚马逊所有开发团队都在同一个应用上干活,每次发布都得在所有团队之间协调一遍。后来,亚马逊把应用拆成一个个服务,也把组织拆成了一个个小而自主的团队,「小到两个披萨就能喂饱」。
沃格斯也讲到了后来的事。他写道,亚马逊在搭建高度可扩展的基础设施上的成功,「最终催生了新的核心能力,并促成了 2006 年 AWS 的创立」。叶格的说法是:贝索斯看出来,为卖书搭起来的这套机器,可以改造成一个给别的公司用的计算平台。
叶格这篇帖子,矛头其实对准的是自己的东家。他认为谷歌不懂平台。说到亚马逊的平台,他写道:「亚马逊的 AWS(aws.amazon.com)好得不得了。你自己去看,随便点点。真丢人。这些东西我们一样都没有。」