iT邦幫忙

1

[Tedium Is Stability-02] 與 AI 一起開發,看見冰山:一個「功能」,其實是一組沒說出口的隱形契約

  • 分享至 

  • xImage
  •  

看見冰山:一個「功能」,其實是一組沒說出口的隱形契約

A Feature Is an Iceberg of Obligations

系列文|繁瑣即安定:與 AI 一起開發,把「沒說出口的開發規矩」也當成程式碼。

上一篇,我們替那份不安取了名字。這一篇,我們把冰山整個翻上來,你會發現,水面下那串東西,其實沒那麼神祕。

先說一個好消息:這些「隱形義務」不是無限多,也不是每個功能都長得不一樣。恰恰相反,它們是一組會反覆出現的老面孔。你今天加匯出報表會碰到它們,明天加審批流程、後天接一個外部系統,碰到的還是同一組。

這些「隱形契約」,其實是老朋友

軟體工程很早就有一個詞來描述它們:橫切關注(cross-cutting concerns)。意思是,有一類需求會「橫切」過所有功能、散落在每個角落,很難乾淨地收進某一個模組,記錄、稽核、權限、安全、通知,全都是。這概念老到,二十年前大家就在用「切面」想辦法把它們集中管理了。

同一組橫切義務在每個成熟系統反覆出現

換句話說,一個成熟的系統,通常就固定那麼一組橫切義務:要不要留下稽核與紀錄、系統健不健康出事有沒有人被叫醒、要不要經過審核與狀態管理、誰有權限用、個資有沒有顧好、有沒有牽動外部系統、那些外呼失敗了會不會自動重試或補償、重試會不會重複做(冪等)、需不需要定期排程、有沒有動到資料庫結構、資料壞了或誤刪了救不救得回來、有沒有回歸測試、扛不扛得住量、在多台機器上安不安全。大概十幾條,收攏起來就是八個面向,翻來覆去都是它們。

好消息就在這裡:既然是固定的一組,它就是可以被清點的。可以清點,就能寫下來;能寫下來,就不必每次都靠某個資深的人臨場想起。

當然,上面這八個面向只是給你一個感覺,不是聖旨。每個產品真正屬於自己的那一組,會依各家的習慣、加上對自家程式碼的分析,長出它專屬的隱藏條件,那是這個系列後面幾篇要一起做的事。

走一遍:同一個功能,點亮哪幾條

抽象講不夠,我們拿上一篇那個「匯出訂單報表 API」實際走一遍,看看每一條「做到」到底長什麼樣。

走一遍匯出報表,點亮六條義務

先是稽核。匯出這個動作會改變什麼嗎?嚴格說它是讀取,但「把整批客戶資料送出去」這種事,你會希望留下一筆,誰、什麼時候、匯出了什麼。在一個治理良好的系統裡,這種紀錄通常有一個統一的寫入口,所有異動都得經過它;所以要確認新功能有沒有覆蓋到,最快的方法就是 grep 那個寫入口的呼叫點,看你的路徑在不在裡面。(順帶一提:如果是背景排程默默匯出,很多系統的預設是「背景動作只留一條執行足跡、不進使用者看得到的異動紀錄」,這不是 bug,是設計,但你得知道它,才不會誤以為記了。)

接著是權限。這個端點誰能打?光問「這個人有沒有權限」還不夠,你往往還要問「這個客戶的方案有沒有買這個功能」。一句話記住它:scope 管角色能不能,license 管客戶買沒買,是兩件事。

然後是機敏。報表欄位裡有沒有身分證號、電話這類該遮的?遮罩,是最容易被漏掉的一條義務,因為功能不遮也照樣會動。

再來是外部。如果匯出完要寄一封通知信,那通對外呼叫得落一筆紀錄,而且有一條鐵律:永遠不要把密碼、授權 token 放進那筆紀錄的 request 內容裡。而如果那通外呼可能失敗,還得想清楚它失敗時要重試、還是補償,別讓它默默消失,這就是「容錯」那一條。

最後,如果這是個「每月自動匯出」的排程,那就多一條多台安全。正式環境跑兩台的時候,這個排程只能在其中一台上跑,否則報表和信都會來兩份;要用集中協調的排程機制,別用那種「每台各自都會觸發」的寫法。

你看,一個聽起來很單純的「匯出報表」,走一遍下來,具體點亮了五、六條,而且每一條「做到」都有明確、可檢查的動作,不是玄學。

把「藏在腦袋裡的」變成「寫下來、可重用的」

這就帶出這個系列真正想做的事。

從默會知識到寫下來的清單

這組橫切義務,長久以來是默會知識,它活在資深工程師的直覺裡、活在 code review 時前輩那句「欸你這個沒記 log 喔」、活在一次線上事故換來的教訓裡。它有效,但它脆弱:人一走、換一個新 session、換一個沒踩過那個坑的 AI,它就漏了。

而 POG 早就示範過一件事:把本來會隨對話消失的東西(任務、提示詞)寫下來、當成程式碼一樣版控,經驗就不再蒸發。我們要做的,只是把同一招用在「義務」上:既然這組橫切義務是固定、可清點的,那就把它寫成一份人和 AI 都讀得懂、可以逐項打勾、每個新任務都能自動長出來的清單。

把義務也當成 Code(Obligations as Code),這就是接下來幾篇要一步步落地的東西。

繁瑣,正是交給 AI 的理由

你可能會皺眉:每個功能都要走一遍十幾條,不會很繁瑣嗎?

會。而這,正是重點。

在過去,這份繁瑣是出錯的來源。人得親手補這十幾條、還要一條一條親手驗證,每個功能都來一次;累了、趕時間了,就會有人默默跳過幾條,漏洞就是這樣長出來的。繁瑣,讓人忍不住想抄近路。

但現在不一樣,因為你不是一個人做,你是跟 AI agent 合作。把「逐條補齊、逐條驗證」這種不需要靈感、只需要不厭其煩的工作交給它,它不會累、不會趕、不會跳過,每一次都幫你把十幾條走完。而人,回去做只有人能做的事:邏輯的判斷,和最後的 review

繁瑣從出錯的來源翻成安定的來源

於是那份繁瑣,從「出錯的來源」翻轉成了安定的來源。過去,越完整的檢查清單越沒人想跑;現在,越完整反而越讓人安心,因為跑一遍清單的成本,已經趨近於零。這也是為什麼「把義務寫下來」在今天特別值得:在只有人的年代,這麼一份鉅細靡遺的清單也許嫌囉嗦;在跟 AI 協作的年代,它剛好是讓 AI 穩定發揮的那張地圖。

不過,光把清單丟給 AI 還不夠。如果你還把它當成「射一句 prompt 就交差」的咒語機器,再完整的清單它照樣略過。真正讓清單被落實的,是一種工作方式的轉變。

下一篇,我們談它:別再「調 prompt」了,你真正該設計的,是一個循環


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言