快又准! Facebook 研发效能提升方法实践

天下武功唯快不破。

如今,中国企业对快速有着无止境的追求,研发要快!迭代要快!而快速的背后正是企业研发创新能力的体现。任何产品都有生命周期,任何客户的喜好都会变化,仅靠一个产品的成功,一时产品的成功,是很难让这个企业在这个行业立于不败之地。唯一能够让企业持续生存的基础,就是企业的持续研发创新能力,持续不断满足客户,满足市场不断变化的需求应变能力。

那么,如何让团队有效提高研发效能?做到不仅要快,还要持续的快呢?

今天,高效运维社区带着这些疑问对葛俊老师进行了采访,听他分享 Facebook 如何提升团队研发效能,工程师如何快速个人成长。

快又准! Facebook 研发效能提升方法实践

葛俊

KodeRover Co-founder & CTO

Q&A

社区:您好,葛俊老师,能否请您先做一个简单的自我介绍,介绍一下您之前的工作经历和擅长的领域等。

葛俊:我中科大计算机本科毕业后,到美国爱荷华州立大学读的计算机研究生。2004 年毕业之后,先是加入美国微软工作,后来在2010 年加入 Facebook ,5 年后离开。之后加入国内外几家公司,比如美国的创业公司Stand Technologies,以及国内的华为;目前是 KodeRover的Co-founder和CTO。

我擅长的领域主要是两个方面:

一是研发效能,我在Facebook 做的主要工作是负责开发和开源 Phabricator 。它就是一个研发工具的套件,主要的功能是代码审查。另外在华为的时候我的工作部门是开发工具部,也是做效能方面工作。另外我个人一直对效率很感兴趣。所以研发效能是我第一个比较熟悉的领域。

二是互联网小创业公司端到端基础架构,在Facebook的时候,我所在的团队隶属于基础平台部门。所以我对Facebook的基础架构有比较多的了解,同时,因为Phabricator开源过程中,我们需要把它的代码和Facebook内部代码分离,并单独部署集群和相关服务,所以我对一个完整产品的基础架构有了第一手的经验。离开Facebook之后,我进一步在端到端的基础架构搭建做了更多的工作。比如,在Stand公司的时候,前后端的技术框架、部署流程都是我一手在AWS上,使用AWS的服务以及第三方的服务搭建的。

社区:从您的履历中不难看出您很优秀,世界级企业的工作经历对您的职业生涯有哪些影响?

葛俊:每段经历对于我个人成长都弥足珍贵,比如,在微软的工作的6年是我毕业后第一份工作,微软的强大技术底蕴和严谨的开发流程给我后面的发展奠定了很好的基础;而在华为的一段工作经历,让我真正了解到国内大公司的研发是怎么做的,学习到了他们极高执行力背后的一下原则和方法。

不过总的来说,Facebook 的工作经历经历对我更重要一些,因为 Facebook 整个研发效率非常高,即使在硅谷也是比较有名的。它的内部工具、开发效率、创新速度等方面,我认为在硅谷可以排进前三。同时,它的开发模式和企业文化也非常高效,非常实用,对开发人员的撑场非常有帮助。在 Facebook 的5年,对于我个人的能力发展和视野开阔起到了很大的作用。

社区:Facebook 的企业文化以及对于研发效能的理解都有哪些不一样?

葛俊:我先说一下他们企业文化的特点吧。在我看来,Facebook企业文化是一种基于信任的文化,通过信任尽量发挥开发人员的自驱力和创造力。

这主要通过三个方面体现:

首先,是尽量让开发人员做自己感兴趣的事情。比如,在入职的时候有一个Bootcamp,给大家 6 个礼拜的时间去寻找自己喜欢的产品和团队。

第二,是让大家拥有信息。比如,整个代码对整个公司基本都是公开的。

第三,是拥有信任。比如,容错性非常高。

至于Facebook对研发效能的理解,我觉得有两大特点。

