最近聽到幾個沒有聽過的名詞覺得蠻值得記錄一下,也算是跟 DevOps 有關。

綠地專案 vs. 棕地專案: 我們站在什麼樣的基礎上開發?

這兩個詞彙本來是都市計畫的術語,我查是這樣,但我沒印象我大學時有學過,我記得以前是用「素地」來表示沒有建築物的土地。「素地」與「空地」不同,空地是指已有道路、排水、電力設施,可利用而仍未依法作建築使用,或已作建築使用,其建物價值不及基地申地價的 10%。

好,扯遠了,總之,這兩個詞用來比喻專案開發時所面對的環境。「綠地專案」指的是從頭開始的專案,而「棕地專案」指的是從既有的專案上開發。

對綠地專案而言,一切從頭開始,沒有既有專案的歷史包袱,理論上可以自由地選擇最新的技術、架構與工具,例如新創團隊開啟一個全新的專案,大概是這樣的概念。而相反地,棕地專案則像是在一塊已經開發過、甚至可能受到污染的「棕地」上進行翻新或擴建。開發團隊必須在既有的、可能充滿技術債的程式碼基礎上工作。例如我目前手上的專案全部都是棕地專案,充滿著大量 legacy code,牽一髮動全身的程式碼,讓我改起來膽戰心驚,到最後就很容易抱著能不改就不改的心態(If it works, don’t touch it.)。

總而言之,這表示在評估一個專案時,不能只看要開發的功能,更要理解它所處的狀況。是從零開始的創造?還是在既有框架下的奮鬥?這會影響策略的擬定。

平台工程(Platform engineering)

平台工程(Platform engineering)可將開發人員的部分工作和基礎架構相關手動作業移至 IDP(Internal Developer Platform),讓團隊能專心開發應用程式及投入創新1

這聽起來有些抽象,但可以想像如果在一間公司中,AP 人員(開發團隊)需要自己處理伺服器、資料庫、CI/CD 等 infra 上,那就是一種資源的錯置,這會讓開發人員無法真正專注於在開發上2。平台工程團隊的角色,就是將這些繁瑣但必要的工作,整合成一個自助式的平台。開發人員可以透過這個平台,完成環境建置、部署、監控等任務。

在我們的場景,例如伺服器、資料庫這類 infra,是不需要自己建置,我們是透過需求單系統,填寫工單請專責人員建置3,這中間要經過層層關卡(雙方主管)的審核,最後才會成功把需求傳遞到專責人員手上開始作業。而作業過程中依據 SOP 需要留存大量的「軌跡」,這些軌跡最後都有可能會被稽核檢視其是否合規。簡單來說,有平台,但不好用。

至於 CI/CD,我們在導入 Azure DevOps 後算是有完成了這一塊拼圖,建立起一個可用的平台,畢竟我們原本的部署上線方式真的令人太痛苦了,這個有機會以後可以再分享一下。


  1. https://cloud.google.com/solutions/platform-engineering?hl=zh-TW ↩︎

  2. 在敝公司雖然不用自己建置基礎設施,但很多時候都要自己管理,因為我們的角色某種程度上是開發人員兼維運人員。 ↩︎

  3. 在《獨角獸專案》這本書當中看到無極限零件公司裡面也要填寫類似的工單系統時,令我倍感熟悉。 ↩︎