← 所有文章

複利工程:讓程式碼庫加速而非衰退

大多數程式碼庫隨著規模增長而變慢,我的卻在加速。在建構了95個hook、44個skill和14個設定檔組成的.claude/基礎架構後,每個新功能的成本都比前一個更低,因為基礎架構承擔了更多工作。1

重點摘要

複利工程描述的是一種程式碼庫狀態:每新增一個功能,後續功能的建構成本就會降低。我親身經歷了這個過程:我的Claude Code hook系統從3個hook起步,成長到95個。第一個hook花了一小時建構,最近的hook只需10分鐘,因為基礎架構(生命週期事件、設定載入、狀態管理、測試工具)已經存在。相反的模式——熵增工程——則描述每新增一個功能就會增加後續功能成本的程式碼庫。一個團隊在第三年比第一年交付更快,與一個逐漸停滯的團隊之間的差異,在於他們的工程決策是正向複利還是負向複利。


實踐中的複利:我的.claude/基礎架構

成長曲線

月份 Hook數量 Skill數量 設定檔 測試 新Hook所需時間
第1個月 3 2 1 0 60分鐘
第3個月 25 12 5 20 30分鐘
第6個月 60 28 10 80 15分鐘
第9個月 95 44 14 141 10分鐘

第一個hook(git-safety-guardian.sh)需要建構整個hook生命週期:理解PreToolUse事件、撰寫解析JSON輸入的bash腳本、處理錯誤情況、手動測試。第95個hook繼承了所有這些基礎架構。每個hook的所需時間降低了6倍,不是因為hook變簡單了,而是因為基礎架構承擔了更多工作。

什麼會產生複利效應

模式一致性。每個hook遵循相同的結構:讀取JSON輸入、用jq解析、檢查條件、輸出決策JSON。任何開發者(或AI代理)閱讀任何hook時都能立即辨識出這個模式。我的12模組部落格檢查工具遵循相同的一致性原則:每個模組匯出相同的介面(check(content, meta) -> findings),讓新增模組變得極為簡單。

設定驅動的行為。所有14個JSON設定檔編碼了原本寫死在程式碼中的閾值和規則。當我把deliberation共識閾值從Python中寫死的0.70移到deliberation-config.json時,我獲得了按任務類型調整的能力(安全性=85%、文件=50%),無需修改程式碼。2

測試基礎架構。最初的20個hook沒有測試。新增測試工具(48個bash整合測試、81個Python單元測試)花了兩週。此後每個hook在5分鐘內就能附帶測試一起交付,因為fixture、斷言輔助函式和測試執行器已經存在。

記憶系統。我的MEMORY.md檔案跨會話記錄錯誤、決策和模式。累積54個條目後,它防止我重複犯同樣的錯誤。hook #23中的((VAR++))bash陷阱已經防止了hook #24到#95中出現相同的bug。每個條目在未來的每個會話中都產生複利效應。3


複利模型

正向複利

工程生產力遵循複利公式:

Productivity(n) = Base × (1 + r)^n

其中r是每個功能的生產力變化率,n是已交付的功能數量。

正r值(複利):每個功能讓下一個便宜2-5%。50個功能後:1.03^50 = 4.38倍生產力提升。

負r值(熵增):每個功能讓下一個貴2-5%。50個功能後:0.97^50 = 0.22倍生產力,衰退了78%。

這兩條軌跡在50個功能後形成20倍的工程速度差距。4

我的實際數據

我的blakecrosley.com網站從單一FastAPI路由和一個HTML模板開始。九個月後:

功能 建構時間 使用的基礎架構
第一篇部落格文章渲染 4小時 無(從零建構)
部落格列表含分類 2小時 現有Jinja2模板、content.py
i18n翻譯系統 6小時 現有內容管線、D1資料庫
部落格搜尋彈窗 45分鐘 現有HTMX模式、Alpine.js狀態
部落格品質檢查工具(12模組) 3小時 現有測試基礎架構、CI管線
新增檢查模組(URL健康度) 15分鐘 現有模組介面、測試fixture

最後一項就是複利的回報:新增一個檢查模組只需15分鐘,因為模組介面、CLI整合、測試工具和CI管線已經存在。第一個模組花了3小時,因為那些基礎架構都不存在。5


我自己程式碼庫中的熵增案例

複利不是自動發生的。我也經歷過熵增:

ContentMeta Schema的捷徑

我在一次會話中定義了部落格文章的ContentMeta資料類別:title、slug、date、description、tags、author、published。我沒有納入categoryserieshero_imagescriptsstyles。之後每次新增都需要修改解析器、更新每個使用該metadata的模板,並重新測試整個管線。三個月內的五次新增,總成本超過了一開始仔細設計schema所需的時間。這就是決策時機問題:不可逆的決策值得事前分析。

i18n快取鍵衝突

翻譯快取的快速實作使用部落格slug作為快取鍵。當同一個slug在不同語系有兩個翻譯時,快取回傳了錯誤的語言。除錯花了3小時。修復只花了15分鐘(在快取鍵加上語系前綴)。實作時省下的5分鐘捷徑,導致了3小時的除錯時間和整個系統快取鍵的架構審查。6

3.2GB的除錯目錄

