首页 > 人工智能 > 人工智能 > 用 `small-change` 加速代码审查
Imprint 的普通工程师现在合并的 PR 数量是两年前的 4 倍。太好了。在平均值背后,还有更值得关注的情况:我们有两个团队在同一时期内合并的 PR 数量达到了原来的 10 倍。有一位工程师每周合并的 PR 数量是两年前普通工程师的 25 倍,还有几位也正在接近这个数字。这相当不错,而且从趋势线的斜率来看,我们一年后的平均值将更接近今天的 p90,而不是今天的 p50。更重要的是,我们不仅在交付更多,质量也有所提升:事故数量环比下降了 42%,严重事故环比下降了 78%。我想我们一直都知道质量与速度之间的权衡并不是一个特别有用的框架,但今天这一点已无可否认。
沿着这条路走下来,我们——和其他所有走这条路的人一样——遇到了拉取请求审查的问题。两年前,p50 拉取请求审查大约需要 33 分钟完成,但现在需要约 77 分钟。这里的斜率与合并的拉取请求数量紧密相关。相关程度之高,以至于解决这个问题成了我本周的优先事项之一。
我们解决了!开个玩笑,我们绝对没有解决,但我认为我们目前的做法很有意思,我们称之为 small-change。
本文讨论的工作由 Imprint 的许多人共同塑造和完成,包括 Dan、Joy、Daniel、Lenny、Taylor、Ted 和 Annie 等众多同事。
我们审查拉取请求有四个原因:
在现代开发范式中,我们认为每个问题都有更好的解决方案。但是,我们也希望非常谨慎地做出这些改变。
我们相信,通过找到狭窄、受控的方式来验证新实践,我们就能快速前进。因此,为了迭代出有效的解决方案,我们开发了 small-change 的概念。其工作方式如下:
这花了大约两天的不定期关注来实施和推广,尽管我想我们会长期调整这里的参数。也许永远。
我在上文 4.1 节中提到过这一点,但人工代理审查已成为许多团队一个有趣的瓶颈。这是一个特别棘手的瓶颈,因为它最初看起来像是一个解决方案,但实际上却让事情变得更糟。其模式大致如下:
在每一个进行人工代理审查的案例中,如果团队将精力投入到集中式审查机制、用于处理集中式审查反馈的测试框架循环,以及简单地盖章批准上,他们都会获得更好的结果。
我将简要提及我们减少代码审查量的另一种方法,它以我们集中编排的测试框架 fleet 为核心。(这与 Stripe 的 Minions 类似,但并未特别遵循一次性方法)。我们依赖 fleet 在云端运行的高度受控测试框架中实现和验证软件,并通过独立的评估机制来确定任何给定变更所需的独立审查者数量。对于被评估为安全的变更,该数量可以低至一个(例如,fleet 编写,一个人审查)。
说实话,现在给出有用的结果还为时过早。从早期结果来看,大约 10% 的变更符合小变更的标准。这些变更现在有资格获得非常快速的批准,并且通常都能获得批准,除非它们触发了某个标记,通常是因为涉及安全或资金相关主题。
虽然 10% 是一个很小的比例,但这里的核心概念正在发挥作用,最终成败取决于我们能否在未来几个月内扩大这一比例,同时扩展我们的验证机制使其越来越全面。这最终将取决于我们改进验证的能力,而在低规模复杂性、高领域复杂性的软件中,这确实需要比在高规模复杂性、低领域复杂性的产品中更困难的技术才能实现——在后者中,许多技术(如增量发布)异常有效。(别误会,它们仍然有效,只是当大多数用户具有不同的配置和行为时,它们提供的覆盖范围较小。)
人们对此并非一致感到兴奋,这与我们学习成为优秀工程师的方式有很大不同,重新评估一项长期以来的最佳实践是否已沦为教条,这让人感到不安。当前周期最令人振奋的部分是,我们每周都能重新评估这些伴随我们成长的做法;当前周期最痛苦的部分是,如果我们停止重新评估它们,我们很可能会落后。
转载声明:本文为转载整理,原文版权归原作者及原站点所有。
原文来源:Will Larson
原文作者:Will Larson;如有侵权,请联系管理员删除。