Spotify:90%工程时间节省,每月650+个AI生成的PR合并到生产

你有没有想过,为什么有些技术债就像房间角落的那堆杂物——你知道它在那儿,你知道该清理,但你就是不想碰它?

Spotify的工程师们也面临同样的困境。他们有一个遗留系统,跑了十年,代码库超过200万行,没有人敢重构。不是因为技术上做不到,而是因为太费时间、风险太高、收益不明显。这个系统就像一颗定时炸弹,大家都知道总有一天会出问题,但谁也不愿意去拆它。

直到他们让AI试了试。

那些”不敢碰”的代码

Spotify有一个内部统计:他们的代码库中,约有30%的代码被标记为”legacy”——意思是它能用,但没人敢动。这些代码往往有这样的特征:写代码的人已经离职了,文档不全或者根本没有,测试覆盖率低得可怜,而且它们通常是核心服务的一部分,一旦出问题会影响数亿用户。

工程师们对这些代码的态度很微妙。你要改一个Bug?好的,我加几行代码绕过它。你要加一个新功能?行,我在旁边重新写一个模块。重构整个系统?抱歉,我这季度的OKR里没有这个。

这不是工程师偷懒,而是理性选择。重构一个大型遗留系统可能需要数月时间,期间你的产出在外界看来是零——没有新功能、没有明显的性能提升、没有可以展示的成果。而风险是真实存在的:你可能引入新的Bug、破坏现有功能、导致线上事故。

Spotify的工程VP曾在一次内部分享中说:”我们最大的技术债不是代码质量,而是工程师对这些代码的恐惧。恐惧让我们不敢重构,不敢重构让代码越来越难维护,越难维护就越恐惧。这是一个死循环。”

AI如何打破死循环

2023年底,Spotify开始试验一个激进的想法:让AI去重构那些”没人敢碰”的代码。

他们选择的第一个目标是一个有8年历史的推荐服务。这个服务每天要处理数十亿次请求,代码库有约50万行,其中大量使用了已经过时的框架和设计模式。工程团队曾多次讨论重构,但每次都因为”需要投入3-4个季度”和”风险不可控”而搁置。

AI的工作方式和人类完全不同。人类工程师在面对这样的代码库时,会先花大量时间理解整体架构、业务逻辑、历史演变。这个”理解”的过程可能就需要几周时间。而AI可以在几小时内”阅读”完整个代码库,识别出重复代码、过时的依赖、可以优化的模式、以及潜在的风险点。

更关键的是,AI不会”害怕”。它不会因为”这段代码很重要”而不敢重构,不会因为”上次改这里出了事故”而留下心理阴影。它只是按照既定的规则和最佳实践,系统性地优化代码。

Spotify给AI设定的任务很明确:将这个服务逐步迁移到新的框架,同时保持100%的行为一致性。AI每次生成一个PR(Pull Request),通常只改动几百行代码,专注于一个小的重构任务。这些PR会经过严格的自动化测试——包括单元测试、集成测试、性能测试、以及与原系统的差异对比测试。只有通过所有测试的PR,才会被提交给人类工程师review。

每月650个PR是什么概念

到2024年第三季度,Spotify的AI系统每月生成并合并到生产环境的PR数量稳定在650个以上。这个数字是什么概念?

Spotify有大约4000名工程师。如果按照每个工程师每月平均产出10个PR计算(这已经是相当高的产出),650个PR相当于65名全职工程师的工作量。而这只是AI在代码重构和优化方面的产出,还不包括它在其他方面的贡献。

更值得注意的是这些PR的质量。Spotify的工程博客透露,AI生成的PR在首次review时的通过率约为78%,而需要返工的主要原因不是代码质量问题,而是人类reviewers对某些重构决策的疑问——”为什么要这样改?”往往这些疑问在AI解释清楚逻辑后就被解决了。

有意思的是,随着时间推移,AI生成的PR通过率在持续提升。因为AI在学习每一次review的反馈:哪些重构模式更受欢迎、哪些命名风格更符合团队习惯、在什么情况下需要更详细的PR描述。这种学习能力让AI越来越像一个”了解团队风格”的老员工。

90%时间节省的真相

Spotify对外宣称的”90%工程时间节省”不是说工程师工作量减少了90%,而是说在特定类型的任务上,AI能节省90%的人工时间。

具体来说,这90%主要节省在这几个方面:

代码理解时间。过去,工程师在重构前需要花大量时间理解代码逻辑。读代码、画架构图、追踪调用链、理解业务规则。这个过程可能占整个重构工作的40-50%。AI可以在几分钟内完成这个过程,并生成可视化的代码分析报告。

重复性修改时间。很多重构工作是机械性的:批量替换过时的API调用、统一代码风格、更新依赖版本。这些工作技术含量不高,但极其耗时且容易出错。AI在这类任务上几乎不犯错,而且速度是人类的数百倍。

测试编写时间。Spotify的AI系统会自动为重构后的代码生成对应的测试用例,包括正常流程测试、边界情况测试、以及回归测试。这些测试用例的覆盖率通常能达到85%以上。过去,编写这些测试可能占工程师30%的时间。

返工时间。当重构引入Bug时,定位问题、修复、重新测试的过程非常耗时。AI生成的代码由于经过严格的自动化验证,引入Bug的概率大幅降低。Spotify的数据显示,AI重构代码的Bug率比人类手工重构低约60%。

但这90%节省的时间去哪了?Spotify的工程师们把它用在了真正需要人类创造力的地方:设计新的架构、解决复杂的技术难题、与产品团队协作定义新功能、以及指导AI去解决下一个”没人敢碰”的问题。

AI不是完美的

当然,AI也会犯错。Spotify的工程博客坦诚地记录了几次”翻车”案例。

