工程判斷與責任

在需求、時間、品質、成本與風險之間,做出適合當下條件的選擇

在需求、時間、品質、成本與風險之間,做出適合當下條件的選擇

工程問題通常沒有唯一答案

想得到的東西 可能付出的代價
更快交付 技術債、測試不足、範圍縮小
更高可用性 架構、基礎設施與維運成本
更彈性 更多抽象、設定與理解成本
更安全 流程摩擦、權限管理與額外驗證

先把決策條件說清楚

  • 目標與成功標準是什麼?
  • Deadline、budget、team skill 與既有資產
  • 哪些風險可以接受,哪些絕對不能發生?
  • 哪些資訊已知,哪些仍是假設?
  • 決策可逆嗎?錯了要付出多少代價?

Scope 與優先順序

  • Must、should、could、won’t
  • 先交付 end-to-end 的最小可用切片
  • 區分核心價值、必要護欄與可延後優化
  • Dependency、critical path 與 sequencing
  • Scope creep 出現時重新談成本與期限

Estimation 不是精準預言

  • 拆解已知工作與未知探索
  • 標示 dependency、風險、假設與信心區間
  • Spike/prototype 用來降低未知
  • 估算隨新證據更新,不把早期數字當承諾
  • Lead time、cycle time、throughput 提供歷史參考

Risk Assessment

Risk = 發生機率 × 影響程度
  • Avoid、reduce、transfer、accept
  • Prevention、detection、response、recovery
  • 建 risk register,指定 owner 與觸發條件
  • 高衝擊且不可逆的決策需要更深理解與更多證據

Build、Buy、Reuse 或停止

  • 是否已有服務、套件或組織能力可以沿用?
  • License、vendor lock-in、資料出口與長期成本
  • 自建的差異化價值是否值得維運責任?
  • 需求是否其實可以用流程調整解決?
  • 「不做」也是需要說明理由的工程決策

何時應該 Refactor?

  • 同一類變更反覆碰到多個地方
  • 缺陷、衝突、理解與測試成本持續增加
  • 新需求已使原本假設失效
  • 先比較重構成本、未來修改頻率與替代方案
  • 不為尚未出現的需求提前建立所有抽象

Decision Record

Context:當時的條件
Options:比較過哪些方案
Decision:選擇什麼
Trade-offs:交換了什麼
Evidence:依據哪些資料
Revisit trigger:何時重新評估
Owner:誰負責後續結果

新證據出現後

原本決策 → 條件改變 → 觀察失效訊號
        → 比較維持、局部修改或推翻
        → 留下 Decision Delta

成熟不是永遠第一次就選對,而是知道何時改變主意。

Ownership

  • 誰 approve requirement、architecture、security、release?
  • 誰在事故時有權停止、rollback 或切換流量?
  • Agent、工具與顧問可以提供建議,不是責任主體
  • 人工背書應集中在高風險、不可逆與領域核心位置
  • 決策、證據與 owner 都要可以追溯

看到 Agent 提出方案時

要能要求它列出 assumption、alternative、trade-off、risk 與 evidence,
再由有責任的人做最後決定。

工程判斷不是產生方案,而是選擇並承擔後果