敏捷開發主流方式:精益開發
本文列舉了精益開發的七條原則,以及對這些原則做了進一步的分析解釋。
精益開發
我先把精益開發的概念和七條基本原則列一下,然后再逐條原則表述一下我的理解。
概述
精益(Lean)管理的思想起源于豐田公司,旨在創造價值的目標下,通過改良流程不斷地消除浪費。這種方法現已被廣泛用于生產制造管理,對于IT系統建設,精益開發的常用工具模型是價值流模型。
精益開發的基本原則
- 杜絕浪費:將所有的時間花在能夠增加客戶價值的事情上。
- 推遲決策:根據實際情況保持可選方案的開放性,但時間不能過長。
- 加強學習:使用科學的學習方法。
- 快速交付:當客戶索取價值時應立即交付價值。
- 打造精品:使用恰當的方法確保質量。
- 授權團隊:讓創造增值的員工充分發揮自己的潛力。
- 優化整體:防止以損害整體為代價而優化部分的傾向。
對原則的理解
1. 杜絕浪費
浪費是可恥的,這個很好理解,但是在這條的描述中,精益提出“把所有的時間都放在能夠增加用戶價值的事情上”,這樣太容易被曲解了,最值得考究的就是什么才算**能夠增加用戶價值**的事?
及時交付對用戶有價值的產品算是增加用戶價值,那么我們要做的事就僅此一件了嗎?
顯然太片面,我們需要做的遠不止這一件事。
**健康的團隊才能產出優秀的產品**,“畢其功于一役”的大決戰當然是一場拼盡全力的沖鋒,但是“路漫漫其修遠兮”,“上下求索”顯然又是個長跑的過程,不健康的團隊談不到長遠的發展,所以“所有時間”中必然要包括培養出一只有戰斗力的團隊。
再有,概述中就提到的,我們需要通過什么手段消除浪費呢?
**通過不斷地改良流程**,敏捷宣言中說“個體的主觀能動性以及個體之間的互動優于既定流程和工具”,這只是強調個體的主觀能動性和互動更加重要,但是并沒有抹消掉流程的重要性,而且敏捷非但沒有忽視流程的重要,恰恰相反,在敏捷開發的原則中說“簡潔是減少重復勞動的藝術”,而流程就是保持簡潔有力手段,這一點在精益中被尤為強調,所以在制定更加簡潔高效的流程上花時間絕不是浪費。
2. 推遲決策
提出盡可能多的可行方案,有利于針對實際情況做出選擇。
我們應該把重點放在后半句的“時間不能過長”上。
假設我們把相當寬裕的時間留給了提出盡可能多的方案上,我們得到了相當多的可行方案,但是方案再多總要根據實際情況選擇最行之有效的那一個,那么怎么評判是不是最行之有效的方案呢?
簡單點講就是找到這些方案中最能滿足“時間”、“范圍”、“資源”三者之間平衡的方案,耗時太長顯然就壓縮了項目的可用時間,對“范圍”和“資源”也必將產生影響。推遲決策是為了找到平衡“時間”、“范圍”、“資源”的最佳方案,那么掌握不好“推遲”的時間就是在舍本逐末。
3. 加強學習
這和上面講到的培養有戰斗力的團隊相呼應,學習是強化團隊、保持團隊活力的最佳方式,至于什么是“科學的方法”,我覺得應該是最適合自己團隊的方法,是組建讀書會、學習小組這類組織,還是搞黑客馬拉松、分享講座這種活動看你對團隊的了解,哪種方法最有效,最能持續發展就選那種。
4. 快速交付
精益開發是敏捷開發的一種形式,既然是敏捷開發那就不能不提快速交付,在我們軟件開發中的實踐就是盡可能縮短迭代周期,并且在每次迭代中給用戶提供穩定可運行的并且有價值的軟件,這是敏捷開發的核心手段,精益中如此,其他的敏捷方式比如“極限編程(XP)”、“水晶方法”、“動態系統開發法(DSDM)”、“SCRUM”也是如此,只是各種方法都有自己具體實踐,幾種的方式對迭代的實踐我會放到后續的文章中討論。
5. 打造精品
“XX出品必屬精品”,當一個公司被冠以這樣的評價,如果這個評價是正面的而非帶有諷刺意味,那么說明這家公司得到了用戶極高的認可,“贏在用戶”一語雙關,既是說精品的受益者是用戶,也是說只有精品才能在競爭中贏得用戶。
6. 授權團隊
團隊,還是團隊,好產品離不開好團隊,好團隊要培養也要被信任,授權團隊可以最大化地激發團隊中成員對產品的主人翁意識。
用人不疑,疑人不用,需要的是睿智和胸襟,不能放任不管任由其自生自滅,也不能大權獨攬,手里攥著大印把角都磨圓了,還怎么激發團隊的主觀能動性。
7. 整體優化
整體優化不應該被簡單理解為全面優化,我認為對整體有利的優化就可以稱之為整體優化,當局部優化的程度達到足以提升整體的成效時就是一次整體的優化,這條原則強調的是局部優化的投入不應該大到拖延整體的進度。
當你跟上級說我要優化一下項目架構(不要以為架構層面的就是整體,說到底研發團隊也只是整個項目的一部分),大概要花兩三個月的時間時,可以讓軟件的執行效率提升20 ~ 30%,否則將來軟件的執行效率會很差,一般情況下你會得到什么答復?
糟糕一點兒當然是被一口回絕,好一點兒的可能會被問問“現在的架構有什么局限?”、“新架構能帶來什么好處?”,多數人在多數情況下是爭取不到這么長的時間去做這種拖慢產品進度的優化的,無關于這次優化是關乎局部還是整體。
或許經過幾個版本的迭代后你所擔心的問題終于發生了,軟件運行的效率大大降低,這個時候我們應該暗暗冷笑上級只顧眼前利益嗎?
我覺得我們應該考慮一下自己給出的方案是不是真的考慮了整體,方案夠不夠敏捷。
其實張口就要幾個月的時間本身就是沒有考慮到整體,技術停下來優化各兩三個月,那讓產品、設計、運營放三個月長假嗎?;蛘吣悛毩⒊鰜砀銕讉€月,你確定幾個月后你還追的上產品這幾個月來的迭代?
一個優化需要兩三個月的時間這顯然是不夠敏捷的,甚至無法保證最終優化的框架是不是真能達到預期的效果,“不能達到預期效果”正是困擾瀑布流模式的問題,也是敏捷開發提出短周期提交可用軟件所要解決的問題,當你坐在上級的位置上肯定也要考慮局部優化對整體利益的影響,既然我們是在敏捷開發這個大的項目開發流程下,那么局部的優化也應該遵循敏捷的原則,化整為零,逐步迭代。
我想針對上面說的花兩三個月的時間優化框架這個請求,如果我們提出的方案是三到五個迭代每個迭代兩到三周,每個版本都可以讓項目開發的效率提升5~10%,再跟上級講講不優化可能帶來的軟件運行效率問題,我想上級點頭的可能性會大大增加吧。
本文由@汪仔8925 原創發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自Unsplash, 基于CC0協議。
??????
小哥,可以加v多交流哈哈哈
?? 尷尬了,后續的文章發不了了,“不符合平臺內容”。產品、項目不分家吧?畢竟名字都一樣pm
我在其他論壇上也投放了這篇文章,我之后在這個論壇的活躍度會更高些。
我是個軟件工程師,從事移動端開發五年了,當我想整理過去五年來積累的技術經驗時發現我的技術樹構建的真是粗陋不堪,積累下來的不過是些應付日常產品開發和維護的經驗,很難談到什么精妙的地方,反倒是在和朋友聊天時發現這五年來在參加了數不清的大大小小的項目過程中對項目管理倒是積累一些可以聊聊的東西。我會把自己以往總結的經驗和知識不定期地投放到博客中?;蛟S真的有些不知深淺,請原諒一個初學者的無知,我希望能有幸和你交流,大家共同成長。