TL;DR

精益思想的核心是消除浪费和持续改进。AI 不会取代这些原则,但它让识别浪费的速度获得显著量级的提升(业界观察常落在数倍到两位数倍数区间,因场景差异显著),让改进建议从”靠经验”变成”靠数据”。本文提供一套可落地的框架:用 AI 识别代码中的 7 种浪费 → 自动化复盘与优化建议 → 可视化价值流瓶颈 → 建立持续改进飞轮。


精益思想核心

七种浪费(Muda)

软件工程中的 7 种浪费

丰田生产系统定义了 7 种浪费,软件工程同样有对应的版本:

制造业浪费 软件工程对应 表现
过度生产 过度设计 为未来需求写代码
等待 等待反馈 CI 排队、Code Review 阻塞
运输 上下文切换 多任务、会议打断
过度加工 镀金功能 用户不需要的功能
库存 代码库存 长期未合并的分支
动作 重复劳动 手动部署、重复测试
缺陷 Bug 返工、修复成本

持续改进的日常实践

不是等到季度复盘才改进,而是每天改进一点点。关键问题:

  • 你今天遇到的最大的 friction 是什么?
  • 什么东西让你说”又浪费了 30 分钟”?
  • 如果每天省 10 分钟,一年就是 40 小时

价值流:需求到交付的完整路径

从”需求提出”到”用户手中”的完整流程。大多数团队的实际情况是:

  • 有效工作时间:可能只有 5-15%
  • 等待时间:50-70%
  • 返工时间:20-30%

💡 关键洞察:优化局部效率往往损害全局效率。让开发人员写代码更快,但如果测试和部署跟不上,只会增加在制品库存。


AI 如何识别软件工程中的浪费

浪费 #1:过度设计(Over-engineering)

识别信号

  • 抽象类/接口比例 > 30%
  • 未使用的参数/方法
  • 循环依赖检测
  • “YAGNI 违规”:为未实现功能预留的扩展点

AI 检测方法:YAGNI 违规是最容易被 AI 放大的浪费——当 AI 生成”为未来需求预留”的代码时,它并不知道哪些扩展点永远不会被用到。SonarQube 的 squid:S1133 规则能标记被注释掉的代码,而 Code Climate 的重构债务指标能捕捉过于复杂的继承层级。检测循环依赖可以用 madge --circular,检测未使用参数则需要跨文件的静态分析——Sourcegraph Cody 的代码智能分析能发现”这个参数在 6 个月前最后一次被调用”的信号。最有效的做法是让 AI 在每次 PR review 时输出”这个方法有哪些扩展点目前没有被调用”——配合项目文档交叉验证,往往能发现 20-30% 的预留代码已经过时。

具体指标

  • 抽象类/接口比例 > 30%
  • 未使用的参数/方法
  • 循环依赖检测
  • “YAGNI 违规”:为未实现功能预留的扩展点

浪费 #2:等待(Waiting)

识别信号

  • PR 平均等待 review 时间 > 4 小时
  • CI 排队时间 > 15 分钟
  • 等待依赖服务响应 > 500ms(高频调用)

AI 检测方法:PR 平均等待时间是软件工程中最容易被量化、也最容易被忽视的浪费之一。GitHub API 可以直接拉取 pull_requestscreated_atreviewed_at 时间戳,Python 脚本两小时跑一次就能建立每日趋势基线。CI 排队时间的检测需要调用 GitHub Actions API 的 workflow_runs,计算 created_atstarted_at 的差值——这个差值往往比 CI 本身执行时间更能反映团队的实际等待成本。依赖服务的响应延迟可以用 Smoke Test 脚本每 5 分钟探测一次,记录 P99 值,当 P99 > 500ms 时触发告警。更进一步,可以让 AI 分析等待时间的规律——是固定在某些时间段(reviewer 的作息规律),还是随机分布(团队协作问题)——帮助区分结构性等待和行为性等待。

浪费 #3:上下文切换(Context Switching)

识别信号

  • 每天会议 > 3 个
  • 同时推进的 WIP 项 > 3 个
  • 代码提交时间碎片化(没有连续 90 分钟块)