1、实用主义,总是根据自己公司的实际情况找到性价比比较高的研发实践。

2、能够比较好的权衡眼前的利益和长远的发展。比如。能够持续的在技术上投入,保证技术债不会大量堆积。

3、他们一直在持续地关注效能,根据业务发展的不同阶段,不断演进基础平台和流程。就拿DevOps中非常重要的交付效率,他们2008年左右就建立了流畅的CI流程和周部署、日部署以及热修复部署流程,支持灰度发布,蓝绿发布等方式。让几千个开发人员可以在同一个开发分支上高效产出。效率本来已经很高。但随着业务发展的需要,他们又在2017年左右发展到了持续部署。正是这种持续提高(Continuous Improvement)的态度和方法,让他们一直保持着高效能,是他们业务成功的一个必要条件。

社区:那么在对于如何提高团队研发效能方面,您有哪些心得可以与我们分享?

葛俊:首先,对于研发效能的定义,应该包括三个方面:快、准、持续。也就是说,要持续地快速产出对用户有价值的东西。

要系统性地提高研发效能,我们首先需要理解软件研发的本质。软件研发本质上是一个超级灵活的流水线。那么怎样能提升这条流水线的效率呢?我认为主要四个方面:

流程方面,首先,因为软件研发流水线最终产品的不确定性,我们需要优化流程尽快进行价值假设的验证,具体来说精益创业,看板我觉得比较有效。然后,要从需求分析产品上线的全流程进行分析,找到瓶颈进行优化。另外,具体来说,有以下几个原则比较重要:

1.代码入库前,让开发不被阻塞,比如对开发及其环境提供自助化服务。

2.提高持续交付的能力,也就是最近几年的 DevOps 。要对分支拉取、环境获取、部署、测试、检验、数据反馈尽量自动化。

3.使用全栈开发的方式,让测试和运维提供工具和支持,让开发人员更多地参与到测试和运维工作中去,从而大家能目标一致,打通开发,测试,运维之间的部门墙。

事实上,这几点都不是孤立的,而是互有重合,互相补充的。

工程方法方面,在流水线上的关键节点,也就是设计,开发,测试,运维的步骤上进行优化。比如分支管理,测试左移、右移。另外,代码审查也是一个比较好的具体例子。它尽早把问题发现,把问题扼杀在摇篮中。在代码审查方面。Facebook 做的非常高效,对代码入库前质量提升起到非常大的作用。这一点。很多公司都没有利用好。要么执行不下去,要么就流于形式。

个人效能方面,团队由个人组成,所以个人的研发效能,对团队的研发效能也很关键。团队主管要注意提供环境。让开发人员能够不断的学习成长。从开发人员个人角度来看,我觉得以下几个方面对个人效能提高比较重要:

  1. 首先要注意关注业务,以终为始进行开发。
  2. 要学习高效开发的一些基本原则和知识,包括代码的原子性,架构,设计范式等;
  3. 对命令行、GIT这些常用工具要投入时间学习
  4. 最后,也是更重要的,要持续学习。

管理和文化建设方面,上面的各种实践操作都需要管理来支撑,所以,管理是根本。另外文化是一个团队做事的潜规则。所以要持续地高产出,必须要建设好文化。总的来讲,我觉得,要提高研发效能,技术管理者关键要做到以下几点:

  1. 找对方向,找到业务目标和技术目标的平衡
  2. 建设团队,建设梯队,以及寻找有成长意愿人才
  3. 想办法调动团队成员的内驱力。比如建设鼓励创新试错的环境

社区:团队研发效能提升的衡量标准是什么?

葛俊:我觉得最根本应该是一个团队对公司的贡献度。具体来说,下面我列举出一些可以作为参考的度量指标:

从产生用户价值与否上来说,净推荐值是一个比较好的指标。用户愿不愿意推荐你的产品,可以直观的反映出产品的好坏。不要一味地的求快求多,还是要看开发的产品、功能是不是能被用户所用。第二个有用指标是系统APP宕机时间。

