Ready, fire, aim…

— Anon

核心概念#

我們經常在談論開發軟體時用「命中目標」來比喻。這是一個非常有用且視覺化的隱喻。特別是,如何在變動的世界中命中目標是很值得思考的。

曳光彈在彈匣中以一定間隔混入普通彈藥。發射時磷光會點燃,留下一條從槍口到命中目標的火光軌跡。士兵們使用曳光彈來校正瞄準——這是在實際條件下的務實、即時回饋。

軟體中的曳光彈開發#

與射手一樣,你也在黑暗中試圖命中目標。使用者的需求可能模糊,你可能使用不熟悉的演算法、語言或函式庫,而且專案需要時間完成,環境在你完成前幾乎肯定會改變。

傳統的做法是把系統規格寫到死——用死推算法開一槍,然後祈禱。務實的程式設計師則傾向使用軟體版的曳光彈。

在黑暗中發光的程式碼#

我們尋找能從需求快速、可見、可重複地到達最終系統某個面向的東西。

Tip 20 - Use Tracer Bullets to Find the Target(使用曳光彈找到目標)

尋找重要的需求、你有疑慮的地方、以及你看到最大風險的地方。然後優先安排你的開發,讓這些成為你最先編碼的區域。

第一顆曳光彈#

第一顆曳光彈就是:建立專案,加一個 “hello world!",確保它能編譯和執行。然後尋找整體應用程式中的不確定領域,加入使其運作所需的骨架。

曳光彈式開發的重點是建立一條從需求到系統各層的端對端路徑,先實作最小但可運作的版本。

曳光彈程式碼的優勢#

優勢說明
使用者能早期看到東西在運作他們會欣喜地看到系統的可見進展,也會貢獻回饋
開發者有一個可以工作的結構最令人畏懼的空白頁已被填滿,團隊有了端對端的架構
你有一個整合平台可以每天整合(甚至一天多次),而非嘗試大爆炸式整合
你有東西可以展示專案贊助者和高層總想看 demo,用曳光彈程式碼你永遠有東西可以展示
你對進度有更好的感覺開發者一個一個解決 use case,更容易衡量效能和展示進度

曳光彈不一定總能命中目標#

曳光彈顯示你正在打到哪裡。不一定總是在目標上。你調整瞄準直到命中目標——這就是重點。

同樣,曳光彈程式碼用在你不是 100% 確定方向的情況。別驚訝於前幾次嘗試沒命中。調整你手上的東西讓它更接近目標——因為你用了精實的開發方法論,少量程式碼的慣性小,容易且快速地改變。

曳光彈程式碼 vs. 原型#

兩者有重要區別:

  • 原型產生用完即丟的程式碼
  • 曳光彈程式碼雖然精簡但完整,會成為最終系統骨架的一部分

把原型想像成偵查和情報蒐集,在發射第一顆曳光彈之前進行。原型探索特定面向,曳光彈建立整體架構。

相關章節#

  • Topic 13,原型和便利貼
  • Topic 27,不要超越你的車頭燈
  • Topic 40,重構
  • Topic 49,務實的團隊
  • Topic 50,椰子不夠用
  • Topic 51,務實的入門套件
  • Topic 52,取悅你的使用者