1. 冰山效應:非技術人員只看得到 UI#
Joel 用冰山來比喻軟體開發中一個根深蒂固的溝通問題:非技術利害關係人(老闆、客戶、專案經理)判斷專案進度的依據,幾乎完全是他們能看到的東西——也就是使用者介面(UI)。
然而,UI 只是整個軟體的「冰山一角」。真正龐大且複雜的部分隱藏在水面之下:
- 資料庫設計與資料存取層
- 商業邏輯與規則引擎
- 安全性機制(認證、授權、加密)
- 錯誤處理與例外情況的管理
- 效能最佳化與快取策略
- API 設計與系統整合
- 自動化測試與部署流程
這個現象不是因為非技術人員「不夠聰明」——而是因為軟體的本質就是抽象的。你不能像看到一棟建築物的結構一樣,直觀地看到軟體的內部架構。唯一可見的介面就是 UI。
2. 這個認知落差造成的問題#
2.1 過早展示精美的 UI 會讓人以為專案快完成了#
這是最常見也最致命的問題。假設你花了一週做了一個漂亮的 UI mockup 或 prototype:
- 客戶看了之後說:「哇,看起來快完成了嘛!」
- 但實際上後端邏輯、資料處理、安全機制、錯誤處理都還沒開始
- 專案可能只完成了 10%,但客戶覺得已經完成了 90%
- 當後續開發花了「預期之外的長時間」時,客戶會感到困惑甚至憤怒
2.2 不成熟的功能需求開始湧入#
一旦利害關係人看到「接近完成」的介面,他們會立刻開始提出各種修改和新增需求:
- 「既然都快做完了,能不能再加一個功能?」
- 「這個按鈕的位置我覺得應該改一下」
- 「能不能把這邊的流程改成那樣?」
這些需求在專案早期出現原本是好事,但問題在於它們的產生是基於「專案快完成了」的錯誤前提,導致對時程的期望完全失真。
2.3 時程估算的崩壞#
當利害關係人基於 UI 的完成度來推斷整體進度時,會產生嚴重的時程誤判:
- 「UI 都做好了,應該再一兩週就能上線吧?」
- 「上次你改了一個畫面只花了兩天,為什麼這次要兩個月?」
- 管理層開始質疑開發團隊的效率,信任關係惡化
最糟糕的情況是:團隊為了「看起來有進度」而優先開發 UI,把困難的後端工作往後推。這會造成專案後期的爆炸——所有困難的問題同時爆發,而截止日期已經近在眼前。
3. Joel 的建議:管理期望#
3.1 控制展示的時機與方式#
- 在早期展示時,使用低保真度的草稿或線框圖(Wireframe),而非精美的設計稿
- 讓介面看起來「明顯未完成」——這能準確傳達專案的真實狀態
- 當後端工作正在進行時,明確告知:「畫面不會有變化,但我們正在建造底下的基礎設施」
3.2 主動解釋水面下的工作#
不要期望非技術人員自動理解「看不見的工作」。你需要主動溝通:
- 用類比讓他們理解(「就像蓋房子,你看到的外牆只是最後一步,之前需要地基、結構、水電管線」)
- 在進度報告中明確列出正在進行的非 UI 工作
- 展示測試結果、效能數據等「看不見的品質」的證據
3.3 謹慎使用 Prototype#
Prototype 是雙面刃:
- 好處:幫助團隊與客戶對齊需求,及早發現問題
- 風險:讓客戶誤以為「做出 prototype 就等於做出產品」
如果你決定使用 prototype,請在展示時明確說明:「這是一個外殼。裡面沒有任何真正的功能。它的目的是讓我們討論介面設計,而不是展示進度。」——然後重複說三次,因為他們第一次聽不進去。
4. 開發者的自我保護策略#
理解冰山效應後,開發者可以採取以下策略來保護自己與團隊:
- 先做困難的部分:先處理後端邏輯、資料模型、效能需求等水面下的工作,最後才做 UI。這樣當 UI 開始出現時,專案確實已經接近完成
- 持續溝通進度:不要等到有視覺上的變化才報告進度。定期告知利害關係人正在進行的工作,即使那些工作「看不到」
- 量化不可見的工作:用具體的數字說話——「我們完成了 47 個 API endpoint 中的 32 個」比「後端正在進行中」更有說服力
- 教育利害關係人:長期而言,幫助非技術人員理解軟體開發的本質,是減少摩擦的最有效方法
一個實用的進度溝通框架
在向非技術利害關係人報告進度時,可以使用以下結構:
- 已完成的可見部分:「登入畫面已完成」
- 已完成的不可見部分:「安全認證系統、密碼加密、session 管理已完成並通過測試」
- 進行中的工作:「正在建造訂單處理引擎,這部分不會有畫面變化,但是系統的核心」
- 真實的完成百分比:「整體進度約 35%,其中 UI 完成 60%、後端完成 25%、測試完成 20%」
這種溝通方式能幫助利害關係人建立更準確的心智模型。