最近在思考的一个普遍性问题,是研发效率怎么度量。在公司里,关于研发效率分析的有提出过如下的一些方法学:

  • 基于精益思想的价值流图分析,通过状态流转时间,分析低效环节以减少时间浪费。
  • 基于迭代开发成本的预估和结果对比。通过故事点的方式来不断校准每个人对工时的评估,以更准确估算迭代耗时。

但是上述方法都还是会比较依赖个人的动作值,比如工时填报,或者更新任务状态。我一直在想有没有是基于客观留下的数据可以分析开发效率的方法,所以如果能够从git commit里面分析出什么东西的话,是会比较客观的。

PR里面有什么?

按照一贯的敏捷实践,我们应该就某一个迭代,或者某一个功能开一个分支,在分支上开发完成后,再通过PR合并到主分支,然后打tag和发布release。

所以如果你从每一个PR中收集数据的话,大概可以收集到下面一些信息:

  • from branch,从分支合并到master的PR,基本上包含了这个迭代/功能的所有代码改动
  • commit,通过提交获得的次数、时间、频率、代码量
  • commit log,commit log是在提交commit的时候可以手工填一些信息的工具,如果能充分利用的话,可以用来做很多有用的事情。比如:在tag里面包含某个issue id(bug/feature/ticket),相关的统计就可以关联到这个issue上的。

要分析什么?

好,暂且假设我们有以上数据了,我们针对开发过程想做什么样的分析呢?我先考虑的是个人项目,再推及到公司项目。

个人项目

分析个人项目的目的,更多是看如何提交自己从想法到功能实现的能力。因为往往是直接接外部需求,或者自己头脑里面有个想实现或者改进的功能。我想考察的是从这个想法开始确定要做之后,到真正做完,中间经历的时长有多长,并且在这个时间段里面,有哪些时间点才是真正推动着事情往前走的(产生价值的时间点)。

除了时间点以外,还想知道这个功能所用的时间长度。因为个人项目往往时间片是不连续的,所以如果能统计平日做开发时间的密集程度,就可以知道自己在什么时间会更闲并且可以完成代码开发;又或者是什么时间写代码的效率最高。

总而言之,有以下一些感兴趣的点:

  • 实现功能的周期
  • 实现功能的实际时长
  • 碎片时间的密度
  • 业余项目的代码产出效率

公司项目

对于公司项目而言。周期相对来说会短一些,两三周一个迭代,更多是希望了解迭代的进展情况,以及可以复盘以了解过程中的问题。另外,开发人员的产出数量、质量也是判断该开发人员绩效的重要参考(当然不是绝对指标)。

迭代里面一般会分为几个阶段:

  • 架构设计
    • 写框架性代码,具体实现可以留空,但表达清楚思路
  • 模块实现
    • 每个具体方法的实现,最终完成可以运行的功能
  • 测试
    • 主要是反复的提缺陷和回归测试
  • 集成
    • 合并其他分支的代码到本分支,并测主流程和影响范围
  • 发布
    • 合并到主分支,打tag并发布

上述的阶段,其实可以通过commit log的一些约定规范来检查出来的。我们可能会关心其时间点,然后通过时间点再找出在这些阶段中间所耗费的时间有多长,同时各个开发人员的产出如何。另一方面,在测试和集成阶段,开发修多少bug,这个也是可以很只管反映了开发者的产出质量的。

因此,在公司项目里面可能会更关注如下信息:

  • 阶段的开始结束时间点
  • 代码产出数量
  • 缺陷产出数量

接下来我打算写一个原型程序从github上抓取这些数据分析一下,看看结果如何。