AI 分析方法:上下文切换的成本是隐性但巨大的——研究表明,每次切换需要 20-30 分钟才能恢复到深度工作状态。检测每天会议数可以用 Google Calendar API 或 Microsoft Graph API 导出会议数据,配合脚本统计”真正用于编码的时间块”。GitHub 的 commit 历史也是宝库:当一个开发者在同一天内有 5 个以上分散的时间段提交代码,这就是典型的”被打碎的工作日”信号。WIP 项数可以通过 github.repos.issuesin_progress 状态实时统计,当 WIP > 3 时说明团队处于过度并发状态。更进一步,可以用 LLM 分析 commit message 的语义聚类——当一个 PR 的 commit message 涉及 3 个以上不相关的主题(”fix auth” + “update deps” + “refactor db”),说明开发者在多任务切换,AI 应该建议拆成独立 PR。

浪费 #4:代码库存(Code Inventory)

识别信号

  • 存在超过 2 周未合并的分支
  • 未发布的特性开关(feature flags)> 10 个
  • 长期 open 的 PR

AI 识别与检测:代码库存是精益思想中”库存”在软件工程最直接的对应——未完成的代码占用认知空间,但不产生价值。GitHub 的 git branch -a --merged 能快速识别已合并的分支,但真正的问题分支是那些”技术上可以合并但一直没合”的长期分支。feature flag 数量是一个被严重低估的指标:当 flag > 10 时,说明产品策略在不断叠加而没有清理——每个 flag 都是一条代码路径的技术债务。AI 可以用 Sourcegraph 的批量搜索 type:rep group:repo file:\.go$ -pattern:is:archived 找到长期 open 的 PR,结合 PR 的最后活动时间计算”库存年龄”。Mergify 的自动合并规则可以帮助清理:当 CI 变绿超过 24 小时且无 reviewer 反馈时,自动 ping 团队。

浪费 #5:重复劳动

常见场景

  • 手动运行测试套件
  • 重复的数据验证逻辑
  • 复制粘贴的 boilerplate

AI 检测与自动化:重复劳动是最容易被 AI 直接消灭的浪费类型。手动运行测试套件可以用 GitHub Actions 的 on: [push, pull_request] 完全自动化——如果团队还没有做到这一点,第一优先级就是迁移到 CI。重复的数据验证逻辑可以用 ast-grep 搜索”相同的 validation function 被复制到 3 个以上的地方”,然后让 AI 生成一个共享的工具模块。boilerplate 的检测则是 AI 的强项:Code Climate 的复制粘贴检测能发现代码相似度 > 70% 的文件对,Copilot 的 //generated 注释能追踪 AI 生成的模板代码。最有效的做法是让 AI 在每次 code review 时自动输出”这个文件中有哪些 function 与项目中其他文件的相似度 > 80%”。

浪费 #6:返工(Rework)

识别信号

  • PR 平均 review 轮次 > 2
  • 同一文件的多次修改(churn rate)
  • Bug 回归率

AI 分析方法:返工的根源往往是”第一次就没做对”——而 AI 可以帮助在第一次就把事情做对。PR review 轮次 > 2 说明要么需求不清楚,要么实现与预期不符。GitHub 的 PR review API 能追踪每个 PR 的 review 次数和每次 review 距首次提交的时间差,当这个数字 > 2 天时说明团队在来回讨论而不是快速收敛。churn rate(文件在短时间内的修改次数)是预测 Bug 的强信号:当一个文件在 2 周内被修改 > 5 次,它的下一次修改引入 Bug 的概率显著上升——SonarQube 的 churn 指标能自动追踪。Bug 回归率(同一类型的 Bug 在修复后再次出现)是更深层问题的症状,可能是团队缺乏对 Bug 根因的分析,AI 可以辅助生成 post-mortem 模板并追踪修复模式的重复性。

浪费 #7:缺陷逃逸

识别信号

  • 测试覆盖率 < 70%
  • 生产环境 Bug 密度 > 行业基准(每千行代码 0.5 个)
  • 缺陷从发现到修复的平均时间(MTTR)> 24 小时

AI 辅助的缺陷预测:传统的缺陷检测是被动的——Bug 出现后才修复。AI 让主动预测成为可能:GitHub Advanced Security 的代码扫描能基于机器学习对高风险代码路径排序,当一个文件的复杂度指标(圈复杂度 > 15)、churn rate、测试覆盖率三个指标同时触发阈值时,这个文件有 60% 的概率会在下次修改中产生 Bug。Code Climate 的问题优先级排序会优先展示”同时有高复杂度和高 churn”的文件。Sourcegraph Cody 的代码解释功能可以帮助新加入的开发者理解复杂逻辑,减少因误解导致的缺陷逃逸。契约测试(Contract Testing)是防止集成缺陷逃逸的有效手段,GitHub Actions 可以用 Pact Broker 实现全自动的跨服务契约验证。


自动化持续改进:从复盘到自动优化

第一层:自动化数据收集

