敏捷開發在中國的落地經驗

6 評論 12824 瀏覽 118 收藏 17 分鐘

誤解

人人都在談敏捷開發。但真正成功的案例其實不多,百度上搜“敏捷開發”,除掉推廣,第一條是“為什么我不推薦敏捷開發”。令人無語。

對敏捷開發存在誤解太多,就以那篇頭條來說,作者其實只試了皮毛,或者說只看到了粗淺嘗試帶來的惡果,而沒有領會Agile Development的本質。

最大的誤解,就是把敏捷當做了便捷,以為有一條捷徑。

首先來自老板,聽說有“敏捷開發”這樣的好東西,就可以肆無忌憚地壓團隊時間。

“啊,這個要這么久才能完成?!為什么你們不采用敏捷開發呢?”

在這種思維主導下,開發團隊不管應該不應該,只能把文檔、性能、安全、交互體驗等一時半會不爆發的問題擱置一邊再說。

對老板來說,敏捷開發最好的操作手段是daily meeting。因為老板喜歡開會嘛,每天固定一個時間,讓所有團隊成員匯報進度。Daily meeting變成了daily report。

其次來自程序員。

現在的程序員應該70%以上不是計算機專業出身吧?;蛟S對開發語言很熟,但是缺少系統邏輯思維訓練。更重要的是,嚴重缺乏項目管理/文檔管理的歷練。他們既不知道流程的重要性,也不知道死于流程的局限。對于敏捷開發,他們只是抱著一種學語言的態度去學習敏捷開發的具體方法,以及避開文檔、流程的小確幸。

所以對程序員來說,敏捷開發的“最大好處”是不用寫文檔。(因為程序員最討厭寫文檔了,僅次于看別人的代碼而沒有文檔。)

第三種誤解(或者誤導)來自推銷敏捷開發的培訓機構。

在我有限的接觸中發現,所謂敏捷開發培訓師往往是一些專業的培訓師,而不是產品經理或項目經理。他們培訓敏捷開發,就像培訓OFFICE辦公軟件一樣。對他們而言,敏捷開發當然是包治百病的靈丹妙藥。他們就是“捷徑”的推銷員,而不是經歷過爬坑的真正開發者。

本質

05年我第一次接觸SCRUM。培訓老師第一堂課便說,SCRUM is not a silver bullet!敏捷開發并非萬能。

同期培訓的同學,有很多來自微軟和雅虎,個個都是IT精英。和他們聊天時聽得出來,這些大公司不缺人才,但依然嚴重困擾于決策流程長,項目周期嚴重超標等問題。

那么敏捷究竟能解決什么問題?

或者反過來看,如果不用敏捷,那么可以采用什么方法呢?那就是傳統的軟件工程啊。其實這個問題也經常被提到,敏捷開發VSCMMI。

敏捷和軟件工程都是好東西,適用不同場景。問題的實質是,時代變了。

在PC時代,所謂軟件開發基本是2B。那個時候也沒有產品經理,而是需求分析師和項目經理。軟件收入是靠做項目,或者賣拷貝。這就決定了軟件項目的成功取決于兩點:

  • 正確理解客戶需求(或者說服客戶接受現有方案);~需求分析師
  • 用最小的人力成本完成客戶需求;~項目經理

CMMI在做的努力,就是想對某個領域的知識進行模式化,然后對這個領域的不同客戶復制項目??蓮椭菩院涂膳渲眯栽胶?,邊際利潤就越高。在這個方向上,軟件開發的高峰是SAP,IBM,Oracle的超級ERP軟件。在他們所服務的領域內,企業模式是固定的,至少是相對固定的。

而這種軟件服務領域的試錯成本非常高,一個企業不可能因為軟件因素而模擬運行或者停運。

但是在敏捷開發時代,環境變了。其實是由于環境先變了,才使得敏捷開發有了需要。互聯網帶來了兩個變化:

首先世界是平的了。軟件的復制和擴散大大加強,信息以前所未有的速度傳播到個人。以前必須通過企業再傳遞到個人的服務,可以直接為個人服務。以前是為出租公司寫調度系統,現在是為UBER、滴滴寫算法。

其次,世界是個人的。每個人都有自己獨特的需求要求被滿足,每個人的聲音也可以通過互聯網傳播。過去只要版本號一定,你打開WORLD、EXCEL后的界面肯定是一樣的。但今天每個人每個時刻看到的FACEBOOK、微信都是不一樣的。

