2011年4月5日

從精實軟體開發到精實創業(Lean Startup)

1980年麻省理工學院開始一項國際汽車研究計劃,1990年發表的一篇「改變世界的機器」研究報告,把日本Toyota公司的「豐田式生產系統(TPS)」,歸納成為一套精實生產(Lean Production)方法,1991年出版了一本「The Machine That Changed the World : The Story of Lean Production」暢銷書,讓TPS及Lean自此聞名於世。

在精實生產的實務中,源自TPS的JIT(Just-in-Time,中譯為即時生產)可以說是最主要的核心精神,JIT強調「徹底的なムダの排除」,就是在生產過程中,隨時反省檢討,讓各種成本的浪費降至最低,只生產和庫存必要的量。

在精實生產過程要消除的七種浪費有:
  1. 生產過剩
  2. 不良品
  3. 加工
  4. 等待
  5. 搬運
  6. 庫存
  7. 動作
精實生產在軟體產業上,啟發「精實軟體開發」的概念,敏捷開發方法是目前談論最廣的實踐,它帶來七項精實軟體開發的關鍵原則。
  1. 減少浪費(Eliminate Waste)
  2. 品質優先(Build Quality In)
  3. 創造知識(Create Knowledge)
  4. 延遲承諾(Defer Commitment)
  5. 快速交付(Deliver Fast)
  6. 尊重員工(Respect People)
  7. 整體最佳化(Optimize The Whole)
在軟體開發上,精實是很實際且有用的實踐理念。例如其中「測試驅動開發」的方法,要求開發團隊在寫程式之前,就先把測試案例寫好,對於觀念還未改變的開發團隊,可能認為要「多」寫那些測試代碼,很麻煩。但實際上,測試代碼可以幫助我們「恰恰好」寫出客戶真正需要的功能,或是某一個迭代流程需要的功能,不會多也不會少。因為在有限的專案準時交付時間內,多寫一些未來才可能用得到的代碼,都會影響到開發其他功能代碼的時間,嚴重則會影響到下班時間。而通過測試,也代表著品質達到測試所設定的水準。

當測試代碼能夠覆蓋90%甚至100%的程式碼,就表示通過自動化測試之後的軟體,差不多已經是可以交付的軟體,省下人工測試的瑣碎過程(如果真的有經過測試),所以能夠縮短軟體每個階段,交付到客戶手上所需要的時間。

有很多軟體開發的經驗,靠著口述傳承是很沒效率的方法,讓資深程式設計師花很多時間去指導菜鳥,等於耗損了大量高品質的產能。所以使用Wiki平台作知識管理、使用Issue Tracking工具記錄問題的解決經驗,都是一家軟體公司創造和分享知識的方法。有許多經驗及技巧不容易被寫下來,這時候Pair Programming和Code Review就很重要,因為菜鳥缺乏經驗,獨自一個人寫的成堆代碼,可能挖了很多洞還藏了機關,之後要重構都會相當困難,就會讓軟體專案更快變成棕地。

尊重員工對於軟體開發這種高腦力密集的產業很重要,即使是一線程式撰寫人員,做的只是程式碼打字(Coding)工作,但由於多數開規格的所謂系統分析師、設計師,根本很少把細節想、寫、說、畫清楚,所以一個規格開好,可能會有上百種實作方法,一個感覺自己不受尊重的員工,肯定會選擇最不用動腦,同時也最耗時間、最沒效率、最不安全的那一種,即使開規格的人看得出不同程式實作的差別,還是得再花不必要的時間檢視和修正。

而「精實」並非一昧想辦法降低成本,合理付出一些必要的投資,例如開發軟體需要的高效能電腦、雙顯示器,以及舒適但不奢華的辦公桌椅,就可以減少很多不必要的浪費,例如等待慢吞吞的電腦回應、在一個小尺寸單顯示器上來回切換視窗的時間浪費、因為腰酸背痛無法專注開發等。(開發人員完全指南)

掌握「精實」的原則,持續改善某項事務的流程,減少浪費讓成本降低,最終目的當然就是得到更多的「$$$$$」,這是很務實的一件事。所以,精實不是高談理論,也不是照著某個標準流程,而是在我們實際從事的日常工作中,藉由精實思考(Lean Thinking),務實地將減少浪費的作法徹底實踐,這樣就能讓我們減少不必要的時間浪費,獲得更多的報酬,有了更多的自由時間和收入,就會有更好的生活品質。