从流程的角度来看,我觉得 WIP (在制品)的数量是一个比较重要指标,它是看板Kanban方法的核心之一;另外发布频率也很重要,一般来说发布越频繁越好,当然发布过程当中会有交易成本。发布的交易成本指的是每次发布过程中需要完成的各种流程方面工作,比如拉分支,部署,测试等等。

从质量角度来看,工单返工率是一个不错的指标。通过它可以反映出团队开发的质量,以及QA团队质量保证的能力。

另外,值得强调的是,效能指标一定不能拿来衡量个人绩效,一但拿来个人绩效,就很容易出现“做数字”的问题。我觉得是正确的使用方法是把效能度量给团队和个人作为参考,帮助团队进步和个人成长。

社区:从事技术的职业生涯中,您曾面临哪些重大困难?又是如何解决困难的?

葛俊:我对两次挑战影响比较深刻。第一次是技术方面。那是我才到 Facebook 对Phabricator进行开源的时候。当时对 Facebook 的技术栈不熟悉,又要尽快把 Phabricator 开源,还要负责整个 Phabricator 在公司内部的开发、部署运行等工作,以及和开源社区的合作,有很多工作要做,有很多新东西要学,压力很大。

另一次是回国后,在华为工作。因为我毕业之后一直在美国工作,对于国内的人文和企业文化方面不是适应,所以挑战比较大。

面对这些困难的办法都是快速学习。两次大概都是用了 3-6 个月的时间,让自己逐渐适应。回过头看,这些经历对我都非常有价值,让我快速成长和提高。

社区:我们知道 CTO 是技术与管理相结合的职位,您认为需要哪些能力去平衡这两方面带来的压力?

葛俊:确实差别蛮大的,我觉得要做好CTO,要做好这两方面的平衡,同时还要关注业务。

第一,技术当然要强。首先对技术有广度的了解,有战略眼光,有前瞻性。同时又要接地气,我个人觉得不能脱产,一定要写一些东西才更利于管理团队。

第二,学习管理。带领团队主要是和人打交道,所以会沟通。针对不同的沟通对象,比如CEO,CXO,以及团队内部成员,要有不同的沟通方法;第二,要给团队设定合理的业务目标和技术目标,并高效执行;第三,要会带人。

第三,懂业务。作为 CTO一定要对业务比较熟悉,从而选择正确的技术方向,提升技术在公司内部的话语权。

社区:在数字化转型的前提下,您认为技术团队要如何做才能从容面对时代浪潮?

葛俊:我认为传统企业要数字化转型,首先要能拥抱云(公有云,私有云,混合云)是很重要的,云的重要特性包括服务化,自助化,弹性,使用好了可以给企业带来很大竞争优势;其次在信息沟通方面,可以更多地尝试信息共享,打破信息孤岛困局;另外 DevOps 也很重要,就是流程要打通,消除部门墙,消除沟通壁垒。

社区:最后,请您聊一下未来哪些规划或者目标?

葛俊:我下面会专注研发效能方面的工作。具体来说,我现在所在的公司KodeRover就是在做工程效率方面的产品,目标是通过完善的云原生研发环境治理能力、智能发布编排能力,帮助企业实现研发交付的全自动化、自助化、数字化、云化,实现10x交付效率提升,推动业务10x增长。

另外,我也在写一个关于研发效率的专栏,把这些年学到的东西系统地整理一下并输出,希望能够帮助国内的团队提高效能,并帮助个人开发者提高技能和开发的幸福感。

在前进过程中,方法与工具都是不可缺少的。葛俊老师为我们讲述了不一样的企业文化,不一样的工作思路,而有效实践才是成就快又准的前提。看了文章的你,是否也有想法要与我们一起分享呢?快来留言吧!

猜你喜欢

转载自blog.51cto.com/15127503/2657480