Hook的除錯輸出累積在~/.claude/debug/中,沒有清理機制。三個月內,該目錄增長到3.2GB。我後來建構的context audit skill發現了這個問題,並清理了超過7天的檔案,但清理機制應該在第一次除錯輸出時就一起建構。


產生複利效應的實踐

一致的模式優於最佳模式

一個團隊在50個功能中使用相同的「夠好」模式,運作速度會快於針對每個功能使用各自「最佳」模式的團隊。一致性降低認知負荷、啟用自動化工具,並加速程式碼審查。7

我的hook系統對所有95個hook使用相同的bash模式,儘管有些hook用Python表達會更自然。這種一致性意味著任何讀過一個hook的人(或AI代理)都能讀懂任何hook。語言選擇上的次優被新hook零學習曲線的效益所抵消。

基礎架構作為第一個功能

我在blakecrosley.com建構任何產品功能之前,先建構了CI/CD管線、測試工具和部署流程。這項投資當時感覺很慢。此後每個功能都能在2分鐘內通過自動化測試完成部署。8

階段 基礎架構投資 回報時間
第1-2週 FastAPI + Jinja2 + 部署管線 第3篇文章時回本
第3-4週 內容管線 + markdown解析 第5篇文章時回本
第2個月 Hook生命週期 + Git安全性 第10個hook時回本
第3個月 測試基礎架構(pytest、bash測試) 第5個模組時回本

記憶宮殿模式

我的.claude/目錄就像一座「記憶宮殿」——一組為人類和AI閱讀而最佳化的結構化文件:

~/.claude/
├── configs/     # 14 JSON files — system logic, not hardcoded
├── hooks/       # 95 bash scripts — lifecycle event handlers
├── skills/      # 44 directories — reusable knowledge modules
├── docs/        # 40+ markdown files — system documentation
├── state/       # Runtime tracking — recursion depth, agent lineage
├── handoffs/    # 49 documents — multi-session context preservation
└── memory/      # MEMORY.md — 54 cross-domain error/pattern entries

記憶宮殿之所以能產生複利效應,是因為每個新條目都豐富了未來開發會話可用的脈絡。在54個MEMORY.md條目後,AI代理會避免我已經解決過的錯誤。在95個hook後,新hook幾乎能自動編寫,因為它們遵循既定模式。越豐富的脈絡產生越貼合需求的AI生成程式碼,從而讓下一個功能更便宜。9


AI時代的複利

AI放大兩個方向

AI程式碼助手會加速程式碼庫已有的任何模式。我的95個具有一致模式的hook能產生優秀的AI生成hook,因為AI匹配了既定結構。一個擁有5種不同hook風格的程式碼庫會產生更差的AI生成程式碼,因為AI沒有一致的模式可以匹配。10

複利效應加倍了:一致的模式讓人類開發更快(降低認知負荷),同時也讓AI輔助開發更快(模式匹配)。不一致的模式則讓兩者都變慢。

對AI代理友善的程式碼庫

我為AI代理的使用而設計了.claude/基礎架構:

  • 結構化設定(JSON,非寫死的值),代理可以程式化解析
  • 一致的命名慣例(hook使用verb-noun.sh,skill定義使用SKILL.md
  • 機器可驗證的品質檢查(141個代理能自主執行的測試)
  • 明確的文件(MEMORY.md、handoffs、docs/),代理在會話開始時讀取

每一項對代理可讀性的投資,都隨著AI工具變得更強大而產生複利效應。11


關鍵要點

給工程師: - 追蹤程式碼庫成長過程中的「每個功能所需時間」;如果增加代表熵增,如果減少代表複利 - 在抽取抽象化之前套用三次法則:先建構兩次具體解決方案,第三次再提取可重用模式 - 每個sprint投入15-20%在基礎架構和工具改善上;複利回報在3-5個sprint內就會超過短期功能速度的成本

給工程主管: - 透過隨時間變化的每個功能前置時間來衡量工程健康度;前置時間增加代表熵增 - 將文件和測試基礎架構視為功能而非額外開銷;我的測試基礎架構投資(2週)在95個hook中已節省超過50小時


參考資料


  1. Author’s .claude/ infrastructure metrics: 95 hooks, 44 skills, 14 configs, 141 tests. New hook implementation time decreased from 60 min to 10 min over 9 months. 

  2. Author’s deliberation config. Task-adaptive consensus thresholds: security=85%, features=80%, refactoring=65%, docs=50%. 

  3. Author’s MEMORY.md. 54 documented errors with cross-domain learning patterns across bash, Python, CSS, and HTML validation. 

  4. Forsgren, Nicole et al., Accelerate, IT Revolution Press, 2018. Engineering velocity measurement and compounding. 

  5. Author’s site development timeline. Feature build times tracked across 9 months of development. 

  6. Author’s debugging experience. i18n cache key collision documented in MEMORY.md error entries. 

  7. Shipper, Dan, “Compounding Engineering,” Every, 2024. Consistency as a compounding force. 

  8. Humble, Jez & Farley, David, Continuous Delivery, Addison-Wesley, 2010. 

  9. Author’s .claude/ mind palace structure. 95 hooks + 44 skills + 14 configs + 54 MEMORY.md entries = compounding context for AI agent development. 

  10. Anthropic, “Best Practices for Claude Code,” 2025. 

  11. Author’s observation on agent-readable codebase patterns. Consistent naming, JSON configs, and machine-verifiable tests improve AI code generation quality.