数据是改进的前提。大多数团队不知道自己有多慢——不是因为没有数据,而是因为数据没有汇聚到同一个地方。

每日自动收集的指标

  • PR 周期时间(创建 → 首次 review → 合并)
  • CI 运行时长与排队时长(分开计算)
  • 开卡但未完成的 WIP 项数量
  • 每个开发者每天的 commit 时间分布(是否碎片化)

实施脚本:GitHub Actions 提供了开箱即用的 workflow_run 事件,可以每晚定时触发一个收集脚本,将当日的指标写入 Google Sheets 或 Grafana 的 InfluxDB。核心 API 调用是 GET /repos/{owner}/{repo}/pulls?state=closed&per_page=100,配合每个 PR 的 timeline API 追踪首次 review 时间。更简单的方式是用 grafana/github-rate 面板——它能直接可视化 PR 周期时间、CI 成功率和排队时间的每日趋势,不需要自己写一行代码。

第二层:自动洞察生成

数据不转化成洞察就是噪音。第二层的核心是让 AI 代替人工去读数据、找规律。

周报生成器:每周一自动运行的脚本,读取上周的 DORA Metrics 趋势图,生成如下结构的周报:

  • 本周周期时间 vs 上周的 delta(红了还是绿了?)
  • Top 3 最慢的 PR(分析:卡在哪个环节?)
  • 本周新产生的代码库存(超过 2 周未合并的分支列表)
  • AI 发现的规律(”周三的 CI 排队时间平均比周一长 40%”)

这类周报的核心价值不是汇报数字,而是触发对话——当 AI 在周报里写”本周有 3 个 PR 等待超过 72 小时才被 review”时,团队才有改进的起点。

第三层:自动优化执行

知道问题和知道怎么改之间,还隔着一层”执行成本”。第三层的目标是把已经被验证的改进措施自动化。

低风险自动修复:不是所有改进都需要人工介入。有些浪费的消除可以完全自动化:

  • 自动 reviewer 分配(Mergify / CODEOWNERS):当 PR 创建时,根据文件路径自动分配对应的 CODEOWNER,消除”找不到人 review”的等待
  • 自动合并 on green:当 CI 通过且无 blocking reviews 时,15 分钟后自动合并,消除”等人工点绿”的等待
  • 自动依赖更新(Renovate):每周扫描一次 dependency 更新,开 PR 并自动合并 patch 版本,减少手动 npm update 的负担
  • 自动关闭 stale PR:当 PR 超过 2 周无活动时,自动发 comment 询问是否仍在推进,7 天后无响应则关闭,减少代码库存

这三个层次对应的是团队改进的三个阶段:先有数据,再有洞察,最后才有自动化的本钱。跳步执行的团队往往在第二个阶段就放弃了——因为没有数据支撑的洞察听起来像直觉,而直觉不如直觉被信任。


价值流的 AI 可视化与优化

绘制价值流图

可视化输出

价值流瓶颈分析与优化

精益 + AI 的实践框架

阶段一:建立基线(第 1-2 周)

目标:知道现在有多慢。这是精益改进的第一步,也是大多数团队跳过的步骤——他们觉得”我们大概知道问题在哪”。但数据会打破直觉,而直觉往往指向的是症状最明显的地方,而不是浪费最严重的地方。

快速启动脚本:用 GitHub API 写一个 50 行的 Python 脚本,两小时内就能跑出第一条基线:

import requests
from datetime import datetime, timedelta

GITHUB_API = "https://api.github.com"
REPO = "your-org/your-repo"
TOKEN = "ghp_xxx"  # 只读 token 即可

headers = {"Authorization": f"Bearer {TOKEN}"}

# 获取过去 30 天所有 closed PR
prs = requests.get(
    f"{GITHUB_API}/repos/{REPO}/pulls?state=closed&per_page=100",
    headers=headers
).json()

for pr in prs:
    created = datetime.strptime(pr["created_at"], "%Y-%m-%dT%H:%M:%SZ")
    merged = datetime.strptime(pr["merged_at"], "%Y-%m-%dT%H:%M:%SZ") if pr["merged_at"] else None
    cycle_time = (merged - created).total_seconds() / 3600 if merged else None
    print(f"PR #{pr['number']}: {cycle_time:.1f}h cycle time")

输出的分布图就是你的基线——找出 P50( median)和 P90,你就知道了”我们通常多快”和”我们最慢的时候有多慢”。

阶段二:AI 辅助诊断(第 3-4 周)