如果你已經知道,怎麼「精實」開發軟體,也想要創造出新的軟體產品或網路服務,必須再瞭解Eric Ries從2008年開始提倡的「精實創業(Lean Startup)」理念。這個適用於網路軟體創業的成功模式,受到華爾街日報、哈佛商業評論的報導,台灣天下雜誌在「用免費資源做生意 0元創業潮」,也提到這股創業的新趨勢。精實創業的觀念,不只適用於新成立的產品開發團隊,對於一家公司想開發新的產品,願意接納新時代的改變、採用新的方法及策略,也是依然受用。

首先,我們必須先弄清楚這個已經被剷平的軟體開發世界。

立足於2011年,資訊創業者不可不知自己有哪些優勢:
  • 擁有電腦及網路的成本,非常低,大學生擁有筆電+iPhone+行動上網隨處可見。也就是說,只要花費3-5萬元,就可以擁有一家大企業提供給員工使用的相同設備。
  • 免費的線上(硬要冠上雲端也是可以啦)服務非常多。只要註冊幾個新帳號,擁有的免費運算及儲存資源,就媲美過去一家大型企業才能擁有的資源。
  • 大型企業用來生產軟體所需要的工具,幾乎都能免費取得。開發軟體不像傳統製造業需要先像銀行貸款、集資購買幾百萬的機器,而現今許多大企業也採用自由軟體,如Apache、Tomcat、MySQL等,這些一直以來都不需要花錢買入。個人或新創團隊,只要下載Eclipse、Google Android SDK這些免費軟體,再花點小錢註冊一組Android Market開發授權帳號,就能和最賺錢的行動應用開發商擁有相同的開發工具。
  • 甚至連微軟都免費提供商業軟體給新創軟體公司(詳見BizSpark計劃)。
  • 一家剛成立的公司,只要組裝好幾部便宜又高效能的PC,裝好開源的Hadoop/Hbase,即可擁有Private Cloud,不必燒大錢就能運用Map/Reduce、BigTable技術開發新服務。

能善用全世界的力量創造出來的資源,不論是幫自己或幫公司開發新產品,都能讓產品一開始就站上巨人的肩膀。

但是,現實是很殘酷的。

大企業有財力足以犯錯個幾次也毫髮未傷,即使一直做出錯的產品,只要幾個已經成功的產品還是賺大錢,就可以繼續燒錢犯錯學教訓。想想,XP到7之間那個V開頭的產品?還有那堆在Google Lab夭折的服務

而新創公司,個人、共同創辦人,可不見得禁得起這樣連續的挫敗,畢竟小則傾家蕩產、大則家破人亡的風險,不是每個人都能承擔得起。

所以,多數的人即使有遠大的夢想,最後還是只能不斷用邊抱怨邊上班的方式度過終生。

如果,有從事刺激戶外活動的朋友,應該都能從一次又一次在別人眼中接近瘋狂、差一點就會歸西的刺激經驗中學到,與其選擇逃避「風險」,不如學會管理「風險」,畢竟人活著隨時都是要面對各種風險和不確定性,和天外飛來橫禍的意外比較起來,做產品失敗的風險,還算是容易管理。「精實創業」正是告訴我們,如何去管理軟體及網路服務創業的不確定性風險。

日前,Eric Ries在SlideShare分享了這份簡報。

