# 系統架構,很多人其實是從錯的地方開始
很多團隊一開始談系統設計,就直接跳進技術。
討論 API 怎麼設計、資料庫怎麼切、要不要上 Kafka、要不要 microservice。
可是!
**如果大家對「我們到底在做什麼系統」沒有共識,技術討論其實很容易越講越歪。**
這也是為什麼我很喜歡 **C4 Model 的 Level 1(System Context Diagram)**。
它做的事情其實很簡單:
**先把大局講清楚。**
---
## Level 1 其實在回答一個很基本的問題
不是「系統怎麼做」,
而是:
> 這個系統,在整個世界裡面到底在哪裡?
換句話說:
* 它存在於什麼環境?
* 它負責哪一塊能力(Capability)?
* 它跟哪些人、哪些系統互動?
很多人會以為上下文是技術邊界,但其實不是。
上下文比較像是:
**組織怎麼理解自己的業務邊界。**
舉例來說,「電商系統」到底包含什麼?
訂單?會員?金流?物流?
如果團隊對這些事情的理解不一致,後面的架構圖通常會越畫越混亂。
---
## Level 1 的元素其實很少
一張 System Context Diagram 通常只有幾個東西:
**1️⃣ 核心系統**
放在中間,用黑盒(Black box)表示。
這一層不談內部怎麼做。
**2️⃣ 人(Persons)**
誰會用這個系統?
例如消費者、客服、營運人員等等。
**3️⃣ 外部系統**
像是金流服務、物流系統、CRM、或其他公司內部系統。
重點只有一個:
**誰跟誰互動。**
---
## 在這一層,我刻意不談技術
System Context Diagram 只關心兩件事:
* 什麼系統跟什麼系統在溝通
* 中間交換的是什麼資訊
至於 REST、MQ、Event、GraphQL 這些東西,其實都太早了。
當圖上開始出現一堆技術名詞,通常代表你其實已經在畫 Level 2 或 Level 3 了。
---
## 一些實務上我會注意的小地方
畫這類圖時,我會盡量讓它**一眼看懂**:
* 每張圖一定有清楚的標題
* 每個元素都有簡單描述
* 既有系統用灰色,新系統用藍色
我其實不太追求圖很漂亮。
我比較在意的是:
**一個沒參與專案的人,能不能 30 秒內看懂。**
---
## 如果邊界很難畫怎麼辦?
有時候會卡住。
像是你會開始想:
「這個算我們系統的一部分嗎?」
「還是其實是另外一個系統?」
這時候我通常會先畫 **Landscape Diagram**。
它比較像是一張「系統地圖」,
先把整個生態系畫出來,再慢慢決定邊界在哪裡。
---
## 為什麼我覺得 Level 1 很重要?
因為它其實在建立一件很關鍵的事情:
**Shared Mental Model(共同的理解)**
當技術人員、PM、甚至非技術主管
都能看著同一張圖說:「對,我們的系統就是這樣。」
後面的架構討論才會順。
不然很多時候其實只是
**大家腦袋裡有不同版本的系統,但以為自己在討論同一件事。**
---
如果你有在做系統設計,
其實很值得試試先畫一張 **C4 Level 1**。
很多模糊的地方,畫著畫著就會浮出來了。