Skip to content

技術選型決策框架:如何給團隊做技術決策

做了幾年 tech lead,最讓我糾結的不是寫程式碼,而是技術選型。記錄一下我的決策框架。

為什麼技術選型很難

表面原因:選項太多,各有優缺點
深層原因:評估維度不統一,隱性約束沒有被挑明

比如:
PM 說:快點,下週要上線
老闆說:用成熟技術,別出問題
團隊:能不能用我最近在學的那個新框架?
你:...

決策矩陣

我習慣用一個 5 維度矩陣來評估:

1. 團隊熟悉度(Team Familiarity)
   已有經驗?學習曲線多長?

2. 成熟度(Maturity)
   社群規模?Issue 響應速度?公司是否在維護?

3. 適配度(Fit)
   解決的問題和我們的問題有多匹配?

4. 遷移成本(Migration Cost)
   如果未來要換,代價多大?(鎖定風險)

5. 運維成本(Operational Cost)
   上線後維護有多複雜?

實際打分例子(為新專案選狀態管理):

| | Zustand | Jotai | Redux Toolkit | Valtio | | ---------- | ------- | ------ | ------------- | ------ | | 團隊熟悉度 | 3 | 1 | 4 | 1 | | 成熟度 | 4 | 3 | 5 | 3 | | 適配度 | 5 | 4 | 3 | 4 | | 遷移成本 | 5 | 4 | 3 | 4 | | 運維成本 | 5 | 4 | 3 | 4 | | 總分 | 22 | 16 | 18 | 16 |

最終選 Zustand:適配度最高,團隊有基礎,遷移容易。

幾個常見的反模式

"這個庫 GitHub Star 最多"

Star 數量不代表適合你的場景。moment.js 有 4 萬 star,但它太重了,現在大家用 dayjs 或原生 Temporal

"這是大公司在用的"

大公司的場景不等於你的場景。他們有 1000 個工程師維護這個方案,你們有 5 個。

"新技術更先進"

最新 ≠ 最好。問題是:它解決了你現在面臨的哪個具體問題?

"先試一下再說"

"試一下"往往變成了"就這樣了"。POC 需要明確評估標準,否則很容易沉沒成本陷阱。

RFC 文件

我們團隊現在重要的技術決策都要寫 RFC(Request for Comments):

markdown
# RFC:狀態管理方案選型

## 背景

當前專案...存在以下問題...

## 目標

- 統一狀態管理方式
- 降低樣板程式碼
- 提升 TypeScript 體驗

## 候選方案

### 方案 A:Zustand

優點:...
缺點:...
風險:...

### 方案 B:Redux Toolkit

...

## 建議方案

方案 A(Zustand),原因:...

## 決策標準

如果 [條件],我們會重新評估。

## 影響範圍

- 需要遷移的檔案:...
- 預計工時:...

## 反對意見

@張工 認為...,回應是...

RFC 的價值不只是文件,而是:

  1. 強迫你想清楚
  2. 讓團隊有發聲機會
  3. 幾個月後可以查為什麼做了這個決定

不可逆決策 vs 可逆決策

貝佐斯的"單向門 vs 雙向門"理論適用於技術決策:

高可逆性(雙向門)→ 快速決策,試了不行就換
  - 狀態管理庫
  - UI 元件庫
  - 測試框架

低可逆性(單向門)→ 慎重決策,多花時間論證
  - 資料庫選型
  - 前後端架構(SPA vs SSR vs MPA)
  - 主程式語言/框架
  - 雲服務商選擇

對"雙向門"決策不要過度分析,做決定,跑起來再說。

小結

  • 技術選型用多維度矩陣,而不是"感覺最好"
  • 重要決策寫 RFC,讓團隊參與,留下決策記錄
  • 區分可逆和不可逆決策,不可逆的要更慎重
  • 避免:以 Star 數、大公司背書、新技術光環作為主要決策依據
  • 最重要的問題:這個技術解決了我們現在面臨的哪個具體問題?

MIT Licensed