发布于 

再谈研发效率提升

最近因为一个版本的发布上线,带着团队兄弟们几乎通宵了,见到了凌晨四点武汉的景色。为什么到这么晚,这背后的原因是值得深思的。归根结底,就是研发效率不高,到了临近上线仍出现各种各样的问题。

之前写过两篇有关研发效率的文章《关于增效,需要做好这两点》和《怎样提高开发效率》,我一直认为开发效率的提升是整个开发过程中的重中之重。研发效率不能提高,靠堆人和增加工作时长,只能是指标不治本。本文是回顾和总结,也是新的思考。

首先,下面是之前文章中提到的一些观点:

  • 工具使用
  • 沟通(正向交底、反向交底)
  • 加强代码审查
  • 了解需求背后的意义,找准关键点

研发的效率不是说做的事情越多越好,也不是说测试验证没问题就可以了,可以从三个维度来进行衡量:

  • 有效性
  • 效率
  • 可持续性

有效性

有效性是指我们的代码产出是否解决了问题,是否达到了客户的预期。最近有个项目组就碰到了这样的情况,开发人员非常辛苦,加班加点都按照“要求”把任务完成了,但一发布生产环境,客户就提出各种问题,看似好像是客户在刁难,实际是没能满足客户的诉求,对客户来说,这些辛苦是没有价值的。

效率

效率指的是开发人员的开发速度,同样的一个任务,有的人需要花好几天,有的人几个小时就搞定了,这不光是技能熟练程度的问题,思维更加重要,能够想到最优解,能找到最关键的点进行突破。

可持续性

可持续性分为两个方面:

  • 代码的可扩展性:有良好的代码质量,产品才能持续地迭代,否则等到坏味道太重的时候就会推到重来,好的扩展性取决于在编码的前期要有足够的思考和规划;
  • 可读性:一个团队依靠的是所有成员共同来完成一件事,任何一个开发人员都有可能接触到产品中其他人所写的代码,良好的可读性既方便自己也方便他人。

要能支撑上面的三个维度,需要从下面五个方面进行实践

  • 公司文化
  • 团队的协作实践
  • 个人技能实践
  • 流程优化
  • 分享、降低部门壁垒

公司文化

公司的文化会影响到团队,甚至是个人,老板如果对产品毫不关心,那产品团队是做不好产品的。想要研发团队高效产出,那么在公司层面一定要特别重视研发效率的提升,所有有关提效的行为都应该是被鼓励和支持的。

团队的协作实践

现在几乎很少有单打独斗的时候,基本上都是一帮人合力来完成一件事情,团队是按照前后端的方式进行分组,还是按照功能性来进行分组?不同的团队可能会有不同的选择。也可能会在两者间进行切换。前后端之间怎么沟通协作?多个后端怎么协作做一个事情?需要大家讨论出一个都认可的方式,可以避免后续的很多争论和扯皮。比如我们现在是这么做的:

  • 团队从前后端分组方式调整为按功能性进行分组,目的是每个组可以独立承接任务,有竞争有比较;
  • 前后端协作比较简单,提前定义好接口规范;
  • 后端多人之间协作,在编码前先写空方法,然后进行评审,这样相关人员都大致了解了整体思路。

个人技能实践

任何一个对技术有热情的人,都会想方设法努力提升自己,技术和业务都是如此。一个人的力量是有限的,如果互相之间能取长补短,每个人都会成长的很快。最近的一次周会上,我对团队建议,每个人每天都可以写写总结,如果觉得有收获或者学习到什么新的技能了,可以分享自己的总结给团队其他成员。

流程优化

很多时候,做事的方式换一下,或者步骤做些调整就能带来事半功倍的效果。比如前几年在代码发布时采用 Jenkins 构建容器镜像,然后再针对版本去 Gitlab 中去创建 Tag ,但 Tag 经常会忘记创建,会带来无法在当前版本上进行 Bug 修改的问题。后来将流程改为,先创建 Tag,然后在 Jenkins 中针对 Tag 进行构建,就很好解决了这个问题。

如果某个流程使用起来很别扭,或者会带来一些明显的问题,那就需要思考是否有更好的方式可以替代。流程的顺畅是产出优质软件的关键因素,只有这样才能最大程度地释放开发人员的创造性和积极性。

分享、打破部门壁垒

最近在公司的一个文档库目录中发现了不少介绍公司产品功能的视频教程,视频的录制者当初可能只是作为一项被安排的任务去完成了,但没有去想这些视频对其他的部门或团队是有帮助的,所以直到现在才被“偶然”发现。

每个部门都不应该各自为政,应该是有一个共同的目标和愿景,只是分工不同而已,所以部门间的分享也能够让我们少走弯路,达到效率的提升。

最后说下标准化,要想提升效率就先要知道问题出在什么地方,这就需要有数据来支撑,管理学大师彼得 · 德鲁克(Peter Drucker)曾经说过,“一个事物,你如果无法度量它,就无法管理它”。

销售可以按照销售额来度量,软件开发的度量就非常困难,最根本原因在于,软件开发工作是一项创造性很强的知识性工作,非常复杂且伴随有大量不确定因素。

常见的几个度量的维度是:

  • 工作量:这个是最难的,没有一个标准,只能依赖经验;
  • 质量(Bug 数):质量其实不光是 Bug 数,有可能功能完成了,但代码写的很烂,表名看也没有 Bug,但质量很差,这也是难以衡量的;
  • 任务达成:就是有没有延期,时间谁来定,客户?Leader?开发人员自己?往往也是要依赖经验。

没有统一的标准就会带来很多管理上的问题,比如说:

  • 磨刀不误砍柴工,磨刀的时间很可能会被认为是无效产出,因为在短期内可能不能立竿见影;
  • 某开发人员比较聪明,想各种办法提升了效率,以至于能准时下班,这时 Leader 可能会塞给他更多的任务,会认为之前给的任务是不饱和的;
  • 开发人员都很聪明,如果他们想尽办法给自己或团队带来了效率的提升,却没能换来更多自由时间的支配,那他们又有什么动力去这么做呢?
  • 当最终不得不去 ”996“ 的时候,这便是管理者无计可施之后最后的一剂”良药“。

所以接下来,我更多会去思考有什么方法和方式能尽可能地标准化,做到公平、公正,如果您有什么好的方法,欢迎私信我。