【研发效能之道】研发流程优化理论

Posted by 王天一 on 2020-02-17

现在再次开始一个新的系列,【研发效能之道】,主要参考《极客时间|研发效率破局之道》,系列内容为其读书笔记与自己的理解、总结

问题

  1. 用户需求从需求分析、产品设计、开发、测试最终流到部署,但最终发布的产品与用户需求偏差却很大。
  2. 产品发布上线时出现大量提交、合并,导致最后时刻出现很多问题,团队成员集体熬夜加班,却将大把的时间花在了等待环境、等待验证上。
  3. 开发提测质量不好,大量压力聚集到测试这一步,导致代码返工率很高。引入单元测试、代码审查,效果却都不明显。

这其实就是团队的研发效率问题,从而会让我们思考如何去提升研发效能

定义

团队能够持续地为用户产生有效价值的效率。包括:有效性、效率、可持续性。简单来说,就是能否长期、高效地开发出有价值的产品

研发效能的提高,需要整个公司在以下方面精心设计:

  • 研发流程。提升整个流程的顺畅度,包括单个部分的顺畅以及各个部分之间传递的顺畅,如使用敏捷、持续集成、分支管理、持续交付、DevOps、团队协同方法论和相关实践
  • 工程方法。研发流程中各关键步骤高效工程方法,包括开发、测试、运维。智能化开发、在移动设备上开发、云原生
  • 个人效能。深度工作、Git、命令行、VIM、工具环境集成,提升每个开发的自身开发效率
  • 管理和文化。学习硅谷管理和文化,尤其是 Facebook 的工程师文化,给出推荐的文化引入和建设方法

研发流程

研发流程的优化涉及到方法论,如瀑布、敏捷、精益、看板。但国内实施的不理想,有个知乎上的前同事回答可参考:

为何谷歌之类大厂程序员认为敏捷开发是瞎扯淡? - 熊节的回答 - 知乎

学习方法论的时候建议使用黄金圈法则:最中间的一个圆是 Why,也就是这个方法论的目标,是要解决一个什么问题;第二个圆是 How,也就是这个方法论的基本原则、指导思想;最外层的圆是 What,也就是这个方法论的具体实践。在使用一个方法论的时候,一定要从内往外看。

  • 中心的目标一般错不了。比如,敏捷的目标就是快速应对变化。
  • 原则的通用性就差一些,你需要在理解的基础上挑选适合自己的。比如,敏捷中有一条原则是“面对面交谈是最好的沟通方式”,就不一定适合你的团队。
  • 具体的实践,就更要小心,切忌生搬硬套。

在引入实践的时候,建议是逐步优化已有的开发流程和框架,甚至只给出原则,让团队成员逐步摸索并最终找到合适的方法。

比如,你可以把一个核心原则通知给团队:“流程中总是有一个核心瓶颈。找到它,并解决它”。通过这样一个基本原则的指导,让具体实践逐步形成,对现有工作的影响,以及受到的阻力都会比较小。

目标一:寻找用户价值

以终为始地来看,我们最终目的是产生用户价值,生存下去。为此,我们经常需要主动去寻找最好的产品形态。只有方向找准了,流程产生的结果才能有效,才能产生用户价值。所以,优化研发流程的第一步,就是提高寻找用户价值的效率。

  • 第一条原则是:衡量每一个时间段成果的标准,应该是价值假设方面的进展。比如,你的团队在一月份开发了 5 个功能,用户反馈都一般。这时,你看不出用户更喜欢什么东西,更讨厌什么东西。而在二月份,你们只开发了一个功能,预计很有用,但收到的用户反馈却是负面的。二月份能明确告诉你,这个假设是错的,让你们在寻找产品符合市场吻合度(Product-Market-Fit)上前进了一大步。
  • 第二条原则是:使用最小可行性产品(Minium Viable Product,MVP)来帮助学习。这里的关键点是,要以探索价值为出发点设计产品,最快地验证你的假设,功能要尽量少,能够使用就可以。具体的方法有数据驱动、A/B 测试、灰度发布等。

目标二:提高用户价值的流动效率

软件研发是一条流水线,里面流动的是一个一个给用户提供价值的功能。有四条基本原则:

  1. 让功能尽快地流动。对开发人员来说,需求需要尽量拆分,每做好一个提交就尽快提交,小步提交持续集成,依赖本地的构建速度、方便的测试环境、自动化持续集成、定位问题的方式
  2. 让节点之间的联动更加顺畅;可以通过对关键流程的自动化、工具之间的网状互联,以及节点之间的融合来实现。在具体实践上,个人代码上线后,在和他人的代码集成时容易出现问题,这时就可以使用流水线来自动化代码集成过程
  3. 节点之间的融合;也是为了保证节点间的联动顺畅。也就是模糊节点间的边界,让功能在节点之间的流动更顺畅。比如,职能团队提供平台和工具,让全栈工程师能够自己处理端到端的工作。比如,测试团队提供测试平台和工具,运维团队提供运维平台和工具,这些平台和工具可以通过服务化自助使用。
  4. 发现整个流程中的瓶颈,并解决它们。

具体的实践有可视化和复盘

在可视化方面,粘上便利贴的白板,或是像 Trello 那样的电子看板就是很好的工具。真正的“看板”是信号卡片,用来表示流水线系统可以增加新的工作项了。通过任务可视化,我们可以直观地看到哪一个环节的任务特别多,卡住了,也就是瓶颈在哪儿

复盘方面,Facebook 做得也很好。他们有一个 SEV 复盘系统,用来记录公司发生的重要事故进行复盘。每个团队也会不定期地复盘,以定位瓶颈问题并提高。敏捷实践中还有retro回顾会议,通过让所有成员提出well/less well/suggstion来回顾并改进存在问题

小结

优化流程,是提高研发效能的第一步。我们应该按照目标、原则和具体实践的顺序学习和使用各种方法论,选择和配置最适合自己团队的工程实践。

Facebook 在流程方面的实践是以实用主义的态度,从原则出发,灵活优化流程。没有很多新方法论的时髦术语,但是很多实践却和这些方法论的原则是一致的,甚至是超前这些方法论的