<audio id="audio" title="开篇词 | 为什么你要关注研发效能？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/dc/86/dcb31edaa40cceeb37bb08f446a6f986.mp3"></audio>

你好，我是葛俊，曾在 Facebook内部工具组工作，与两个同事共同负责软件研发工具套件Phabricator 的开发和开源，是[Phabricator](https://github.com/phacility/phabricator)的主要作者之一。

最近这十年，国内互联网产业的发展速度不亚于硅谷，在商业模式创新方面甚至已经完成超越，但是我们在研发效能方面始终比较落后。今年年初爆发的996大讨论，让国内的加班问题，吸引了国内外开发者的关注。我们很难予以否认，在互联网行业繁荣发展的背景下，国内很多公司采用了“拼工时”的做法，却忽略了最最应该关注的研发效能。

现在，我想请你回忆下，你是否也曾为下面这些问题感到困扰呢？

1. 研发团队看起来人也不少，大家也很辛苦，加班也不少了，但是产品发布还是常常延期，上线后产品问题频发。
1. 用户需求从需求分析、产品设计、开发、测试最终流到部署，但最终发布的产品与用户需求偏差却很大。
1. 产品发布上线时出现大量提交、合并，导致最后时刻出现很多问题，团队成员集体熬夜加班，却将大把的时间花在了等待环境、等待验证上。
1. 开发提测质量不好，大量压力聚集到测试这一步，导致代码返工率很高。引入单元测试、代码审查，效果却都不明显。
1. 开发人员疲于应付业务，没有精力或者兴趣去精进技术，对Git、命令行等强大工具的使用仅限于皮毛，士气低迷、工作效率低下。

这其实就是团队的研发效率，也就是研发效能出现了问题。那么，研发效能到底是什么呢？

一提到研发效能，很多人的第一反应可能都是开发的速率，也就是研发团队能否快速发布产品。但在我看来，速率只是效能的三大支柱之一。

除了快，产品开发更重要的是方向正确，因为不能给用户和公司真正提供价值的产品，做了也是白做。另外，高效能还需要有可持续性，否则短期的高产出可能会严重伤害长期的产出。比如，连续熬夜加班带来的身体问题，会导致后续工作效率低下，得不偿失。

因此，**研发效能的完整定义应该是：团队能够持续地为用户产生有效价值的效率**，包括有效性（Effectiveness）、效率（Efficiency）和可持续性（Sustainability）三个方面。简单来说，就是能否长期、高效地开发出有价值的产品。

可喜的是，国内越来越多的公司开始在研发流程、工具、文化等方面下功夫，很多百人研发人员规模的公司开始组建了专门的效能团队，来提高整个公司的研发效能。

这是一个很好的现象和趋势。但，很多公司在推进研发效能的时候，常常不知道从何下手，或者是花了精力、加大了投入却看不到效果，产出抵不上投入。比如，我在一些公司做内训和顾问工作的时候，经常会遇到下面这样的案例：

1. 想通过指标度量的方式来衡量团队的效能，要求每个团队达到一定的测试覆盖率。研发团队在产品完成后进行突击，来编写单元测试，最终达到了要求，但产品质量却没有提高。
1. 引入业界先进工程实践，学习Google使用大仓，但因为基础设施不成熟，对大量二进制文件支持很差，结果是算法团队因为有很多的二进制模型文件，每次Git Clone都需要半小时，怨声载道。
1. 希望建设工程师文化来提高产出和活跃气氛，跟公司老大以及HR商量好几条价值观在公司宣传推广，还组织了几次团建活动，但是收效甚微。大家真正工作起来还是老样子。

这些问题的根源都在于，**软件开发的灵活性决定了研发效能提升的困难性：**可以关注的点太多，可以使用的方法也很多，但如果只是简单照搬业界研发实践的话，效果往往不好，有时甚至会造成负面效果。

而与国内公司形成鲜明对比的是，硅谷的互联网公司在推进研发效能方面做得要好得多。在2000年互联网泡沫之后，美国的互联网产业从疯狂增长进入到了“精耕细作”的阶段，需要通过比拼效能在竞争中取得优势，并在此过程中积累了很多经验。

在这其中，Facebook的研发效能非常高，更是硅谷公司中的一个典范。比如，早在2012年Facebook月活达到10亿的时候，后端服务及前端网站的部署，采用的是每周一次全量代码部署、每天一次增量代码部署，以及每天不定次数的热修复部署，但部署人员就只有三个，达到平均每个部署人员支撑3.3亿用户的惊人效率。

又比如，社交网络出现Bug的时候，调测起来非常麻烦。因为要复现Bug场景中错综复杂的社交网络数据，困难并且耗时。但在Facebook，它采用开发环境跟生产环境共享一套数据的方法。这就使得开发人员可以非常方便地在自己的机器上复现这个Bug，进行调测。当然，这样的数据共享机制背后有着强大的技术和管理支撑来规避风险。

2010到2013年之间，我在Facebook基础平台团队的内部工具组，作为核心成员，研发并开源了研发工具套件Phabricator。2013到2015年，我又作为效能工具的使用者，参与了Facebook对外产品的研发。也正因为这几年的工作，我对Facebook如何提高研发效能有了越来越清晰的理解，认识到**研发效能的提高，需要整个公司在研发流程、工程方法、个人效能和文化管理等方面进行精心设计。**

离开Facebook之后，我在硅谷的Stand Technologies公司、国内的创业公司以及华为担任过技术总负责人、CTO、技术专家和团队主管等角色，带领百人技术团队进行研发。

比如，2017年到2018年，我在华为开发工具部主导下一代集成开发工具环境，为软件开发工程师提供全栈的端云一体工具平台，服务于2万多开发者，致力于提高公司整体的研发效能。同时，我也尝试将研发效能的工程实践引入华为。比如，我在团队进行了几次黑客松（Hackathon），每次活动，平均10个开发者就产生一个项目，每10个项目中就有1.5个成功落地。

工作15年来，我在研发效能团队工作过，也在产品团队中推动过研发效能，这其中包括硅谷和国内的公司，也包括大型企业和创业公司。对怎样在一个公司或者团队引入效能实践，有比较丰富的经验。

所以，当极客时间团队邀请我写一个与研发效能相关的专栏时，我毫不犹豫地就答应了，希望能够借此把之前的经验、教训做一次系统地梳理，帮助到同样对效能有期待同时又有困惑的同行者，另外对自己也是一次温故知新的机会。

在这个专栏中，我会从4个方面，分5个模块与你讲清楚如何做到研发的高效能。

- **研发效能综述。**我会讲解研发效能的定义、模型，并着重介绍研发效能度量的正确使用方法。借此，希望你能够梳理出研发效能的主脉络，构建出一副清晰的知识图谱。
- **研发流程模块。**我将与你分享敏捷、持续集成、分支管理、持续交付、DevOps、团队协同等话题，希望能帮助你深入理解研发过程中的关键流程，以及流程优化的基本原则，从而能够针对自己的实际情况，找到最合适的工程实践，让软件开发的整个流程更加顺畅、高效。
- **工程方法模块。**我将与你讨论研发流程中各关键步骤高效工程方法，包括开发、测试、运维。并与你分析软件开发的趋势和热点，比如智能化开发、在移动设备上开发、云原生等等。通过这个模块，我希望加深你对这些具体工程方法的了解，并学会如何正确地使用这些方法。
- **个人效能模块。**我将与你分享如何提高个人效能，具体涉及深度工作、Git、命令行、VIM、工具环境集成等内容，旨在帮助你提高技术的专精程度和持续成长。每个开发人员都应该提高自己的效能，只有这样才能持续学习持续提高，避免被业务拖着跑。
- **管理和文化模块。**我将重点与你系统分析硅谷管理和文化，尤其是Facebook的工程师文化，并根据我在国内公司的具体落地经验，给出推荐的文化引入和建设方法。

研发效能和软件开发一样，都具有很大的灵活性，提高研发效能也不是照搬照套就能做好的。所以**在写作专栏的过程中，我会着重讲解Why，带你深入了解效能实践背后的原理，然后才给出How，也就是具体的实践。**因为只有深刻理解原理，才能灵活运用。

同时，我会与你分享尽量多的案例，带你一起了解国内外一些公司的优秀做法，分析它们成功的经验，当然，我也会分享失败的案例，以及背后的原因。不过更重要的是，我希望你能够跟着我一起分析，通过对比思考，找到真正适合团队和自身的实践。而这，是我写作这个专栏的真正初衷。

这是研发效能专栏的第一篇文章，如果可以的话，欢迎你在留言区做个自我介绍，和我聊聊你或者你的团队在研发效能方面的实践以及遇到的问题，增进我们彼此的了解。而且，我也希望你看过这个专栏后，能够再回头来看看最初留下的内容，相信届时你已经对研发效能有了新的理解和思考。