目标:用数据找出真正的瓶颈。第一层的基线告诉你”有多慢”,第二层的任务是告诉你是哪里慢、为什么慢。

这个阶段的核心工具是 Code Climate、SonarQube 和 Sourcegraph Cody——三者结合可以覆盖代码质量、架构债务和代码理解三个维度。

诊断输出

  • Top 5 最慢的 PR:分析这 5 个 PR 共同经历了什么阶段(review 等待?CI 重跑?讨论来回?)
  • Top 5 代码债务文件:按复杂度 × churn 排序,找出”高风险修改区”
  • 价值流瓶颈图:在价值流图上标注每个阶段的平均耗时(见价值流一节)

诊断结果应该回答:我们的时间主要浪费在”等反馈”还是”返工”还是”过度设计”?不同类型的浪费对应不同的改进优先级。

阶段三:自动化改进(第 5-8 周)

目标:把改进措施落地。第一层建立了数据,第二层找到了问题,第三层要把已经被验证有效的改进自动化。

实施优先级

  1. 最高 ROI:减少等待时间
    • 自动 reviewer 分配(CODEOWNERS + Mergify)
    • CI 并行化(GitHub Actions 的 concurrency 限制并行任务数)
    • 自动部署审批(需要 1 个以上的 approve 才部署)
  2. 次高 ROI:减少返工
    • AI 代码预审(Copilot Edits 或 Cody 在 PR 创建时自动 review)
    • 自动化测试覆盖检查(pytest-cov + Codecov 自动追踪)
    • 契约测试防止集成问题(Pact Broker + GitHub Actions)
  3. 长期 ROI:减少过度设计
    • 复杂度监控(Code Climate 仪表板,复杂度超过阈值的文件自动告警)
    • 架构决策记录(ADR,Notion 或 Markdown 文件均可)
    • 定期代码考古(每月一次,2 小时,专门review 高债务文件)

阶段四:持续优化(持续)

目标:让改进成为日常,而不是一次性的项目。第四阶段的核心是建立节奏,让团队不需要刻意记住改进这件事,它就自然发生。

每周 15 分钟改进仪式

  1. 打开 Grafana 仪表板,看本周的 PR 周期时间趋势(5 分钟)
  2. 问:本週最慢的那个 PR,是因为什么?(2 分钟)
  3. 选一个可改进的点(不是”我们要更快”,而是”下周我们要减少 20% 的 review 等待时间”)(3 分钟)
  4. 在 GitHub Project 里建一个 Card,指定 Owner 和截止日期(5 分钟)

这个仪式的关键不在于找到完美的改进点,而在于建立”数据驱动”的团队肌肉记忆。当团队习惯了每周看数据、找问题、定改进,优化的速度会远超大多数竞争对手。


反直觉洞察

洞察 #1:局部优化不等于全局优化

常见错误:让每个开发人员写代码更快。

真相

  • 如果测试跟不上,只会增加库存(未测试代码)
  • 如果部署是手动的,更快开发 = 更快堆积
  • 约束理论:优化非瓶颈环节是浪费

正确做法:先找出并优化瓶颈,再提升其他环节。

洞察 #2:自动化的前提是标准化

常见错误:”我们要自动化所有事情”。

真相

  • 自动化一个低效流程 = 高效地做错事
  • 有些手动步骤是必要的(如安全审查)
  • 先标准化,再自动化

检查清单

  • 这个流程已经稳定了吗?(3个月没变)
  • 手动执行时,不同人的结果一致吗?
  • 失败的代价是什么?(自动化错误可能放大问题)
  • 维护自动化脚本的成本 < 手动执行的成本?

💡 Key Insight

AI 代码生成 = 高效地做错事。自动化一个低效流程,AI 会以更高的速度再犯同样的错误。

洞察 #3:AI 自身也会制造浪费

新类型的浪费

AI 应用 潜在浪费 症状
AI 代码生成 代码膨胀 生成但未被理解的代码
AI 测试生成 测试债务 大量低价值测试
AI 文档 文档漂移 自动生成的过期文档
AI 监控 告警疲劳 太多低信号告警

对策

  • 对 AI 输出设置”消化时间”
  • 要求 AI 生成代码必须通过同样的 review
  • 定期审计 AI 生成的内容质量

洞察 #4:批量大小的反直觉优化

常见错误:频繁提交小 PR,但 review 流程重。

真相

  • 小批量是好的,但交接成本固定
  • 如果每个 PR 需要 2 小时 review,10 个 PR = 20 小时等待
  • 最优批量大小 = f(交接成本, 失败成本)