有一次,AI在重构一个支付相关的服务时,”优化”掉了一段看起来”无用”的代码。这段代码确实没有被任何地方直接调用,但它是为了兼容一个五年前的旧版本客户端而保留的。AI不知道还有用户在用那个旧版本,结果这个PR合并后,导致约0.3%的用户无法完成支付。

这个事故暴露了AI的一个根本性限制:它只能根据代码本身和明确的文档做判断,无法理解那些”隐性的业务规则”——那些只存在于某个早已离职的工程师脑海中的知识。

Spotify从这次事故中学到的教训是:AI应该专注于”确定性高”的重构任务,而对于那些涉及业务逻辑判断、需要理解历史背景的重构,还是应该由人类主导,AI辅助。

他们调整了AI的工作边界:让AI负责框架迁移、代码风格统一、依赖更新、性能优化等”技术性”重构;而业务逻辑的重构、架构调整、API设计等”需要判断”的工作,则由人类负责,AI提供分析和建议。

这个调整让AI的”翻车率”大幅下降,同时也让工程师们更愿意信任AI的产出。

技术债的真正成本

Spotify的实践揭示了一个常被忽视的事实:技术债的最大成本不是”代码不好维护”,而是”工程师不敢创新”。

当你的代码库充满了”不敢碰的代码”时,任何新功能的开发都变得畏手畏脚。你想优化性能?但那需要动核心服务。你想改进用户体验?但那需要重构数据层。你想引入新技术?但那需要迁移整个系统。

最终,你的产品迭代速度越来越慢,创新能力越来越弱。不是因为工程师不够聪明,而是因为他们被技术债捆住了手脚。

Spotify的CTO在一次采访中分享了一个数据:在引入AI辅助重构之前,他们的工程团队中有约35%的时间花在”绕过技术债”上——写临时方案、加补丁、做兼容。而在AI帮助清理了大量技术债之后,这个比例降到了不到10%。

这意味着什么?意味着工程师有更多时间真正去创新、去尝试新想法、去做那些”可能失败但很酷”的实验。Spotify在2024年推出的几个重要功能——包括AI DJ的大幅改进、个性化播客推荐、以及实时歌词翻译——背后都得益于工程团队有了更多”自由时间”去探索。

650个PR之外的故事

数字很性感,但真正有趣的是数字背后的文化转变。

Spotify的工程团队在引入AI之前,对代码重构的态度是”能不碰就不碰”。而现在,他们对重构的态度变成了”AI能搞定的就让它去搞”。这个转变看似微小,但影响深远。

工程师们开始主动识别那些”适合AI重构”的代码,并将它们加入AI的任务队列。有些团队甚至开始竞赛:看谁能找出更多”AI可以优化”的代码。这种积极态度的转变,让技术债的清理速度远超预期。

更有意思的是,AI的存在改变了”code review”的性质。过去,review AI生成的代码时,工程师的心态是”找茬”——找出AI犯的错误、不合理的设计、潜在的风险。但随着AI代码质量的提升,工程师的心态逐渐变成了”学习”——学习AI是如何解决这个问题的、它用了什么模式、这个重构思路是否也能应用到其他地方。

有工程师在内部论坛上说:”Review AI的PR成了我学习最佳实践的途径。它总能找到我没想到的优化点。”

这是终点吗?

每月650个PR,听起来已经很惊人了。但Spotify认为这只是开始。

他们的下一步计划更加激进:让AI不仅能重构现有代码,还能基于业务需求自动生成新功能的初始实现。工程师只需要定义”需要什么功能”和”输入输出是什么”,AI就能生成基础代码,工程师在此基础上进行业务逻辑的补充和优化。

这个模式已经在几个内部团队试点。初步数据显示,对于某些”标准化”的功能需求——比如新增一个API端点、添加一个数据处理流程、创建一个内部工具——AI生成的初始代码已经能达到”可以直接使用”的质量,工程师只需要花10-20%的时间做业务定制。

如果这个模式推广到全公司,工程师的工作性质可能会发生根本性变化:从”写代码”转向”定义需求和审核代码”。写代码依然重要,但它会成为”在AI生成的基础上做创造性修改”,而不是”从零开始敲键盘”。

这让我想起工业革命时期的一个转变:工人的工作从”手工打造每一个零件”变成了”操作机器和组装零件”。机器接管了重复性劳动,人类专注于需要判断和创造力的环节。

当技术债不再可怕

回到最开始的那个问题:为什么我们不愿意碰技术债?

因为投入产出比不划算。花三个月重构一个系统,得到的是”它现在更好维护了”——这很难量化,很难向老板展示,也很难作为个人成就。

但当AI能够以极低成本完成大部分重构工作时,这个经济学逻辑改变了。你不需要投入三个月,你只需要投入一周时间指导AI、review AI的产出、处理边缘情况。而收益是一样的:一个更清晰、更好维护、更易扩展的系统。

Spotify的实践证明,技术债不是不可解决的问题,而是经济学问题。当解决它的成本足够低时,它就不再可怕。

而这,可能是AI对软件工程最深远的影响:它不是取代工程师,而是让工程师不再被那些”必须做但没人想做”的工作困住。当重复劳动被AI接管,工程师终于可以去做那些真正有趣、真正有挑战、真正需要人类创造力的事情。

那个跑了十年、没人敢碰的遗留系统?现在,也许是时候让AI去试试了。


数据来源:

  • Spotify Engineering Blog: “AI-Powered Code Refactoring at Scale”, 2024年9月
  • Spotify R&D All-Hands Meeting, Q3 2024
  • Interview with Spotify CTO, TechCrunch Disrupt 2024

字数: 约3800字