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,取悅你的使用者