精益生產(Lean)與敏捷開發(Agile)
精益生產(Lean Manufacturing)歷史
由日本工程師Taiichi Ohno從Toyota汽車生產系統(Toyota Production System)所歸納出的一套生產管理方法
其核心概念包含
- 開發產品應著重於需求而非供給端,簡單來說就是做別人想要或是已經下訂產品;而不是先做一個產品,再期望有人會想買這個產品
- 如果將整個製造過程切成數個小段的生產區間,則能提升效率
- 花費時間思考如何提升產品品質與生產力及效率
- 生產者有責任找出最適合自己的工作方式
- 生產者有必要持續改善自己得工作方式,而不是一昧的追尋以往既定的做法
此外也必須減少資源浪費,指的是任何無法創造價值的事情都必須要被排除。以下以軟體開發為例,舉出七種資源浪費情境
- 過多做到一半的工作
當功能定義, 規格, 設計等文件被工程師實際寫成軟體之前,都算是做到一半的工作,因而造成浪費(因為沒有實際產出) - 過度加工
在產品規劃過程中,花費大量的時間反覆糾節於小細節上是不必要的,例如PM開的規格書或是設計師的設計草稿;但由於現代社會的分工,每個員工被要求做出完美的文件或相關產出 - 一人多工
同樣在現代社會,公司為了擠出員工的最大產值,常常出現一個人需要同時處理多個專案的狀況;但軟體開發是需要抽象與創新思考的工作,當員工不斷的切換心智來處理不同專案工作時,中間轉換思考的時間就是一種浪費 - 等待與延遲
當產品Owner與團隊沒有良好搭配時,通常會造成過多等待時間的浪費,因為團隊前進需要產品Owner的決策或是檢視相關工作結果並給予回饋,沒有回饋或是較慢的回饋,都會導致產品開發進度緩慢或是沒有進度 - 忽視產品缺失(增加修正時間的浪費)
隨著產品不斷開發,越晚發現產品缺失,則需要付出越大的心力來修正這些缺失。解決方式就是快速回饋,快速測試,找出問題後即時修正及優化。很可惜的這樣的情況並不常發生,因為團隊需要一個"自在"的場合來分享並吸收這些回饋與建議,如果沒有則產品Owner必須要自己創造這樣得場合 - 交付
產品文件或訊息往往在交付給下一個人的過程中產生認知誤差或錯誤,甚至造成製作延遲與製作缺失 - 過度生產
顧名思義就是開發根本沒有需求的功能出來。預防過度生產的做法就是使用Smallest Possible Feature or Product(MVP)的概念來開發產品,必且先驗證產品的需求假設,再進行規模化或是優化開發
敏捷開發(Agile Development)歷史
敏捷開發是一個概念,而不是一個規範,當然現在已經有許多方法與工作流程被設計出來,實踐這樣的敏捷開發概念,但實際上還是必須依照自己公司文化,思考出可行的方式,一步步落實才能成功。
另外,由於敏捷軟體開發一開始是由工程師們所討論出的概念,因此最初並沒有考慮到如何將設計師納入這樣的開發概念內,因此後來又衍伸出敏捷設計(Agile UX)等想法,試著將設計團隊融入敏捷開發。
敏捷宣言(Agile Manifesto)
2001年17個軟體開發者於美國猶他的一間飯店中,討論各種軟體開發上遇到的問題與解法,並融合為一個基本共識,也就是敏捷宣言。
- Individuals and interactions over processes and tools
團隊內的互動重於工作流程與工具 - Working software over comprehensive documentation
實際的軟體產出重於詳細的規格文件 - Customer collaboration over contract negotiation
與客戶合作重於合約談判 - Responding to change over following a plan
針對問題快速改善重於遵循既定作法
過了幾個月後,根據上述四個核心價值,衍生出更實際的12個原則
- 團隊最優先的任務,是透過及早並持續地交付有價值的軟體來滿足客戶需求。
- 歡迎客戶改變需求,甚至已處開發後期亦然。敏捷流程掌控變更,以維護客戶的競爭優勢。
- 經常交付可用的軟體,頻率可以從數週到數個月,以較短時間間隔為。
- 業務人員與開發者必須在專案全程中天天一起工作。
- 積極的輔助成員來建構專案,給予他們所需的環境與支援,並信任他們可以完成工作。
- 面對面的溝通是傳遞資訊給開發團隊及團隊成員之間效率最高且效果最佳的方法。
- 以產出可用的軟體作為最主要的進度評估方法。
- 敏捷程序提倡可持續的開發。贊助者、開發者及使用者應當能不斷地維持穩定的步調。
- 持續追求優越的技術與優良的設計,以強化敏捷性。
- 以精簡為本,它是極力減少不必要工作量的藝術。
- 最佳的架構、需求與設計皆來自於能自我組織的團隊。
- 團隊定期自省如何更有效率,並據之適當地調整與修正自己的行為。
小結
精益生產與敏捷開發其實有許多相似之處,例如將長期專案切成各個短期目標進行開發,並快速交付給客戶或是進行需求驗證,重視團隊內的合作關係與溝通,強調團隊及個人皆需思考如何優化自身的產出。
而兩者不同之處在於一個是偏向硬體產品生產,另一個則是聚焦在軟體開發上。因此精益生產非常重視資源浪費,並提出七種避免資源浪費的情境,但不代表這些避免浪費的原則,就對軟體開發沒有幫助,應該要學習這兩種開發方式的優點,並以自己做得到的範圍開始實踐,朝向這樣的目標前進。
不一定要被稱為敏捷開發才能敏捷
References
https://www.projectmanager.com/blog/what-is-lean-manufacturing
https://blog.gds-gov.tech/the-biggest-myth-of-agile-development-faster-cheaper-and-better-outcome-27c20a95978c
https://en.wikipedia.org/wiki/Lean_manufacturing
https://www.agilealliance.org/
https://agilemanifesto.org/
https://twproject.com/blog/lean-agile-differences-similarities/