這兩個變化導致軟件的高度多樣性和高速演化。過去我們在盜版市場可以用一張光盤收羅一年的新軟件和新游戲,而現在APPSTORE一天發布的新應用我們都看不過來。張小龍過去也許一年只需要更新Foxmail一次,但微信一個月就得升級。

因此,發現用戶想要什么,比工程師能做什么成為更重要的話題。這也是為什么沃茨尼克雖然在極客心目中仍然地位尊崇,但在商業社會上重要性遠遠不如喬布斯。

喬布斯因為對產品定位的準確,成為神一般的存在。也使得產品經理這個崗位得以神話。

而對一般人來說,如果沒有喬布斯的靈感,那么發現需求或解決方案的最好辦法就是試錯。當然,也有很多自詡喬布斯直接下注的。那是在敏捷之外的另外一種誤會了。

敏捷開發,就是面向試錯而來的。

為什么不要文檔而要看可用的軟件?因為可能有誤讀,可能現有文檔規范限制了表達,甚至可能在寫文檔的過程中,環境已經變化了;

為什么互動重于流程和工具?因為所有現存的流程和工具都是為解決過去已經存在的問題而設計的,而不是為正在發生的問題設計的;

為什么和客戶協商重于合約?因為客戶也不知道他/她要什么,甚至我們都還沒找到嚴格意義上的“客戶”呢?一個新產品,即便是“好”的,往往也需要一批潛在客戶去嘗試去體驗,發現最適合的一個子類人群;

拔高地說,做敏捷開發要有向死而生的勇氣。如果沒打算重構,那么就得好好計劃。如果要做敏捷開發,就得做好下一輪重新來過的準備。

因此對老板來說,敏捷開發不見得就會節省時間;但是能更準確地知道項目成本,或者更早知道產品的問題。

對程序員來說,敏捷開發是通過小改來避免大改。用前期的的失?。ㄔ囧e)來保證最終結果;而不是順風順水地沖到一個大坑里。(當然,有的程序員不這么想。因為小改是個人麻煩。而大改是整個項目組甚至公司的事情)

最后說下培訓機構。回想起來,我當年的授課老師也是收費上課,但他們的商業模式卻大不相同。授課只是普及概念,他們真正的收入來自親自入駐企業帶隊做項目,或者駐場培訓SCRUMMSTER。因此無論是是從實際出發,還是要給自己留條后路,他們都會強調敏捷開發并非萬能,必須結合產品/項目/企業實際情況而定。

實踐

前面說的都是虛的,現在來談實踐。在國內國外嘗試過敏捷開發十多年,每一次嘗試都帶來新的體會。

作為SCRUM MASTER,面臨三種考驗。

第一,當然是老板了。

非技術出身的老板基本上沒有真正了解敏捷開發的。這沒關系。接上文,老板關心的是否能更快交付。我的策略是拿敏捷開發作為籌碼,和老板談價還價。敏捷需要保持開發團隊的完整,需要跨部門抽調人員,或者擴大產品經理/項目經理的職權;敏捷需要保證開發團隊的專注,至少一個sprint周期內的無干擾;需要讓豬走開,需要和客戶(用戶)直接接觸。這都需要管理層的支持。所以我會拿更精準(同時也必須是更短)的交付計劃與老板做交換。

然而坦白地說,如果能夠得到完整的團隊和專注的時間,不采用敏捷也能有更高效的產出。^_^

第二重考驗來自團隊。

作為SCRUMMASTER,認清自己的團隊成員也許比做需求分析更重要。

團隊成員中有的可能并不能完全勝任自己工作,按照標準SCURM模型這是不能接受的!但現實往往如此,不管大公司小公司都會遇到人員短缺的問題。

團隊成員有的來自其他部門,他只是想做豬而不是雞。

團隊成員有的曾經聽說過敏捷開發,因此非常急切地想嘗鮮,甚至主動推薦某種協同工具。

團隊成員有的曾經經歷過“敏捷開發”并且有著糟糕的體驗,比如上文提到的作者。他對這一套有著非常強烈的抵觸情緒。

但最危險的不是他們,而是團隊中的技術大牛。

對的,就是技術強責任心重勤勤懇懇還特別愿意幫助新同事的大牛同學。

在項目KICKOFF會議上,大牛同學想好了項目實施方案,準備嘗試新的技術框架;大牛同學愿意教小白兔怎么使用;小豬同學來不及做的部分,大牛同學也準備接過去;其他同學也因為大牛的存在,而對項目增添了信心。

然后在第一個SPRINT周期的末尾,大牛同學通宵加班,并建議將這輪迭代延長兩周,這會保證新框架可以穩定上線并且提供十倍的靈活性和二十倍的穩定性。

