副標題:《軟體開發中的精實擴展應用 (LEAN in Software Development: Expanded)》
在《綠洲計畫》的第二十四章,艾佛勒帶領團隊進行了一場「浪費狩獵」工作坊,他當時在白板上列出的「軟體開發中的八大浪費」,可能讓一些熟悉精實思想的讀者感到既熟悉又陌生。其中,「不完整的半成品工作」、「任務切換」、「重複學習」等術語,顯然不是源自豐田汽車的生產車間。
這些術語,正是精實思想在從製造業的「物理世界」,遷移到軟體開發的「數位世界」時,所經歷的深刻的「轉譯與演繹」。這一章,我們將專門深入探討,豐田的經典浪費模型,是如何被敏捷和精實軟體開發的先驅們,巧妙地「客製化」,從而成為指導現代科技團隊提升效率的強大思想武器。
正如我們在第二十章所提及的,將精實思想引入軟體開發領域的奠基人,是瑪麗·波彭迪克 (Mary Poppendieck) 和湯姆·波彭迪克 (Tom Poppendieck) 夫婦。他們在《精實軟體開發》一書中,面臨的第一個挑戰,就是如何將豐田那套針對「看得見的汽車零件」的浪費定義,翻譯成能讓軟體工程師理解和共鳴的語言。
這個翻譯過程,並非簡單的字詞替換,而是一次深刻的概念類比 (Conceptual Analogy)。他們抓住了每一種浪費背後的本質,然後在軟體開發的價值流中,去尋找與之對應的、功能等價的浪費形式。
讓我們來詳細地、並排地看一下,這個精彩的「翻譯」過程是如何發生的。
豐田生產方式 (TPS) 的七大浪費 (TIMWOOD) | 軟體開發中的八大浪費 (《綠洲計畫》版) | 演變邏輯:概念的類比 |
I - Inventory (庫存) | 1. 不完整的半成品工作 (Partially Done Work) | 本質: 佔用了成本但尚未產生價值的東西。類比: 物理庫存是囤積的零件;軟體庫存則是那些已投入開發時間,但未交付給用戶的功能代碼。它們是「思想的庫存」。 |
O - Over-production (過度生產) | 2. 額外的功能 (Extra Features) | 本質: 做了超出客戶當下需要的東西。類比: 物理上是多生產了汽車;軟體上則是多開發了客戶並不需要或用不上的功能,即所謂的「過度開發」。 |
N/A (第八浪費) | 3. 重複學習 (Relearning) | 本質: 未能有效利用現有資源。對應第八浪費:未被利用的人才/技能類比: 物理上是讓工人做低於其技能的工作;知識工作中,最常見的人才浪費,就是因為知識未被分享,導致團隊反覆解決同一個問題,浪費了已有的集體智慧。 |
T - Transportation (運輸) | 4. 交接 (Handoffs) | 本質: 在不同處理單元之間不必要的移動。類比: 物理上是零件在工廠間的運輸;知識工作中,則是「資訊」在不同角色/團隊間的傳遞。每一次交接,都像一次運輸,有延遲和丟失資訊的風險。 |
W - Waiting (等待) | 5. 延遲 (Delays) | 本質: 因依賴而產生的空閒時間。類比: 物理上是工人在等待前面的工序;軟體上則是開發在等待需求澄清、代碼在等待審查、功能在等待部署。 |
M - Motion (動作) | 6. 任務切換 (Task Switching) | 本質: 不產生價值的、消耗能量的動作。類比: 物理上是工人的身體移動;知識工作中,最消耗能量的,是大腦在不同任務上下文之間的「認知移動」。每一次切換,都是一次巨大的認知浪費。 |
D - Defects (缺陷) | 7. 缺陷 (Defects) | 本質: 不符合質量的產出及修復工作。類比: 物理上是不良品;軟體上就是Bug。修復Bug所需的所有工作,都是由最初的缺陷引發的浪費。 |
E - Extra-processing (過度加工) | 8. 非必要的流程 (Non-Essential Processes) | 本質: 做了超出價值所需的額外工作。類比: 物理上是對零件進行不必要的打磨;軟體上則更廣泛,包括編寫無人看的文檔、過度設計的架構、官僚式的審批等,都是在核心價值之外附加的「 非必要流程」。 |
在第二十四章所列出的「軟體開發八大浪費」,正是這一整套「翻譯」工作的結晶。之所以選擇使用這個「軟體開發定製版」而非豐田的原始版,有以下幾個重要原因:
建立共鳴 (Building Empathy & Resonance): 如果他對著一群工程師大談「運輸」和「庫存」,大家可能會感到困惑和疏離。但當他說出「任務切換」和「不完整的半成品」時,幾乎每一個工程師都會立刻點頭,因為這精準地描述了他們日常工作中最大的痛苦來源。使用符合對方語境的語言,是所有有效溝通的第一步。
讓浪費變得「可識別」 (Making Waste Identifiable): 這個定製化的列表,為團隊提供了一套清晰的「診斷透鏡」。在「浪費狩獵」工作坊中,團隊成員可以非常容易地將自己的親身經歷,對應到這八個具體的類別中。它將模糊的「不爽感」,轉化為了可以被分類、被討論、被量化的具體問題。
聚焦於「知識工作」的獨特性: 這個列表,特別突出了知識工作的幾個獨特挑戰,如「任務切換」的認知成本和「重複學習」的知識管理問題。這體現了精實思想在應用時,必須因地制宜,而不是生搬硬套。
這個「軟體開發八大浪費」列表,是你可以在任何技術團隊中,立刻使用的強大工具。
練習一:「浪費回顧會」: 在你的下一次敏捷回顧會上,將這八大浪費作為一個專門的討論主題。讓團隊成員匿名投票,選出「在上一個Sprint中,對我們團隊影響最大的三種浪費是什麼?」。然後,圍繞得票最高的浪費,進行一次深入的根源分析,並設計一個小小的改善實驗。
練習二:「個人浪費日誌」升級版: 在你記錄個人浪費時,不再只是簡單地畫「正」字,而是將你遇到的浪費,精確地歸類到這八個類別中。比如:「下午被打斷三次去參加臨時會議(任務切換)」、「我寫的一個功能分支,在本地躺了一周都沒人審查(不完整的半成品)」。這種精確的分類,能幫助你更清晰地看到自己效率損失的模式。