而立之年的創業家Eric Ries,在精實創業模式,提供許多截然不同的管理方法。「The Lean Startup」是作者即將出版的新書,或許在第四季就有機會問世。這份簡報源自作者最近的一次演講,以下將摘要整理部份簡報的內容。
  • 什麼是新創事業(startup)?
    • 創業是在極高的不確定性的條件下,發行一項新的產品或服務
    • 和公司規模大小無關
  • 創業算是一種「實驗」!
  • 很多網路新創事業,最後都失敗了(參考簡報第9-10頁,列了一大票LOGO)。
  • 科學管理(scientific management)之父泰勒(Frederick W. Taylor)要負責。(過去的許多讓新產品失敗的管理方法都源自泰勒老兄)
  • 創業家到處都是。(你想創業,別人也想)
  • 創業家精神(entrepreneurship)就是一種管理
    • 我們的目標,是要建立一個制度/機構,而不只是產品
    • 傳統的管理實踐不管用了
    • 極端不確定的創業環境下啟動,需要實踐方法及原則
    • 不只是「兩位老兄在車庫合夥創業」
  • 那些成功的創業者有些什麼?
    • 他們由PDA的數位鈔票開始,但成了eBay的線上付款系統
    • 他們由BASIC的直譯器開始,但成了世界最大的作業系統獨占廠商(指微軟)
    • 他們想做一家線上遊戲公司,遊戲一點都不紅,但聊天室的照片分享功能卻大受喜愛,最後變成Flickr這個世界上最受歡迎的照片分享平台
  • 創業者必須了解「Pivot」,就是山不轉路轉路不轉人轉,當你的產品和市場互動之後,可能發現市場跟你想像的並不一樣,這時候要運用已經建立的資源,重新調整組織及方向。(但前提是:必須把產品實際丟到市場上,給實際的客戶使用,才會有個開始。)
  • 速度是決勝關鍵:如果我們減少每次「Pivot」需要的時間,自然就會在資金燒完以前增加成功的機會。
  • 傳統的產品發展流程:需求、規格、設計、實作、修正、維護,處理的是已知的問題和已知的解決方法。
  • 我們都知道及時問世、符合預算、具有高品質、具有漂亮的設計很重要,但是,如果這世界上根本沒人想要這東西,把它做出來又有何用?這麼一來,只能算是「成功開發出失敗的產品」。
  • 精實(Lean)從W. Edwards Deming(提出全面品質管理)、TaiichiOhno(提出豐田式生產)開始。
  • 敏捷產品開發:產品要解決已知問題,但是用未知的解決方法。(採用敏捷軟體開發,讓解決方法尚未清楚的專案能起步)
  • 精實創業:用未知的解決方法,解決問題未知的產品。(同樣採用敏捷軟體開發實作產品,但同時也要著手「客戶開發」,因為客戶知道他們想要的產品是什麼,而創業者不完全清楚)
  • 「(想法)-[建構]-(程式碼)-[測試]-(資料)-[學習]-再回到(想法)」是一個迴圈,精實創業要最小化跑這個迴圈所需的總計時間。(測量指的是測試產品是否好用?,包括對客戶)
  • 所以要,快速建構(Build Fast)、快速測試(Measure Fast)、快速學習(Learn Fast)
  • 學習的三個里程碑(milestones)
    • 建立基準線
      • 建構最小可發行產品(Minimum Viable Product,簡稱MVP)
      • 看看使用者怎麼用它
    • 發動引擎
      • 試驗看我們如何把產品從基準現推至完美
    • 修正方向或堅持下去
      • 如果試驗結果是條死路,那就是該修正方向(Pivot)的時候了
  • 所以會有很多疑問?
    • 我們怎麼知道何時該修正方向?
    • 願景、策略、還是產品?
    • 我們要測試(驗證或評估)些什麼?
    • 我們的產品要怎麼成長?
    • 我們如何創造價值?
    • 在最小可發行產品應該有些什麼?
    • 我們可以走得更快一些嗎?
  • 上面的問題,等你買作者的書之後就會知道了(呃!...)
  • 迷思(一)、精實代表要盡可能節省成本
    • 事實是:精實創業方法和成本無關,它的重點在於「速度」
      (如果為了節省成本,產品拖了一兩年才問世,那也是失敗的開始...)
  • 迷思(二)、精實創業只適用Web 2.0/網際網路/消費性軟體公司
    • 事實是:只要面對客戶需要的產品仍有諸多不確定性,就可以套用精實創業。
  • 迷思(三)、精實的新創事業都是很小又剛起步
    • 事實是:精實創業也可以是雄心壯志而且能夠注入龐大資金的事業
  • 迷思(四)、精實創業使用測試評估或使用者回饋的資料當作願景
    • 事實是:精實創業由令人信服的願景驅動,且對於願景各種要素的測試相當嚴謹
  • 最小可發行產品(MVP)
    • 看得到遠景的顧客,會因為產品能夠解決真正的問題,而不在意那些目前還缺少的功能
    • 讓我們可以向願景跨出一小步,而不是在原地繞圈子
    • 對於有遠大願景的產品才需要MVP,小產品不需要

名詞對照:

延伸閱讀:

2 則留言:

  1. 這一篇文字的份量很夠 如果在資訊爆炸的結果下 大家面對好的資訊只是吸收

    我會說 實在是太自私了 感謝尚誌主人願意寫這一篇文章 在Pivot與精實的領域

    特別是引述了ERIC RIES的書(我覺得有能力能引述國外資訊的部落客實在很行)

    為我解了甚多疑惑

    可以給的建議是 .. 部落右方的UI有點雜亂 淺見

    miq747@hotmail.com _JASON SPARK

    回覆刪除
  2. 多謝支持,目前 The Lean Startup 這本書已出版,希望大家多多分享囉

    *網誌側欄我再想想辦法清理 :)

    回覆刪除

lyhcode by lyhcode
歡迎轉載,請務必註明出處!