如果你同意了,苦逼之旅就開始了。大牛同學最終花了三周時間完成了新框架,但是除了底層模塊,前端功能什么也沒有。老板在等了一個月之后急著要看DEMO,如果這個項目有問題,那么小豬同學就回他自己部門了。而大牛和小白兔已經幾天沒合眼了…

敏捷就是面向試錯,所以敏捷開發要竭力避免開發過程中的完美主義,而要保證穩定持續的結果輸出,從結果反饋尋求答案。團隊中的技術大牛是最容易走入技術導向誤區的人,同時他也最容易影響他人。

那么要不要嘗試新技術新框架呢?當然可以。但是程序員必須具備有限優化的能力,在一個迭代周期內進行小范圍的嘗試。項目本身不應該是新技術的試驗田。

對于其他同學的問題,很多時候我并沒有告知他們這是一個敏捷開發過程。只是通知他們按階段交付結果,結果最重要,文檔、會議、協同工具都是手段而已。如果他們喜歡DailyMeeting,那么就開;如果他們喜歡用Worktile,那么就用。SCRUMMASTER可以推薦工具,但不強制實行。只有當團隊自身發現這個工具有利于他們更好地交付結果,他們才會真正地去使用這些工具。

另外一些最基本的經驗:

  • 盡可能保持人員穩定;
  • 盡快排除情緒不穩定的成員;
  • 在一起辦公;
  • 不超過十個人;

最大的考驗,嗯,來自于…SCRUMMASTER自己。

換句話說,在這個項目團隊中,SCRUMMASTER究竟是怎么樣的一種存在呢?

對一個沒接觸過敏捷開發的團隊成員來說,經典的SCRUMMASTER是一個完全不參與實際項目開發,只是做做思想工作的精神鼓勵師啊。

但其實對老板,對團隊來說,你才是那個OWNER。

如果每個項目成員都很牛逼地勝任本職工作,并且充分理解敏捷開發的精神,SCRUM MASTER的確可以抽象化了,或者就由某個軟件替代了。但其實這個角色才是最無法抽象或者被替代的。

在我的實踐經驗中,我的角色就是產品經理+項目經理,也就是這個項目的OWNER。只有這樣,才能有話語權向老板爭取資源,才能有權威克制大牛的技術沖動,對抗外部干擾。

但這樣又很容易走向一言堂,破壞敏捷開發所提倡的主動性和平等性。用來平衡的手段,是讓團隊更多接觸用戶,通過用戶反饋讓團隊意識到“我的工作對用戶的影響”,而不是為了取悅項目OWNER。

對于像我這樣研發出身的SCRUM MASTER,還有一重風險:技術的詛咒。

雖然技術背景對于項目開發周期和BUG風險有更好的理解和判斷,但是技術背景會使得SCRUM MASTER忍不住參與到技術實現中去。

個人最失敗的一個案例:當時有三個并行的項目需要管理,偏偏是我參與最多的項目進展最不順利。項目瓶頸在于后臺數據庫設計進度太慢,導致前端無法開始聯調。由于我熟悉數據庫設計,因此有時直接上陣開發。

直到某天我在敲代碼的時候,忽然看到本該做此工作的DBA眼神呆滯,茫然地坐在一邊;才突然醒悟自己的越俎代庖。其實數據庫設計慢的原因,是作為前開發人員的我,認為設計不夠“美”,而作為OWNER的我,應該把開發的權力還給DBA,而只從實際輸出結果評估是否可以交付。

SCRUM MASTER必須時刻考慮大局,放下自己的技術偏好。SCRUM MASTER需要根據實際任務情況和成員情況,盡可能地組織出一只團隊不斷交付。前面說到每個項目都有新體驗,就是說項目本身可能相似,但總會遇到不同背景不同性格的程序員們,看他們是怎么理解怎么執行敏捷開發的。

SCRUM MASTER不寫代碼,但通過調動程序員完成一個產品,從某種意義上說,這是另一種形態的編程呢。

 

本文由 @ 狄也傲 原創發布于人人都是產品經理?,未經許可,禁止轉載。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 支付產品

    回復
  2. 萬有引力定律告訴我們的,吸引別人的最好方法是去充實自己。

    回復
  3. 70%的程序員不是計算機專業出身嗎?

    來自廣東 回復
  4. “另一種形態的編程” 萬物皆對象嗎? :mrgreen:

    來自上海 回復
    1. 對,面向對象編程。

      來自浙江 回復
    2. 哈哈哈

      來自上海 回復