回到所有文章
工程問題與解法

好的技術決策,從問對問題開始

選框架、拆服務、加快取之前,先釐清限制。讓架構服務眼前的問題,也保留明天的選擇。

面對新的需求,工程師很容易先想到解法:換一個框架、加一層快取,或把服務拆開。但技術決策的第一步,通常應該是把問題描述得更精確。

先把症狀與原因分開

「頁面很慢」是一個症狀。它可能來自伺服器回應、資料查詢、過大的 JavaScript,或是在瀏覽器裡做了不必要的工作。

在選工具之前,先收集可觀察的資訊:哪個頁面、什麼操作、哪種裝置,以及等待發生在哪一段流程。

觀察:文章列表第一次開啟時等待較久。
假設:主要時間花在下載與解析程式碼。
驗證:比較網路時間、主執行緒工作與載入資源。
決策:根據證據減少對應的成本。

好的假設需要有被推翻的可能。否則我們只是替原本想用的工具找理由。

寫下真正的限制

同一個解法,在不同團隊可能有不同的成本。

  • 團隊是否熟悉這個技術?
  • 有多少時間可以維運?
  • 資料規模是現在的需求,還是尚未發生的想像?
  • 失敗時能否容易回復?

把這些限制寫下來,往往比列出框架優缺點更有幫助。

用簡單的決策紀錄保留脈絡

不需要每個選擇都寫一份長文件。對會影響後續工作的決策,保留幾個欄位就足夠:

欄位 要回答的問題
背景 我們遇到了什麼問題?
方案 考慮了哪些做法?
選擇 這次採用什麼,為什麼?
代價 接受了哪些限制與風險?
重看時機 什麼條件改變時要重新評估?

決策也需要到期條件

例如「文章數量超過目前的前端搜尋負荷時,再評估搜尋服務」,就比「先這樣做,以後再說」更有用。它讓未來的討論有共同起點。

保持選擇的可逆性

如果兩個方案都能解決當前問題,可以優先考慮依賴較少、遷移成本較低的方案。這不是永遠選最簡單的實作,而是避免提早承擔沒有必要的複雜度。

技術決策的品質,不只在於採用了什麼,也在於是否理解自己接受了什麼代價。

W.

Will

一個軟體工程師的 AI、開發與成長筆記。
Always learning. Always building.

關於作者