提升研发效能:抵制无效加班文化
程序员界有一个说法是"10x程序员",也就是"10倍程序员",意思是一个好的程序员,其工作效率可以达到普通程序员的10倍。这听起来似乎有些夸张,但是却是客观存在的真实情况。
由于软件研发具有高度灵活性,针对一个相同的任务,往往会有多种不同的解决方案可供选择,同时,每个解决方案又各自有不同的具体实现方法。这些不同的方案方法之间的效率差距就造成了程序员之间的效率差距。当要解决的问题比较简单、规模比较小的时候,这种效率差距还不太明显。而一但问题变得复杂之后,这些不同方案方法在设计复杂度、实现难度、可调试性、可维护性等方面的差距就会显著拉开,从而造成研发人员之间的巨大效率差异。
即使是在Facebook,在大部分开发人员的能力都比较接近的情况下,还是有一些特别突出的开发人员的水平可以达到平均水平的三四倍。
2019年3月26日,一位昵称为996icu的用户在GitHub上创建了名为996.ICU的项目,自此996这个话题被推上了风口浪尖,该项目也在几个月之内就拿到了25万多颗星。那么,硅谷的公司有没有996”
在硅谷,很少有公司要求996。不过,在初创公司,因为业务紧张以及同事间的激烈竞争,加班也很常见。但是硅谷的公司和国内的公司有一个很大的区别:硅谷的公司一般是任务驱动的,它们只要求员工完成任务,并不关心员工到底花了多少时间;而国内很多实行996的公司不仅要求完成任务,还强调工作时长。事实上,专注时长的这种做法在软件开发行业是不合理的,因为长期加班并不能保证持续的高效产出。
从多年经验来看,每天能够高效地产出代码五六个小时已经相当不错。短期突击加班会提高产出,但如果长期加班的话,效率、质量必定会下降。长期加班会产生更低效的架构,引入更多的Bug,导致后期需要花费更多的精力去修复,得不偿失。
长期加班还会导致无效加班。比如,某在国内一流互联网公司工作的朋友反馈,他所在的公司实行996,很多人加班其实是在磨洋工,明显是低效加班,甚至坐在工位上上网耗时间的“无效加班”也时有发生。连一流的互联网公司中都会出现这种情况,可想而知,其他推行996工作制的公司大概率也会存在这种问题。
长期加班效果不好,那么面对激烈竞争,我们到底应该如何应对?对于这个问题,我们需要从软件开发本身的特点上来寻求解决办法。
软件开发是一个创造性很强的过程,开发者之间的效率相差很大。比如,“10x程序员”的生产效率可以达到普通开发者的10倍。这样巨大的效率差别,在团队层面也有同样的体现。如果能够提高团队的研发效率,那么产品的产出和质量都会大幅提升。所以,相比工作时长,公司更应该关注研发效能。
硅谷的很多知名公司,比如Google、Facebook、奈飞等,在研发效能上做得很好(这也是它们业务持续成功的重要因素),是研发效能的标杆。
Facebook在达到10亿月活的时候,其后端服务及前端网站的部署采用的是每周一次全量代码部署、每天一次增量代码部署,以及每天不定次数的热修复部署,但部署人员只有2.5个(0.5个是因为有一人是来自工程师团队的自愿报名的助手),达到平均每个部署人员支撑4亿用户的惊人效率。Facebook做到这一点的基础就是不断提高的研发效能。
当社交网络出现Bug的时候,调测起来非常麻烦,因为要复现Bug场景中错综复杂的社交网络数据困难且耗时。但Facebook采用开发环境与生产环境共享一套数据的方法,使开发人员可以非常方便地在自己的机器上复现Bug,以进行调测。当然,这样的数据共享机制背后有着强大的技术和管理支撑来规避风险。
研发效能的提高需要整个公司在研发流程、工程方法、个人效能和文化管理等方面进行精心设计。 注重研发效能对个人也有巨大好处,它能够让开发者更加聚焦于产出价值,更容易精进自己的技术,同时让团队更容易建立起好的技术氛围,进一步促进团队生产效率提高,从而形成良性循环,支撑持续的高效开发。
想要了解更多硅谷明星公司是如何提升研发效能的,欢迎阅读:《高效研发:硅谷研发效能方法与实践》
《高效研发:硅谷研发效能方法与实践》
本书以Facebook(Meta)等硅谷企业的研发经验为背景,结合作者17年的研发经验,讲解了如何实现个人和团队的高效研发。
全书主要从以下5个方面对硅谷的高效研发方法进行了总结,提供了非常系统的指导原则和实践指南。
(1)研发效能综述
主要了讲解研发效能的定义、模型,以及研发效能度量的正确方法。希望借此帮助读者梳理出研发效能的主脉络,构建一幅清晰的知识图谱。
(2)个人高效研发实践
主要讲解如何提高个人研发效能,具体涉及深度工作、Git、命令行、VIM、工具环境集成等内容,旨在帮助读者提高技术的专精程度和持续成长。
(3)研发流程优化
主要讲解研发流程优化的基本目标和原则、代码优化、分支管理、DevOps、团队协同等,希望帮助读者深入理解研发过程中的关键流程,以及流程优化的基本原则,从而能够针对自己的实际情况,找到合适的工程实践,让软件开发的整个流程更加顺畅、高效。
(4)团队高效研发实践
主要讲解团队高效研发实践过程中各关键步骤的高效工程方法,内容涉及研发环境搭建、代码审查、合理处理技术债、开源利弊分析、测试等,同时对研发流程及工程方法的趋势进行解读,希望帮助读者掌握这些具体工程方法的正确使用。
(5)管理和文化
系统分析了硅谷研发团队的管理和文化,尤其是Facebook的工程师文化,并根据作者在国内公司的具体落地经验,给出推荐的文化引入和建设方法。