🎯 什麼情境該想到我

當你「開發者說『我這邊會動,做完了』,但沒人真的把它部署到類生產環境跑過」的時候。

⚙️ 怎麼用(步驟 / 公式)

意圖:把「done」的定義從「程式功能正確」擴張成「已在類生產環境中被建置、部署、驗證過」,讓整合工作發生在日常工作裡,而不是堆到發布前。

書中演進兩版,兩版都要記得:

第一版(第 10 章,建立在隨選環境之上)

at the end of each development interval, we have integrated, tested, working and potentially shippable code, demonstrated in a production-like environment.

即:每個開發區間結束時,我們有已整合、已測試、可運作且具備出貨潛力的程式碼,並已在類生產環境中示範過

第二版(第 16 章,建立在主幹開發之上,加粗部分為追加)

“At the end of each development interval, we must have integrated, tested, working, and potentially shippable code, demonstrated in a production-like environment, created from trunk using a one-click process, and validated with automated tests.”

即:追加**「由 trunk 以一鍵流程產生,並經自動化測試驗證」**。

補充判準:

  • 只有在能被成功建置、部署、並確認在類生產環境中如預期運作時,才接受這份開發工作為 done——而不是「開發者自己覺得做完了」。
  • 理想上,它是在類生產負載(production-like load)與類生產資料集(production-like dataset)下運行,而且遠早於 sprint 結束之前。
  • 這條定義的作用是防止「某功能被稱為完成,只因為開發者能在自己筆電上跑起來,別的地方都跑不起來」。
  • 理想上預生產環境使用與生產環境相同的工具(監控、日誌、部署),累積熟悉度與經驗。
  • 遵守第二版的定義,可以消除「專案結尾另設一個獨立的測試與穩定化階段」這個常見做法。

原文(第一版):「at the end of each development interval, we have integrated, tested, working and potentially shippable code, demonstrated in a production-like environment.」(L4879–4881)

原文(第二版):「At the end of each development interval, we must have integrated, tested, working, and potentially shippable code, demonstrated in a production-like environment, created from trunk using a one-click process, and validated with automated tests.」(L5909–5912)

原文(補充判準):「ideally, it runs under a production-like load with a production-like dataset, long before the end of a sprint.」(L4886–4887)

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 這是演進式的定義:沒有隨選環境就無法要求第一版,沒有主幹開發與可信自動化測試就無法要求第二版。硬性套用只會變成大家一起造假。
  • 定義收緊時要同步提供能力(環境、一鍵流程、測試),否則「done 的門檻」變成純粹的懲罰。

🔗 相關工具