SuiK.

讓想法成為現實。
軟體工程師與創作者 · 台灣

所有文章

軟體工程

一個系統能跑,不代表它真的適合一直長大

從 ERP 到各種接手專案,我越來越在意系統核心與業務功能的邊界,以及 AI 對技術債的影響。

💡 一個系統能跑,不代表它真的適合一直長大

這件事情其實是我這幾年越來越有感的一件事。

大概七、八年前從廈門做 ERP 回台灣之後,我陸續接過不少不同類型的專案。

很多其實都不算什麼超大型系統,比較像是:

有需求,就把功能做出來; 有下一個需求,再繼續往上加。

久了之後就會變成一種很常見的狀況:

功能都有,系統也能跑,但東西散得到處都是。

各種資料夾、共用方法、業務邏輯、DB 操作、Log、Cache……

你說這樣「錯」嗎?

老實說,站在使用者角度可能根本沒差。

使用者不會管你 Log 怎麼寫、Cache 放哪、資料庫怎麼存取,他只在意:

「功能能不能用?」

但問題通常都是在系統開始長大之後才跑出來。

🧩 我自己後來會很堅持一件事:

至少、至少,要先分得出「系統核心」跟「業務功能」這兩層。

再往後,如果這是一套產品,本身還有標準版、客製版,甚至不同客戶有不同延伸,那才會再去考慮第三層,也就是我後來在用的 SpecFeature。

為什麼我要這麼麻煩?

因為有些東西,本來就不應該每個 Feature 自己寫一套。

例如:

Log、Cache、DB 存取。

這些本質上比較像「整個系統共用的能力」,不是某一個業務 Domain 專屬的邏輯。

但如果沒有先把這層切開,很容易發生兩件事。

1️⃣ 一直重複寫

今天做 A 功能寫一次,明天做 B 功能又來一次。

最後不是 Copy Paste,就是每個人寫出自己的版本。

2️⃣ 每一份都開始長得不一樣

A 有補 Log。 B 忘了。 C 用一套 Cache 邏輯。 D 又是另一套。

一開始看起來都只是一些小差異。

但等到真的出問題,要下手改的時候,就會進入一種很熟悉的狀態:

「嗯,我大概知道問題在哪。」

然後 Code 打開。

「……這一坨到底怎麼改啊 ˊ_>ˋ」

原本覺得一小時可以改掉的東西,開始查誰有用、哪裡 Copy 過、哪裡又自己改過一版。

一個下午就沒了。

🔍 反過來,如果系統的邊界一開始就比較清楚,至少遇到問題的時候可以先猜:

「這個比較像系統共用能力出問題?」

還是:

「這其實只是某個 Domain 的業務邏輯壞掉?」

光是能先把問題範圍縮小,其實就差很多了。

🤖 而且現在有 AI 之後,這件事情我反而更有感。

AI 現在真的很方便,丟一整個 Repository 給它,它可以很快幫你讀很多東西。

可是如果專案本身就是散的,同一個責任散在五六個地方、每個地方又有不同寫法,那 AI 看到的其實也還是一坨散的東西。

最後產出來的東西又回到剛剛說的:

A 有補、B 忘了、C 又另一套方法。

AI 可以幫你讀快很多,但它不會因為變成 AI,就自動讓一個原本沒有邊界的系統突然長出很漂亮的邊界。

甚至搞不好只是讓原本亂長的東西,長得更快而已。

這個我之前在接一些歷史技術債比較重的小專案時,就感受滿深的。

所以現在如果是我自己重新規劃一套「未來可能會繼續長」的系統,我至少會先守住兩層:

SysCore / Feature

如果這是一個需要有標準產品,又要針對不同需求延伸的東西,再去考慮:

SpecFeature

👉 下一篇我再來講,我自己到底怎麼分 SysCore / Feature / SpecFeature。

其實真的分到後面,它已經不只是:

「喔,我資料夾整理得比較漂亮。」

比較像是你開始替這個專案建立一套自己的 Framework。

💬 如果你手上的專案現在也有一種:

「功能越來越多,但開始不知道這東西到底該放哪」

的感覺,我也滿好奇你們現在是怎麼切系統核心跟業務功能的。

如果剛好也在整理類似的東西,也可以底下留言或私訊我聊聊。

更多文章