iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
AI Engineering

AI 寫 Code 之後,我們還需要 Software Architecture 嗎?系列 第 9

Day 09:架構決策紀錄(ADR)——讓 AI 讀得懂「為什麼這樣設計」而不是照抄現狀

  • 分享至 

  • xImage
  •  

前言:程式碼會告訴你「現在長什麼樣」,不會告訴你「為什麼長這樣」

「這段程式碼看起來繞了一大圈,直接改成更直覺的寫法不好嗎?」

如果你請 AI 重構一套系統,這句話大概會在某個時間點出現——而它可能是對的,也可能正好戳破一個當初刻意做出來、卻沒有留下任何紀錄的設計取捨。AI 讀程式碼的能力很強,但程式碼本身只記錄「現在長什麼樣」,不記錄「為什麼長這樣、當初還考慮過哪些做法、為什麼放棄了它們」。這個落差,正是今天要講的主題。

今日目標

  • 理解「程式碼現狀」跟「設計意圖」之間的落差,為什麼對 AI 特別致命
  • 認識 ADR(Architecture Decision Record)這個工具解決的是什麼問題
  • 看一組對照:有 ADR vs 沒有 ADR 時,AI 面對同一段「奇怪的程式碼」會怎麼反應
  • 建立「架構決策要不要寫 ADR」的判斷標準

AI 只看得到現狀,看不到「放棄了什麼」

一段程式碼繞路,可能有兩種完全不同的原因:一種是純粹的技術債,當初沒想清楚、後來也沒空整理;另一種是刻意的取捨——團隊評估過更直覺的寫法,但基於某個當下才成立的限制(效能考量、跟另一個系統的相容性、暫時性的資源限制)決定不那麼做,繞路本身就是設計的一部分。

問題是:光看程式碼,這兩種情況長得一模一樣。人類工程師如果剛好在場、剛好記得,還能靠記憶補上「為什麼」;但 AI 沒有這段記憶,它只能根據程式碼現狀做推論,而推論的起點通常是「這看起來像技術債」——因為技術債本來就是更常見的情況,AI 的先驗假設會自然地往這個方向傾斜。

這正是這個系列反覆出現的模式:AI 給出的判斷,只在它實際查證過的範圍內成立——而「為什麼當初這樣設計」這件事,不寫下來,就永遠不在任何 AI 查證得到的範圍內。

ADR:把「為什麼」變成一份查得到的紀錄

ADR(Architecture Decision Record,架構決策紀錄)這個概念,是 Michael Nygard 在 2011 年一篇文章〈Documenting Architecture Decisions〉裡提出並推廣開來的做法——核心精神很簡單:針對每一個重要的架構決策,寫一份簡短的紀錄,內容包含當時的背景(context)、做出的決定(decision)、還有這個決定帶來的後果與取捨(consequences)。它刻意設計成輕量、簡短,目的是讓團隊真的願意持續維護,而不是變成又一份沒人讀的大部頭文件。

ADR 不是設計文件,不需要鉅細靡遺地描述系統怎麼運作;它記錄的是「決策當下的脈絡」——考慮過哪些替代方案、為什麼選了這一個、放棄的方案有什麼代價。這正好補上程式碼本身缺的那一塊。

對照:同一段「奇怪的程式碼」,有沒有 ADR 差在哪

❌ 沒有 ADR:
AI 讀到一段程式碼:某個查詢刻意不用 ORM 的關聯查詢,
改用兩次獨立查詢再手動組合結果。
AI 的判斷:「這裡應該可以簡化成一次關聯查詢,效能更好、
程式碼更簡潔,我先改掉。」
→ AI 只看到「現在這樣寫比較繞」,看不到這個決定
  當初是不是為了避開某個已知的效能陷阱

✅ 有 ADR:
AI 讀到同一段程式碼,同時查到對應的 ADR 記錄著:
「考慮過用關聯查詢,但在資料量大的情境下會產生
笛卡兒積導致的效能問題,改用兩次獨立查詢是刻意取捨,
如果未來 ORM 支援更好的分批關聯查詢,可以重新評估。」
AI 的判斷:「這是一個已知的刻意取捨,如果要改,
要先確認 ORM 有沒有解決當初那個效能陷阱。」
→ AI 的查證範圍多了「這個決策的脈絡」,
  判斷因此更貼近真實情況

沒有 ADR 的版本裡,AI 不是判斷錯了,它只是在一個不完整的資訊範圍內給出了一個看起來合理、實際上可能倒退回舊坑的建議。這不是 AI 能力的問題,是它從來沒機會查到那個關鍵的「為什麼」。

不是每個決定都要寫 ADR

ADR 的價值建立在「輕量、只記重要的事」這個前提上,如果什麼決定都要寫一份,維護成本會壓垮團隊,最後變成沒人更新的裝飾品。值得寫 ADR 的通常是:影響範圍夠廣(不是一支函式內部的小選擇)、有明確的替代方案被考慮過又放棄、未來很可能被人(或 AI)質疑「為什麼要這樣做」的決定。日常的、顯而易見的實作選擇不需要每個都寫。

今日思考題

回想你手上系統裡某一段「看起來繞了一圈」的程式碼:你知道它繞路的原因嗎?如果讓 AI 去看,它有辦法查到這個原因,還是只能靠猜?

今日重點回顧

  • 程式碼只記錄「現在長什麼樣」,不記錄「為什麼長這樣」——這個落差對 AI 判斷特別致命,因為 AI 沒有人類工程師的隱性記憶可以補上
  • ADR(Michael Nygard,2011)用輕量的格式記錄架構決策的脈絡:背景、決定、後果
  • 有沒有 ADR,會直接影響 AI 面對「看起來繞路」的程式碼時,判斷是技術債還是刻意取捨
  • 不是每個決定都要寫 ADR,只有影響範圍夠廣、有明確替代方案被放棄過的決定才值得

明日預告

明天用一個具體案例,示範沒有 ADR 時,AI 真的把一個刻意的設計決策誤判成技術債、動手「修正」之後會發生什麼事。


上一篇
Day 08:案例——AI 在沒有清楚模組邊界時,如何不小心跨模組耦合
下一篇
Day 10:案例——沒有 ADR 時,AI 把一個刻意的設計決策誤判成技術債
系列文
AI 寫 Code 之後,我們還需要 Software Architecture 嗎?11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言