Hello, Respect the Flow
只要你還讓 Dev、Test、Staging 混在同一台機器上,就不會有真正可驗證的交付流程。
測試會失效、整合會混亂、問題無法重現,所有角色彼此踩線,流程變成推責任的戰場。這不是 infra 的問題,而是團隊紀律的問題。
Respect the flow 不是形式,而是一種責任感 —— 對於環境分層、版本凍結、角色邊界的基本尊重。
每個環境都有該扮演的角色
軟體開發流程中,常見的四個環境層級與實體建議如下:
- Development:自由開發、頻繁變動(如在本地機器或 sandbox VM)
- Testing:功能驗證、壓力測試(如地端共用測試主機)
- Staging:驗收整合、模擬實際部署(如雲端與 Prod 同規格的 VM_1)
- Production:穩定服務、對外公開(如雲端正式環境 VM_2)
每個環境都應對應獨立部署單元或主機,避免如下常見錯誤:
- test server 被 RD-Team 當作開發環境直接使用
- staging server 被拿來跑 測試流程
- develop 分支還在 push,測試團隊已經在執行驗證
一旦角色模糊,整個流程就會失去可追溯性與穩定性。
如果你不 freeze,下游就會 freeze 住
最典型的情況是:
「前端 在串 test server 上的後端,突然工作被中斷,因為 API 斷線了,然後原本有些欄位一下出現又一下不見…因為後端還在那上面改寫。」
「Test-Team 在 test server 上測試,突然 WEB 斷線了,然後原本有些按鈕功能一下出現又一下不見…因為前/後端還在那上面改寫。」
這會造成:
- 前端 工作被中斷
- 前端 整合反覆修改、重構
- 測試人員 無法重現 bug、流程斷鏈
- 測試結果無效,驗證版本與實際版本不一致
測試不是幫你 debug,而是驗證一個凍結版本能否穩定上線。
測試是驗收場,Staging 是最後防線,不是跳板
測試環境的存在,是為了讓團隊能在明確版本的基礎上進行以下驗證行為:
- 前端 對接穩定的 後端 (API / Schema)
- Test-Team 驗證功能與流程正確性
- Test-Team 進行壓力測試、功能巡檢
- PM-Team 做出上線前的確認與取捨
這些前提都建立在一個基本共識上:這台機器上的版本不會變。
一旦允許後端隨意 push、改資料結構或重啟服務,這個環境就失去了所有驗證意義。
但光有 test server 還不夠 —— staging 應該存在,並且與 production 一致(或幾乎一致),讓團隊能在上線前模擬實戰,驗證部署流程與設定變數,找出遺漏與風險。
如果沒有 staging,等於你是在開發測一半、就直接蓋上正式環境。這不叫快速交付,這叫賭博。
test server 是為了驗證功能正確,
staging server 是為了驗證部署正確。
兩者都不能省,否則你永遠不知道你測的是什麼、上的是什麼。
Respect the Flow,就是尊重邊界與責任
CI/CD 再強大,也沒辦法替你維護流程紀律。
Git 分支再清晰,也撐不住你把所有環境塞在一台 VM 上亂部署。
你可以開發得快,但你不能亂;
你可以 iterate 常常 push,但你不能 push 到別人腳下。
一個乾淨的交付流程需要:
- 明確的環境邊界:dev、test、staging、prod 不可混用
- 固定的版本控制:release 分支一旦部署到 test,就不得更動
- 乾淨的部署紀律:不同環境對應不同 tag 或 commit
- 穩定的整合基礎:測試與前端整合皆依據可重現版本進行
這些不是為了形式化流程,而是為了讓開發不會踩到測試、測試不會受制於開發、整合能放心進行、責任能夠明確釐清。
小結:流程是一種信任協議
流程之所以重要,是因為它讓責任可追、溝通可簡、節奏可持續。
你可以用最快速度開發,但不能讓這種速度成為其他人的成本。
Respect the Flow,代表你願意為「穩定的交付」負責,而不只是寫完一段功能就結束了。
這是工程紀律,也是職業態度。
Respect the flow — don’t test on dev, don’t dev on test.