其他
当已上线系统「能跑但越来越慢且纠缠」时…
适用于已有可运行代码库变慢变乱、需要按证据分阶段提速并恢复清晰边界的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 54/100 ×0.15
适用场景
当已上线系统「能跑但越来越慢且纠缠」时,通用
解决思路
- 核心原则:先测量再优化,先固定行为再重构——由 profiler 和安全网决定,而不是直觉。
- 核心原则:未测量优化会针对错误的 97% 代码;没有固定行为安全网的重构是赌博,不是改进。
- 核心原则:按阶段排序、在每个决策点向用户提问,并把结果记录到项目 docs/ 文件夹,以便跨会话恢复。
- 旅程地图:Phase 1 用 working-with-legacy-code,回答行为是否被固定且性能是否被测量,创建 docs/PERFORMANCE.md + docs/TECH-DEBT.md,扩展 docs/TESTING.md,是 GATE。
- 旅程地图:Phase 2 用 clean-architecture,回答依赖是否仍指向内部,扩展 docs/ARCHITECTURE.md。
- 旅程地图:Phase 3 用 software-design-philosophy,回答模块是否够深,扩展 docs/TECH-DEBT.md。
- 旅程地图:Phase 4 用 refactoring-patterns,回答能否用命名且保持行为的方式重塑热点路径,扩展 docs/TECH-DEBT.md + docs/TESTING.md。
- 旅程地图:Phase 5 用 system-design,回答测量负载显示的瓶颈与最便宜修复,扩展 docs/PERFORMANCE.md + docs/ARCHITECTURE.md。
- 旅程地图:Phase 6 用 ddia-systems,回答数据层是否是瓶颈——查询、索引、隔离、派生数据,扩展 docs/ARCHITECTURE.md + docs/PERFORMANCE.md。
- 旅程地图:Phase 7 用 release-it,回答依赖慢或宕机时是否仍快且稳定,创建或扩展 docs/RELIABILITY.md。
- 旅程地图:Phase 8 用 pragmatic-programmer,回答停止后哪些预算和习惯能保持快和干净,扩展 docs/PERFORMANCE.md + docs/TECH-DEBT.md + docs/TESTING.md。
- Operating Rule 1 Resume first:先读 docs/ARCHITECTURE-OPTIMIZATION-PLAN.md 和 Journey Map 中每个 artifact。
- Operating Rule 1:若 tracker 存在,用 3-5 行总结旅程状态并询问进入哪个阶段;用户确认入口后完成,有 tracker 的旅程是恢复,绝不重启。
- Operating Rule 2 Intake on first run only:无 tracker 时先运行 Intake,然后创建 docs/ARCHITECTURE-OPTIMIZATION-PLAN.md,并将每个阶段状态标为 pending | in-progress | awaiting-evidence | done | deferred: reason | skipped: reason。
- Operating Rule 2:当 tracker 存在且用户确认阶段计划后完成。
- Operating Rule 3 Phase entry:宣布该阶段做什么、强制什么决策、产出什么 artifact、大致工作量。
- Operating Rule 3:提供 proceed / skip / defer;标记为 GATE 的阶段可以 deferred,绝不能 skipped;用户选择 proceed 时把阶段标为 in-progress。
- Operating Rule 4 Skill invocation and fallback:加载该阶段的 skill 并使用它;每个阶段的 Invoke 行按 slug 命名 skill,用该 skill 运行阶段。
- Operating Rule 4:若 skill 不可用,提供 npx skills add wondelai/skills/<slug> --global;若用户拒绝,则按该阶段 Brief 运行最小可行方法,并说明当前模式。
- Operating Rule 5 In-phase decisions:提出 Decide with the user 下的每个问题,给具体选项和你的建议;把选择记录到 tracker 的 Key Decisions;静默决策是缺陷。
- Operating Rule 6 Phase exit:写 artifact 前展示草稿供签核;批准后写入或扩展 docs/ 文件,更新 tracker 的 status、Key Decisions、Next Actions;文件写入且阶段行显示 done 时完成。
- Operating Rule 7 Artifact discipline:写前先读;仅在文件缺失时创建,否则扩展——添加或更新你的章节,保留其他人的章节;docs/ 下文件用 UPPERCASE。
- Operating Rule 7:每条建议落成 checkbox 或带 owner 与 priority 的表格行;首次创建 docs/ 文件时参考 references/artifact-templates.md,先按完整 skeleton 创建所有章节标题,再填写本阶段命名的章节。
- Operating Rule 8:绝不优化未测量的东西,绝不重构未固定行为的代码。每个减少已测量基线的变更都要引用该基线,并进入 PERFORMANCE.md Optimization Ledger 记录 before/after;没有移动数字的就回滚,不保留。
- Operating Rule 8:Resilience 与 gating 工作——timeouts、breakers、bulkheads、pagination、CI gates——由其自身阶段的 Done-when 判断,而不是由延迟 delta 判断。
- Operating Rule 8:结构变更只触碰 Safety Net Map 中固定的代码,保持行为,并放入仅结构提交,与行为和优化提交分开。
- Intake 问题 1:问系统做什么,以及「太慢」的代价是什么——流失用户、SLA 违约、基础设施账单。
- Intake 问题 2:问目前证据是什么——APM traces、slow-query logs、p95 latencies、云账单,还是只有抱怨;只有抱怨意味着先做 instrumentation。
- Intake 问题 3:问哪些流程或 endpoints 最痛,以及哪些模块实现它们。
- Intake 问题 4:问是否存在自动化测试且绿色;未固定热点路径要先固定。
- Intake 问题 5:问技术栈——语言、框架、ORM、数据库、缓存——以及运行在哪里;这决定 Phase 5-6。
- Intake 问题 6:问真实负载数字——QPS 平均与峰值、数据量、增长率;按数字定容量,不靠恐惧。
- Intake 问题 7:问现在想完成旅程的多少;Phase 1-4 让变更安全干净,5-6 让它快,7-8 保持。
- Skip heuristics:当结构良好且痛点纯性能时,把 Phase 2-3 压缩为 audit-only;记录审计发现并把阶段标为 done,注明 audit only, no changes。
- Skip heuristics:仅当之前旅程的 docs/RELIABILITY.md Integration-Point Audit 可验证为最新时跳过 Phase 7;检查文件,不要假设。
- Skip heuristics:绝不跳过 Phase 1——没有基线的优化是猜测,没有安全网的重构是赌博。
- 创建 docs/ARCHITECTURE-OPTIMIZATION-PLAN.md 模板并确认计划;当 tracker 存在、每个阶段有状态且用户确认计划后完成。
- Phases 总则:按列出的顺序运行阶段,每个阶段假设前一阶段 artifact 已存在;先结构后速度是刻意的,Phase 2-4 让热点路径安全且易改,使 Phase 5-6 优化变成小 diff 而非手术。
- Phases 总则:任何阶段都可在 Operating Rules 下进入、跳过或延迟,但 Phase 1 是总 gate,且是两个独立网:固定行为解锁 Phase 2-4,记录基线解锁 Phase 5-6,所以结构工作不必等待需数周收集的 profile。
- Phases 总则:当 Phase 1 profile 显示数据库占主导时,Phase 5 和 6 可交换——先修 N+1 或缺失索引,再加缓存,这是本 skill 的 cheapest-first 法则。
- Phases 总则:从 Brief 运行任何阶段时,若组成 skill 未安装,先读 references/methods.md;它包含每个阶段的完整方法、checklists、公式和启发式,Brief 只是摘要。
- Phase 1 Purpose:让后续每个变更双重可证明——行为由测试固定,性能由数字固定;任何阶段都不碰未固定行为代码,也不优化未测量路径。
- Phase 1 Brief 行为:无测试的代码就是 legacy code;cover and modify,绝不 edit and pray。找出热点路径上的 change points,在最无侵入的 seam 打断 inline dependencies:Parameterize Constructor 带 production default;对单个埋藏调用用 Extract and Override。
- Phase 1 Brief 行为:写 characterization tests 拍摄实际行为——断言一个错误值,读失败信息,固定真实值。
- Phase 1 Brief 性能:接触任何东西前先 profile——瓶颈很少在直觉指向处。
- Phase 1 Brief 性能:在真实数据量下记录每个热点流程的 p50/p95/p99 latency、throughput 和资源使用;dev-database 的计时会撒谎。
- Phase 1 Brief 性能:按 Gregg 的 USE 方法逐资源工作:CPU、memory、disk、network、connection pools 的 Utilization、Saturation、Errors。
- Phase 1 Brief 性能:为每个指标设预算,让 done 是数字而不是感觉。
- Phase 1 Invoke:用 working-with-legacy-code skill,传入 intake 的热点路径模块;要求给出 seams 和最小 characterization-test 集,用来固定每个待优化流程的当前行为;然后捕获这些流程的 profiler 或 APM 基线。
- Phase 1 Decide with user 1:确认范围内的热点路径——来自测量痛点,不是怀疑。
- Phase 1 Decide with user 2:每个指标的预算,例如 checkout p95 < 500ms,以及记录工具(profiler、APM、load test),使 before/after 数字可比。
- Phase 1 Decide with user 3:characterizing 时发现的 bugs:固定当前行为并 ledger,绝不静默修复——调用方可能依赖怪癖。
- Phase 1 Artifact:扩展 docs/TESTING.md 的 ## Safety Net Map 和 ## Characterization Backlog。
- Phase 1 Artifact:创建 docs/PERFORMANCE.md,包含 ## Baselines & Budgets、## Load Reality、## Profile Findings、## Optimization Ledger。
- Phase 1 Artifact:创建或扩展 docs/TECH-DEBT.md 的 ## Debt Ledger 和 ## Sprout / Wrap Register,记录按现状固定的 bugs 和未测试宿主。
- Phase 1 Artifact:更新 tracker。
- Phase 1 Done when:每个范围内流程都有固定行为且 suite green,解锁 Phase 2-4;同时有记录基线和预算,解锁 Phase 5-6。
- Phase 1 Done when:分开记录这两个网;profile 仍在收集时停在 awaiting-evidence,并用 Next Actions 行记录,而不是阻塞结构阶段。
- Phase 2 Purpose:恢复代码增长中丢失的 Dependency Rule——混合关注点让变更危险,也让慢的部分无法独立优化。
- Phase 2 Brief:源依赖指向内部:Frameworks → Interface Adapters → Use Cases → Entities;内层不得命名外层。
- Phase 2 Brief:在增长代码库中 drift 很具体:业务逻辑 import ORM,controllers 计算 domain rules,vendor SDK 到处调用。
- Phase 2 Brief:映射实际依赖图并列出 violations;把热点路径业务规则提取到 framework-free use cases,放在 owned interfaces 后面(Dependency Inversion),这也让 Phase 5-6 能在边界处插入 cache 或 queue 而不做手术。
- Phase 2 Brief:只在真实 volatility 处画完整边界(DB、external services、delivery);其他地方 collapse ceremony layers——方向重要,不是文件夹数量。
- Phase 2 Invoke:用 clean-architecture skill,传入 intake 的 module map 和 stack;要求 dependency graph、每个业务逻辑命名 framework/ORM/vendor 的 violation、热点路径 use cases 的提取计划,并标出哪些边界值回成本。
- Phase 2 Decide with user:这次把边界推到多远——热点路径优先,绝不大爆炸重分层;哪个 vendor 先包在 owned interface 后;哪些 violations 现在修,哪些 ledger。
- Phase 2 Artifact:扩展 docs/ARCHITECTURE.md 的 ## Layer Map & Dependency Rule(violation | location | fix | status)和 ## Decision Log;更新 tracker。
- Phase 2 Done when:依赖图已映射,每个 violation 是 tracked row,热点路径业务规则在无框架测试中运行,suite green。
- Phase 3 Purpose:削减复杂度税——增长的代码库积累 shallow classes 和泄漏决策,每个都在拖慢代码前先拖慢团队。
- Phase 3 Brief:Module depth = functionality ÷ interface complexity。合并总是一起走且共享状态的 shallow pass-through classes。
- Phase 3 Brief:每个设计决策恰好隐藏在一个地方——information leakage(一个决策反映到多个模块)是头号 red flag;用按 knowledge 组织的模块替代 temporal decomposition(按执行顺序组织的模块)。
- Phase 3 Brief:跨层的 same-abstraction pass-throughs 表示某个边界没有值回成本。
- Phase 3 Brief:这是 tactical→strategic flip:现在投资 10-20%,让后续每个阶段少碰文件;consolidation 也折叠热点路径上的 call-chain ceremony,但理由是 readability,不是纳秒。
- Phase 3 Invoke:用 software-design-philosophy skill,传入 Phase 2 映射的 modules;询问哪些 classes 是 shallow、哪个决策跨模块泄漏、以及整合成更深模块和更小接口的计划。
- Phase 3 Decide with user:哪些 consolidation 现在做、哪些 ledger——防止过度合并真正无关的关注点;团队往后采用的设计 conventions。
- Phase 3 Artifact:扩展 docs/TECH-DEBT.md 的 ## Smell Inventory(shallow-module 与 information-leakage 条目及已应用的 consolidation)和 ## Adopted Conventions;更新 tracker。
- Phase 3 Done when:每个 shallow-module cluster 已整合或作为 Smell Inventory 行 ledger 并带 fix;每个识别出的 leaked decision 已整合或成为 Smell Inventory 行;suite green。
- Phase 4 Purpose:用命名且保持行为的转换重塑即将优化的代码——先干净,再快,因为无法安全修改的东西无法安全优化。
- Phase 4 Brief:每个 smell 映射到命名 refactoring:Extract Method 用于 comment-sized blocks;Replace Nested Conditional with Guard Clauses;Replace Conditional with Polymorphism;Introduce Parameter Object;Replace Temp with Query。
- Phase 4 Brief 工作流:tests green → 一次 transformation → tests green → commit;测试红则 revert,不是 debug。
- Phase 4 Brief:顺便纳入 clean-code 纪律:命名揭示意图,函数在一个抽象层只做一件事,不返回 null,错误携带 operation 和 state context。
- Phase 4 Brief:Preparatory Refactoring 是通往 Phase 5-6 的桥:每个优化前,先让变更容易(restructure),再做容易的变更(optimize)——分开提交。
- Phase 4 Invoke:用 refactoring-patterns skill,传入热点路径 modules 和 Phase 1 tests;要求命名每个 smell、引用 transformation,并一次应用一个,每次之间跑测试。
- Phase 4 Decide with user:范围——这次处理哪些 smells,哪些 ledger;哪个 upcoming optimization 值得先在插入点做 Preparatory Refactoring;重构后的模块是否加入 docs/TESTING.md 的 CI gate list。
- Phase 4 Artifact:扩展 docs/TECH-DEBT.md 的 ## Smell Inventory(smell | location | refactoring | status);扩展 docs/TESTING.md 的 ## CI Gates,加入提升到 gate list 的模块;更新 tracker。
- Phase 4 Done when:目标 smells 显示命名 refactoring 和 done / ticketed 状态,tests green,结构提交不含行为变更。
- Phase 5 Purpose:把优化努力花在 profile 显示的时间所在,按 cheapest-first 顺序,用真实数字定容量。
- Phase 5 Brief:Amdahl's law 限制每个收益:总加速受被优化部分实际占用时间比例限制——对 5% 请求做 10× 只省 4.5%。
- Phase 5 Brief:由 profile 而不是 code review 选目标。用 back-of-envelope 估算负载:QPS = daily-active-users × actions/day ÷ 86,400,峰值 2-5× 平均;对照预算确认差距。
- Phase 5 Brief 修复顺序:先算法(O(n²) 循环或逐项 chatty I/O 胜过任何基础设施),再垂直 headroom,再 cache-aside 带 TTL 和显式 invalidation 用于读多路径(测量 hit rate——冷缓存是纯开销),再用 message queue 把慢工作移出请求路径(Little's law:in-flight requests = arrival rate × latency,所以降低 latency 也是容量修复),再用 read replicas——只有有证据才 shard。
- Phase 5 Brief:每次变更后重新测量;保留移动数字的,回滚不移动的。
- Phase 5 Invoke:用 system-design skill,传入 Phase 1 profile 和 intake 的负载数字;询问哪个组件先瓶颈、针对测量差距的最便宜有序动作列表、以及你明确还不需要的 machinery。
- Phase 5 Decide with user:哪些 moves 现在 ship,哪些 defer 并写下 trigger number;如果有,第一个移到 queue 后的 workload;每个 cached path 的 invalidation rule——什么事件使哪个 key 失效。
- Phase 5 Artifact:扩展 docs/PERFORMANCE.md 的 ## Profile Findings 和 ## Optimization Ledger(change | before | after | verdict | date);扩展 docs/ARCHITECTURE.md 的 ## Decision Log(每个 adopt/defer 带 trigger)和 ## System Context,后者引用 PERFORMANCE.md ## Load Reality 而不是重复数字;更新 tracker。
- Phase 5 Done when:瓶颈由 profile 命名,每个 move 有 before/after 进入 ledger 或带 trigger 被 defer,且没有采用的 move 未能击败基线。
- Phase 6 Purpose:数据库通常是嫌疑人——大多数测量的慢是查询,大多数正确性债是隔离假设;两者都按证据修。
- Phase 6 Brief:读 query plans,不是 ORM code。经典问题:N+1 queries(每行一次——batch 或 join;ORM 会静默生成)、真实访问路径上缺失 indexes(EXPLAIN 慢查询;给 predicate 和 sort columns 建索引,但每个 index 都收写入税)、无界 result sets(每个 list 都分页)、宽表上用 SELECT *、深 offset 分页(用 keyset)。
- Phase 6 Brief:存储引擎在读写间权衡(LSM 写吞吐 vs B-tree 读延迟)——买硬件前先把模型匹配访问模式。
- Phase 6 Brief 并发正确性:大多数数据库默认 read-committed 或 snapshot,不是 serializable——read-then-write 路径会出现 write skew;在 invariant 要求处显式加锁(SELECT ... FOR UPDATE)或使用 serializable transaction。
- Phase 6 Brief:第二种读取模式(search、analytics、feeds)才值得用 CDC 保持同步的 derived data——绝不 dual writes;来自 Phase 5 的 replicas 强制刻意处理 read-your-writes。
- Phase 6 Invoke:用 ddia-systems skill,传入 Phase 1 profile、Phase 5 findings 和 intake 的 database;如果还没有查询级来源,先启用一个(pg_stat_statements、auto_explain、slow-query log)——这是 Phase 1 instrumentation 被延迟,不是猜测的理由。要求 query-plan audit(N+1s、缺失 indexes、无界读取)、你路径上实际默认 isolation level 及其 anomalies、以及按 workload 的模型和引擎匹配。
- Phase 6 Decide with user:加哪些 indexes,权衡写入成本;哪些路径用 locks、serializable transactions 或容忍 anomalies;是否任何 workload 值得第二个 datastore 并由 CDC 同步。
- Phase 6 Artifact:扩展 docs/ARCHITECTURE.md 的 ## Data & Storage Decisions 和 ## Decision Log;扩展 docs/PERFORMANCE.md 的 ## Profile Findings 和 ## Optimization Ledger,加入 query before/afters;更新 tracker。
- Phase 6 Done when:慢查询已修且有测量 before/after,范围内每个 list endpoint 都分页(其余成为 Debt Ledger 行),isolation level 已记录且风险路径已加锁,任何 derived data 都有定义好的 sync mechanism。
- Phase 7 Purpose:快系统若在慢依赖下崩溃就不算快——失败时的 latency 是性能属性。
- Phase 7 Brief:Integration points 是头号杀手,慢响应比没有响应更糟:一个挂起依赖会耗尽线程和池,日志里什么都没有。
- Phase 7 Brief 不可妥协:每个 outbound call 都有 connect + read timeouts(timeout 是 latency budget);关键依赖上有 circuit breakers(fail fast 胜过等待);bulkheads 让一个慢依赖不能抽干共享池;retry 带 exponential backoff 和 jitter(朴素 retry 会在依赖将死时把负载三倍化);对 logs、temp data、caches 做稳态清理,避免无限增长。
- Phase 7 Brief:按 endpoint 接 RED metrics(rate、errors、duration),并按症状告警(p95 over budget)——Phase 1 budgets 变成生产 guardrails,而不是一次性快照。
- Phase 7 Invoke:用 release-it skill,传入 intake 的 outbound dependencies 和 Phase 1 budgets;要求从流程 latency budgets 推导 timeout 值、breaker 与 bulkhead 放置、以及 RED-metrics 加 symptom-alert 设计。
- Phase 7 Decide with user:每个依赖的 timeout 和 breaker thresholds,与流程预算绑定;哪些依赖获得专用池;当非关键依赖宕机时每个核心流程如何降级。
- Phase 7 Artifact:创建或扩展 docs/RELIABILITY.md 的 ## Integration-Point Audit(dependency | timeout | circuit breaker | bulkhead | retry policy | status)、## Query & Resource Findings、## Health Checks & Metrics;更新 tracker。
- Phase 7 Done when:范围内每个 outbound call 都有处于其流程预算内的 timeout(范围外成为 Debt Ledger 行),关键依赖有 breakers 和 bulkheads,无界 result sets 和阻塞线程记录在 ## Query & Resource Findings,RED metrics 与 symptom alerts 在生产守护 Phase 1 budgets。
- Phase 8 Purpose:让收益永久化——回归会一个个无辜 commit 地到来,除非有 gate 抓住它们。
- Phase 8 Brief:把每个 Phase 1 budget 变成 CI gate:在热点路径上做 perf tests 或 query-count assertions,p95 预算违规时像测试失败一样让 build 失败。
- Phase 8 Brief:DRY 是关于 knowledge:同一规则在两处计算会 drift——同一查询从两层发出既是 bug 农场也是性能税。
- Phase 8 Brief:Broken Window Theory:第一个未 review 的慢查询或跳过的 index 要立即修或开 ticket,绝不留下成为环境性腐化。
- Phase 8 Brief:Reversibility:vendors 和 infrastructure 放在 owned interfaces 后面,让下一次优化——换 cache、换 queue——保持一周工作而不是重写。
- Phase 8 Brief:设置每轮迭代的 debt budget 并写下 conventions;由 ledger 而不是记忆承载 deferred 内容。
- Phase 8 Invoke:在触及模块中用 pragmatic-programmer skill;要求 duplicated-knowledge hits(包括重复查询和规则)、未跟踪 TODOs 和 broken windows、以及性能预算的 CI-gate 设计。
- Phase 8 Decide with user:哪些 budgets 成为 blocking CI gates,哪些成为 dashboard alerts;每轮迭代的 debt budget;broken-windows 政策——什么现在修,什么开 ticket。
- Phase 8 Artifact:扩展 docs/PERFORMANCE.md 的 ## Baselines & Budgets(标记每个 budget 的 gate);扩展 docs/TECH-DEBT.md 的 ## Debt Budget & Broken-Windows Policy 和 ## Adopted Conventions;扩展 docs/TESTING.md 的 ## CI Gates;更新 tracker。
- Phase 8 Done when:每个热点路径 budget 是 CI gate 或 owned alert,duplicated knowledge 已修或 ledger,conventions 已写下。
- Optional Phases:当热点路径之外可读性差、整个代码库需要命名/函数/错误处理 pass 时,加 clean-code,扩展 docs/TECH-DEBT.md 的 ## Smell Inventory、## Adopted Conventions。
- Optional Phases:当边界持续与业务语言冲突、模块在 domain 不分裂处分裂时,加 domain-driven-design,扩展 docs/ARCHITECTURE.md 的 ## Bounded Contexts & Context Map、## Domain Glossary (Ubiquitous Language)。
- Optional Phases:当测量到的慢在浏览器——页面加载、LCP、阻塞资源——而不是后端时,加 high-perf-browser,扩展 docs/METRICS.md 的 ## Baselines & Targets、docs/WEBSITE.md 的 ## Audit Findings。
- Optional Phases:当多个团队拥有系统、模块边界必须与团队边界对齐(Conway)时,加 team-topologies,扩展 docs/OPERATIONS.md 的 ## Team Structure。
- Optional Phases:遵循同样 operating rules——像核心阶段一样加载并使用所列 skill;在 Add-when 条件首次成立处插入。它们没有内联 Brief:standalone 时,clean-code 作为命名、函数大小和错误处理 pass;domain-driven-design 作为 ubiquitous-language 和 bounded-context map;high-perf-browser 作为 Core Web Vitals audit(LCP、INP、CLS);team-topologies 作为 cognitive-load 和 team-boundary review——或安装指定 skill 获得完整框架。
- Common Mistakes 修正:不要按直觉优化,要按 profiler 优化;先 profile(Phase 1);Amdahl's law 用代码实际占用时间比例限制收益。
- Common Mistakes 修正:不要无安全网重写求快;先用 characterization tests 固定行为(working-with-legacy-code);快而错仍是错。
- Common Mistakes 修正:不要保留没有移动数字的优化;每个变更在 Optimization Ledger 记录 before/after;没有击败基线的回滚——没有收益的复杂度是纯债。
- Common Mistakes 修正:不要在修算法前上基础设施;O(n²) 循环或 N+1 查询胜过任何 cache;先修代码,再按规模选 machinery(system-design)。
- Common Mistakes 修正:不要无 invalidation rule 就缓存;stale-data bugs 的成本高于省下的 latency;每个 cached path 都要命名什么事件使哪个 key 失效。
- Common Mistakes 修正:不要信任 ORM 写出的 SQL;EXPLAIN 慢查询(ddia-systems);N+1 和缺失索引藏在无辜代码后面。
- Common Mistakes 修正:不要在 outbound calls 无 timeout 时称它快;失败时 latency 是性能属性(release-it);一个挂起依赖会抹掉所有优化。
- 完成旅程:按痛点配剂量——慢 endpoint 抱怨可能只需 Phase 1、5、6(baseline、bottleneck、queries),几天即可回报;每次变更都慢且危险的代码库要先做结构阶段,因为干净边界让优化变小。
- 完成旅程:无论哪种,ledger 记分——保留的变更击败其基线,其他都回滚。
- Exit checklist:docs/ARCHITECTURE-OPTIMIZATION-PLAN.md 中每个阶段是 done、deferred: reason 或 skipped: reason。
- Exit checklist:每个热点流程都有 baseline、budget 和处于预算内的当前测量(PERFORMANCE.md Baselines & Budgets)。
- Exit checklist:每个保留的优化都显示测量 before/after;没有保留的失败基线(PERFORMANCE.md Optimization Ledger)。
- Exit checklist:热点路径上的 Dependency Rule violations 已关闭或成为 tracked rows(ARCHITECTURE.md Layer Map)。
- Exit checklist:慢查询已按 plan 修复,lists 已分页,isolation level 已记录,风险路径已加锁(ARCHITECTURE.md Data & Storage Decisions)。
- Exit checklist:每个 outbound call 有 timeout,budgets 由 RED metrics 和 alerts 守护——或由 CI gates(RELIABILITY.md、TESTING.md CI Gates)。
- 关闭 tracker:剩余 Next Actions 带入 PERFORMANCE.md ledger 和 TECH-DEBT.md,避免丢失。
- 向前路由:当痛点是害怕变更而不是速度时,继续用 remove-technical-debt skill;当新的未测试原型需要完整生产 pass 时,用 improve-code-quality;当下一个系统应从第一天拥有此结构时,用 design-code-architecture。
适用边界 · 注意事项
- 未测试原型不要用;先 improve-code-quality;绿地新项目结构不要用;先 design-code-architecture。
- 老化且你害怕改动的代码库不要用;先 remove-technical-debt。
- 单纯营销站页面速度不要用;先 improve-website;若只针对单一框架问题,直接调用对应 skill。