DX=UX!開發者體驗就是使用者體驗

昨天跟團隊回顧過去一年的工作,剛好晚上又參加活動也分享了一些改善公司基礎設施的過程。我自己覺得在這個過程裡學到很多東西也覺得很好玩,想寫一篇文章分享。

這篇可能對很多人來說有點無聊,但對我來說,這是過去一年裡完成的一些既基本又讓人開心的事情。

基礎工作往往是我們在過去開發產品時容易忽略的部分,但當基礎不夠穩固時,開發進度就像乒乓球一樣來回反覆(例如,推出一個新功能卻帶來兩個 Bug,結果花在解決 Bug 的時間反而更多)。為了避免未來重蹈覆轍,我們決定先花些時間回頭扎穩基礎。

🤖 自動化與 CI/CD

今年終於真正做到完整從 GitHub 開 issue → 提交符合 Conventional Commit 的 PR →自動單元與整合測試 → 透過 Semantic Release 分析 Commit Message 推算版本編號 → 自動部署 Server 或上傳 App Binary → 釋出 Release Note!中間終於通通都不用人力介入。

採用的技術都不是什麼新東西,也不是最潮流的 AI,單純只是專注自動化那些重複且枯燥的工作。

  • 伺服器 100% 容器化(Dockerize),部署效率超~大~提升!
  • 採用 AWS CDKCloudFormation 達成約 95% 的 Infrastructure as code (IaC)
  • 採用 Conventional CommitSemantic Release 進行版號自動分析與推算(團隊花了一些時間適應這個習慣!)
  • 所有 App Client 與 Server 都有 CI/CD,其中核心程式碼測試覆蓋率 90%。
  • 採用 Monorepo 管理相依性:依照程式碼修改狀況自行比對,僅測試和部署有修改的模組,增加開發與管理效率。

🌱 專案管理反樸歸真

我發現,要解決「問題在哪就應該在哪討論」這個困擾,應該放棄掉各種專案軟體工具所產生的「假生產力幻象」,減少不必要的炫砲工具。

隨著團隊成員的能力提升,我覺得小型團隊的產品和軟體的專案管理應該可以很單純,僅透過 GitHub 就可以把解決大部分問題。

  • 棄用 Asana、Notion 等複雜的專案管理工具,只用 GitHub 做專案管理。
  • 斷捨離!減少 GitHub Repo 數量,共刪除超過 80 個 Repo 專案。
  • 大幅度清理不再使用的程式碼以及資料欄位,降低維護成本以及注意力資源的消耗。

🥕 規格標準化

避免重造輪子,其實大部分我們煩惱的問題都有不錯的既有標準(例如 ISO 或 RFC),只要願意閱讀標準,就可以降低溝通造成的問題以及避免可能出現的人為失誤,而且還可以少寫很多文件!如果沒有標準,那要確實的把團隊慣例建立起來(千萬不要兩個專案不同風格,會瘋掉!)

  • 採用 OpenAPI 作為 API 文件標準,自動生成解析器,降低 API 對接時可能造成的人為錯誤與版本管理問題。
  • 統一錯誤代碼(Error Code):整理 Full-Stack 的錯誤碼到單一格式上,讓開發者能夠透過錯誤碼就能馬上找到錯誤可能發生的位置。另外還寫了 CLI 工具來解釋錯誤碼,就不用查表啦!
  • 重新開發藝術家用的編輯器,制定單一格式。

📝文件

把文件視為軟體的一部分(提交時請一起交文件)讓日後維護軟體的成本變得更低更容易。放假時也更容易交接,因為都在文件上啦!

  • 不要害怕投資寫文件!從系統設計、風格指南到自動化流程說明,雖然還很多要寫,但是越來越完整。
  • 全面 Git 化(包含公司政策文件、系統技術文件等):棄用 GitBook、Notion、Google Docs 等以前拿來撰寫文件用的複雜工具,全部變成 Git,讓每個人都可以提交 Pull Request。嘿!包括 PM 和行政團隊成員在內也能 Git。

有了完整的自動化測試跟文件,提交程式碼的時候也更有安全感,能夠勇敢改動的範圍就變得更多了!

這些事情既基礎也都不炫砲,但都是重要的事情。我最近的學習是「DX = UX」,意思是:「開發者體驗就是使用者體驗(Developer Experience is User Experience。

身為開發者,先整理好自己的工具,將無聊乏味的工作交給機器,開發者開心,才能真正專注在有價值的事情上。

開心寫 Code 多好!Happy Coding!