计算公式:最优批量大小的决策取决于两个变量的平衡——当交接成本(固定)远低于失败成本时,小批量更优;当失败成本随批量大小非线性增长时,大批量反而更优。

举例:假设每次交接(创建 PR、review、合并)固定成本 = 2 小时,PR 失败后的返工成本 = 批量大小的函数(假设每千行代码有 5% 的概率引入一个需要 4 小时修复的 Bug)。当代码行数 = 500 时,返工期望 = 0.05 × 4 = 0.2 小时 « 2 小时交接成本,此时小批量最优。当代码行数 = 5000 时,返工期望 = 0.5 × 4 = 2 小时,接近交接成本,批量大小的选择就需要权衡了。这个公式的实践意义:对于关键路径上的代码(认证、支付、数据模型),宁愿等更长的时间做一次完整 review,也不要频繁切换。

洞察 #5:古德哈特定律在 AI 时代的重现

古德哈特定律:当一个度量成为目标,它就不再是一个好度量。

常见扭曲

  • 度量”代码行数” → 代码膨胀
  • 度量”PR 数量” → 无意义拆分
  • 度量”测试覆盖率” → 测试无价值代码

对策

  1. 用系统度量替代个人度量:度量团队周期时间,而非个人产出
  2. 用结果度量替代活动度量:度量用户价值交付,而非代码提交
  3. 用平衡记分卡:速度 + 质量 + 稳定性一起度量

💡 Key Insight

当一个度量成为目标,它就不再是一个好度量。AI 时代,古德哈特定律会以前所未有的速度应验。


工具链

数据收集层

工具 用途 开源替代
GitHub Insights / GitLab Analytics 基础研发效能数据 -
DORA Metrics (Google) 部署频率、变更前置时间、MTTR、变更失败率 -
grafana/github-rate GitHub 数据可视化 Yes
pytest-cov / Codecov 测试覆盖率追踪 Yes

AI 分析层

工具 用途 配置
Code Climate 代码质量与复杂度 .codeclimate.yml
SonarQube 技术债务检测 自托管
Sourcegraph Cody 代码智能分析 -
GitHub Copilot 代码生成 + 审查 -
ast-grep 结构化代码搜索 sgconfig.yml

自动化层

工具 用途 触发条件
GitHub Actions CI/CD 自动化 push, PR, schedule
Danger PR 自动化审查 PR open/update
Mergify 自动合并规则 check 通过
Renovate 依赖自动更新 schedule

快速启动配置

不想从零搭建?以下是三个工具的最小可用配置,能在一天内跑起来:

.github/workflows/ci-metrics.yml(数据收集层,每天跑一次)

name: Weekly Metrics Collection
on:
  schedule:
    - cron: '0 1 * * 1'  # 每周一凌晨1点
  workflow_dispatch:
jobs:
  collect:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run metrics script
        env:
          GITHUB_TOKEN: $
        run: python scripts/collect-metrics.py

Mergify 配置(自动化层,.mergify.yml)

pull_request_rules:
  - name: Auto-assign reviewers
    conditions:
      - files: src/** # 按路径分配
    actions:
      assign:
        users: [@reviewer-team]
  - name: Auto-merge on green
    conditions:
      - "status-success=CI"
      - "#approved-by>=1"
    actions:
      merge:
        method: squash

Renovate 配置(automerging patch 版本)

{
  "packageRules": [{
    "updateTypes": ["patch"],
    "automerge": true,
    "automergeType": "pr"
  }]
}

结语

精益思想在软件工程中应用了 20 多年,核心始终没变:消除浪费、持续改进、聚焦价值。AI 没有改变这些原则,但它让我们能够:

  1. 更快地发现浪费 — 从季度复盘到实时预警
  2. 更准地识别瓶颈 — 从直觉猜测到数据驱动
  3. 更稳地执行改进 — 从手动检查到自动优化

但这套方法有前提:团队愿意面对真相。数据会暴露问题,而问题往往指向流程、管理、甚至文化。如果你只想要一套”让开发更快”的工具,这篇文章帮不了你。如果你准备好诚实地说”我们在这里浪费了时间”,然后一步步改进,那开始吧。

下一步行动

  1. 今天就选一个指标(建议:PR 等待时间),开始收集数据
  2. 本周内跑一次价值流分析,找出最大的等待点
  3. 下周做一个实验:减少一个浪费源
  4. 一个月后回顾:流效率提升了吗?

“完美不是无可增加,而是无可减少。” — 安托万·德·圣埃克苏佩里


深度阅读时间:约 20 分钟

参考资源