独家揭秘 Airbnb 的产品开发理念和工程师团队文化
在上一章节中,我们看到了 Airbnb 的工程师拥有着足够强大的决策能力。Airbnb 将项目彻底分解,充分释放每一个工程师的自主性,并鼓励跨部门之间的协作。而在本文中,我们将看到 Airbnb 在具体的产品开发过程中是秉持着怎样的原则和理念。
在开发进程中的文化标准
Airbnb 在开发进程,从设计上来说是灵活的。它不希望在很多方向上都有所突破进展,也不希望变得非常标准化、模板化,这样会错失更好的工具和开发理念。Airbnb 为了解决这个两难问题,不强行在团队内推行某种规则,而是让每一个个体都能在产品开发中形成更加准确的判断。
如果项目开发上做了某些调整,往往是因为团队内部成员自发做出的决定。「代码审查」就是一个非常好的例子。
曾经,Airbnb 多年来都有一系列的方法来做到「拉拽请求」,从来不会说强制员工来这样应用。其实,很多工程师都没有将它们纳入到自己的工作流程中。在 Airbnb 刚刚建立不久的时候,工程师都能够将自己的变动直接应用到网站上。这就有点儿像是蒙着眼睛拿着电锯玩儿杂耍,看起来很酷,稍有不慎就会失掉自己的一根手指。
后来,有一些有想法的工程师们开始在每周工程师周报会议上面不断地强调「代码检查」的重要性,并且举出了在过去一周中所见过的最具帮助性,也是最为深思熟虑的「代码审查」案例。很快,越来越多的工程师都开始应用「拉拽请求」,甚至于到如果你不要求「代码审查」的话,都会觉得你是如此的格格不入。而如今,它已经成为了 Airbnb 项目开发过程中的一个不可或缺的环节。
,这种观念上的转换也体现在了工具的进步上面。之前有一个工程师小团队自己开发了一个能够持续整合的底层系统,让任何工程师团队能在几分钟内把一整套测试套件放到上面运行。利用工具,降低了高效率行为实现的门槛,并且不断推动公司的文化向前发展。
上述的例子只是冰山一角而已,与之类似的例子还有项目管理工具以及「Bug 追踪工具」上面。当 Airbnb 发现了一种更加优秀的开发方式的时候,它会让所有人都注意到它,让它基于特有的优势而存在,让人们来选择用或者不用。这样做会保证一定的灵活性,也不会错过任何一种能够提升开发效率的机会。
任何的工程师都能对代码库做出贡献,所有的软件库都是面向所有工程师开放的。别觉得这是不可能的事。因为 Airbnb 奉行的文化中包含了「自动化测试」、「代码审查」并且也有能力通过具体的产品监测发现代码异常。
这样的理念其实就是来自于如今的开源世界。团队中的某个人维护着这个代码库,而如今你想要染指这个代码库的话,要审查你所做的各种变动。
这样一来,每个工程师的主动性都得到了充分地释放。与其想办法把自己的问题放到别人团队的「工作重点清单」,然后等着他们来完成,还不如自己着手来做,然后请他们进行审查就好了。「代码审查」就是这样非常频繁地进行着,产品开发进程效率大大提升,每一个人都获益良多。
一旦代码融合了,工程师开始带来自己的变化。在任何一天,Airbnb 的网站所发生的变动会有 10 次甚至更多。整个的「开发-测试」流程只需要不到 10 分钟来运行,完成整个产品应用只需要花 8 分钟的时间。这一切都太快速高效了,以至于一旦代码融合,公司会叫工程师立刻开始应用改变。各种细小的改变的快速应用,降低了发生技术冲突的概率,即便哪里出现了错误,也方便人们更容易的「debug」。当你开始应用改变的时候,工程师通常都会在工程团队聊天室里待着。从系统宣布「配置」现在开始,到工程师们宣布他们确认产品所做的变化是可行的。而在这个过程中,工程师还会紧密盯着一系列的数字,保证中间不会出什么差池。
,差池、失误、在所难免。往往 Airbnb 会选择把网站倒退到某个时点,又或者是立刻着手修复它。当问题解决的时候,工程师会出一份不针对任何人的「事故检查报告」。Airbnb 专门内部开发了一款「事故汇报工具」,专门用来保存这些报告。这些报告能够起到非常好的提示作用,帮助 Airbnb 在未来的工作中做到防患于未然,让系统底层架构更加可靠稳定。
职业发展
在科技圈子里面,作为工程师,你有两个选择,一方面你可以朝着自己的专业领域纵深发展,另一方面你可以朝着更高更宽的职位演进,比如产品经理。而 Airbnb 相信,前者能够取得如后者一般的成就。无论是哪个方向,他们的薪资是平行来制定的,所以如果在 Airbnb 升入了工程管理岗位,是没有什么所谓的「补偿性优势」一说的。
事实上,成为了一名经理并不意味着你是升职了,只是把你的工作角色,工作重心给做了一下调换而已。经理很多时候扮演的是居中协调的角色,他们是不断将工程师前进路上的绊脚石移除的那个人。这个绊脚石有可能是职业发展上的某个瓶颈,工作内容优先度上的混乱,又或者是单纯技术上的不足。他们的功能体现在「辅助」以及「指导」上面。
,Airbnb 还非常重视这些经理的技术强弱。每一个星期,每一个经理都会参加十几个有关技术层面的决策。如果他们任何一个人技术上不过关,那么很可能就不断让 Airbnb 深陷糟糕的泥潭之中。所以,所有的经理一开始都是从独立的工程技术人员做起来的。随着他们不断地熟悉代码,应用实践,还有更重要的是将 Airbnb 的文化纳入到下意识的行为当中,他们才一点点的符合「经理」这个角色。Airbnb 的经理绝不空降。
而作为独立的贡献者来说,他们主要的职责就是技术层面的执行,确保能够给整个产品带来更多的价值。他们负责找出当下哪些工作内容是最能达到这个结果。除此之外,还对他们有一个要求,让开发进程在未来实践的过程中变得更加优秀高效。每一个小项目都应该提升公司团队的技术基础。这样的责任落实到了每个人的头上,也使得工程师对彼此有了更高标准的要求,工程师们也会在产品研发的时间底线和功能上面做出取舍,为了带来更高质量的工程开发,必须多争取一些时间。
Airbnb 还会在公司之外帮助工程师建立他们的技术档案,传播他们的名气。在专门建立的博客上,又或者是某些开源项目上,Airbnb 一点儿也不吝啬于公开目前的技术成功以及相关的工程师的名字。因为 Airbnb 相信,只要不是跟自己行业有关的最核心的技术,这些都应该拿来贡献给开源事业。Airbnb 一直想做一些回馈于技术社群,以至于社会的事情。它鼓励越来越多的人注意到工程师的劳动成果,并且非常骄傲地向外界展示自己的工程师又取得了怎样的进展成就。
的