GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)是一个长期关注互联网技术与架构的高可用架构技术社区和msup推出的年度技术架构大会。作为中国地区规模最大的技术会议之一,GIAC面向架构师、技术负责人和高端技术从业人员。第六届GIAC将分享互联网架构最热门的前沿技术、技术管理、系统架构、大数据和人工智能、移动开发和语言、架构相关等领域的典型代表的技术创新和研发实践的架构案例。在团队协作专题中,腾讯研发效能资深专家茹炳晟发表了题为《研发效能提升最佳实践的探索》的主题演讲。
茹炳晟是TEG-基础架构部-研发效能中心专家工程师,是业界知名的实战派软件质量和研发工程效能专家。他是腾讯云最具价值专家TVP,中国商业联合会互联网应用技术委员会智库专家,畅销书《测试工程师全栈技术进阶与实践》和《高效自动化测试平台:设计与开发实战》的作者,以及InfoQ极客时间《软件测试52讲-从小工到专家的实战心法》的作者。他曾参与编写DevOps能力成熟度模型国家标准,并参与设计了DevOps企业教练的国际认证课程。以下是他在演讲中的精华部分。
现代软件行业已经不再是以前的“大鱼吃小鱼”时代,而是转变成了“快鱼吃慢鱼”的时代。对于大型传统软件企业来说,原本的规模优势现在却陷入了“大船难掉头”的尴尬境地。对于小而美的互联网软件项目来说,创意和细分领域一旦确定,研发能力就成为竞争的关键。研发效能的高低对于需求转化速率起到了至关重要的作用。同时,如何降低研发和运维成本也是研发效能需要关注的重要课题,特别是对于大型互联网项目来说,即使是少量优化也能带来可观的成本节省。
研发效能是一个复杂的概念,很难精确定义。理解这类复杂概念的最好方法是回顾其发展历程。然而,由于时间限制,本次演讲无法详细回顾历史。因此,我将通过几个案例让大家直观地感受研发效能提升的美妙之处。
让我们先来看一个例子。在产品原型设计过程中,通常需要使用原型工具来实现产品GUI界面的设计。即使有了类似Axure和Modao等原型工具,设计界面的成本仍然很高。然而,通过手绘GUI界面设计,并使用Sketch2Code工具将其转换为目标平台的代码,可以大大提高原型构建的效率。
再来看另一个例子。在API接口测试过程中,经常会出现没有妥善处理输入参数临界值的问题。为了解决这个问题,可以引入一种机制,通过扫描获取API输入参数的类型,并根据参数类型生成容易出错的取值。通过自动调用API并检测是否发生错误,可以及早发现问题。这种方法可以与CI流水线集成,实现自动化测试,更早地暴露问题。
上述两个例子都是技术驱动的。接下来的例子与技术无关,而是流程驱动的。例如,在制作三明治时,如果食材摆放没有特定的顺序,厨师需要不断来回走动才能完成任务。然而,如果食材按使用顺序摆放,厨师可以在原地轻松完成制作,节省了不必要的走动时间,大大提高了效率。这表明,效率的提升既可以通过技术驱动,也可以通过流程优化来实现。
通过上述例子,我相信您对研发效能提升有了感性的认识。接下来,让我们来探讨研发效能的本质。简而言之,研发效能的目标是以顺畅、高质量地持续交付有效价值的闭环为基础。为了实现这一目标,我们需要关注持续开发、持续集成、持续测试、持续交付和持续运维等五个方面的实践。同时,我们还需要从流动速度、长期质量、客户价值和数据驱动等四个维度对研发效能进行度量。
通过上述描述,您可能已经对研发效能有了一个初步的理解。现在,让我们用一个通俗的例子来解释我对研发效能的理解。左边的图展示了一个典型的“方轮子”效应,老板在前面使劲拉车,员工在后面使劲推车。虽然员工可能看到车轮是方的,但由于老板在前面使劲拉,员工不敢停下脚步,只能继续推车。右边的图展示了食材按使用顺序摆放,厨师可以在原地轻松完成三明治的制作。这个例子说明,效率的提升不仅可以通过技术驱动,也可以通过流程优化来实现。
腾讯TEG内部的智研平台、阿里的云效平台、百度基于工程效能白皮书的效率云等都是研发效能领域的标杆。为什么近年来各大行业龙头企业都开始在研发效能领域发力,并且步调如此一致?我认为原因有以下三点:首先,现在许多大企业的产品线非常广,存在大量重复的轮子。因此,关注业务上的重复轮子就是业务中台,关注数据建设上的重复轮子就是数据中台,关注研发效能建设上的重复轮子就是研效平台。研效平台的目标是实现企业级夸产品夸项目的研发能力复用,避免每个产品线都从零开始。其次,toC产品已经趋向饱和,过去的粗放式研发和人海战术已经不再适用。现在需要节流,通过研发效能的提升来实现更多的产出。最后,许多企业存在“谷仓困局”,各个环节内部可能已经做了优化,但环节之间的协作可能存在大量的流转和沟通成本,影响了全局效率。因此,通过流程优化,打破各个环节之间的壁垒,提升价值流动速度,是研发效能需要关注的重要领域。
上面的幻灯片从软件开发、测试和发布的视角列出了研发效能提升需要关注的问题。其中主要围绕CI/CD实践展开。由于篇幅限制,这里不一一展开,只举几个例子。例如,通过使用全功能的开发环境,可以降低每位开发人员的环境准备时间,并确保环境的一致性。通过使用基于AI的代码提示插件,可以大大提高IDE中代码的开发效率。通过使用静态代码检查工具,可以在代码提交之前及时发现问题。这些实践都可以提高研发效能。
在实际工程实践中,我主张使用MVP(Minimum Viable Product)的思想来提升研发效能。MVP的核心思想是以最低成本展现核心概念的产品策略,通过迭代来完善细节。在研发效能的建设中,我们需要先找到最碍眼的钉子,然后用最简单的解决方案解决问题,并在后续的实践中不断优化和迭代。这样可以避免一开始就追求完美方案,而导致得不偿失的情况发生。
需要特别指出的是,MVP的常见误区是实现了某个功能,但暂时对客户没有实际价值,只有在后续功能出来后才能对客户有用。这不是MVP的概念。MVP追求的是“麻雀虽小五脏俱全”,即实现的功能点可以很小,可以比较简陋,但对客户有价值是必需的。因此,在研发效能的提升中,我们必须确保解决方案能够解决实际痛点,即使一开始的方法可能比较简陋。从产品的角度来看,研发平台本身和一般的软件产品没有本质区别,也需要不断迭代和持续改进。
这里提出了研发效能提升的八个建议。首先,从痛点入手,解决实际问题。其次,从全局切入,关注全局优化而不仅仅是单个环节的优化。第三,关注用户获益,以客户的成功作为衡量研效项目成功的标准。第四,持续改进,不断优化和迭代解决方案。第五,做自己研效平台的第一个用户,站在用户的角度思考问题。第六,双管齐下,同时从自下而上和自上而下推行研发效能提升。第七,避免掩耳盗铃,不要忽视问题的存在。最后,用MVP的思想来推行研发效能提升。
第一点是从痛点入手,解决实际问题。第二点是从全局切入,关注全局优化。第三点是关注用户获益,以客户的成功作为衡量研效项目成功的标准。第四点是持续改进,不断优化和迭代解决方案。第五点是做自己研效平台的第一个用户,站在用户的角度思考问题。第六点是双管齐下,同时从自下而上和自上而下推行研发效能提升。第七点是避免掩耳盗铃,不要忽视问题的存在。最后一点是用MVP的思想来推行研发效能提升。