身為一個軟體工程師,工作一定會接觸大大小小不同系統,每個系統各有特色,系統架構除了會因為不同 domain 而有不同的形狀,也會因活者的時間長短,而有不同的特質。這篇文章就來說說,從 0 到 1 初誕生新系統和二十年以上的老舊系統,兩種極端的特性會是如何,會遇到哪些常見的坑。
通常從 0 到 1 的新系統,比較不會有通靈王的問題,因為你可能是開發者之一,或者開發人員都還在職(當然,也不排除剛進公司幾個月,同事全離職的情形 😅 ),既使這個系統沒有文件,到處問問還不至於需要花時間看 code 細細品嚐 ☕️ 前輩們在想什麼。
但如果是二十年以上的老舊系統就不一樣了,一個系統可以存在二十年,想必替這間公司賺不少錢,所以公司投入的人力,以及經手的工程師也會比較多,奇奇怪怪的 spec 也會比較多, 常常會藏一些特殊邏輯,比如說動物園有養幾隻大象,一般來說三餐餵草,但 A 大象要早餐一定要吃甘蔗,B 大象午餐吃比較少......
但老舊系統的好處是,經過前人們的各種 refactor ,一些「常用」功能會固定使用一些 design pattern ,後人只要照做就不會踩雷, coding style 也會比較統一,遇到 incident 要如何處理,通常也有一套 SOP ,緊急狀況的處理反而不需要通靈 XD。
不過除了需要通靈之外,另外一個比較麻煩的點是,老舊系統的技術通常都比較古早味,因為升級要花很多時間,往往被一延再延,最後只好放棄,舉例來說,有遇過用 Java 寫的 2X 年系統,到現在還停留在 Java 8 的版本。如果這個系統沒有要開發新的功能,這樣穩定使用也沒有什麼不好,偏偏常常需要開發新功能,想用一些最近幾年才出的 SDK ,如果不支援 Java 8 的話,只能放棄或換一條路。