敏捷開發(fā)的解決方案
記者:剛才提到你特別關(guān)注的除了工作規(guī)范和開發(fā)規(guī)范上的細節(jié),還有就是公布流程?
程顯峰:是這樣的,公布流程實際上就像互聯(lián)網(wǎng)團隊的一個核心,就是有一個標志,如果我拿到一個需求,最后到公布有多長時間,這是看整個團隊效率的標志性衡量,而且現(xiàn)在很多人都講敏捷,其實軟件度量是一門學問,究竟度量什么大家非常有爭議,我感覺我這邊沒有太多爭議,所有的度量尺度都用時間,因為時間是比較公正的,沒有差別的,比如你用代碼行數(shù),大家就會說了,代碼行數(shù)不是一個標準尺度啊,你用C寫的五百行和用Java寫的五百行到底能不能衡量?你說我用時間,我這里的一秒和美國的一秒是一樣的,沒有差別,所以所有的東西都應(yīng)該用時間來衡量,很多東西都可以轉(zhuǎn)化成時間,比如上線效率就可以轉(zhuǎn)化成時間,拿到一個需求到最后推上線就是一個標準的時間,你能在多短的時間之內(nèi)完成這個事情?這是你團隊效率的一個提升。
還有一個非常重要的提升,就是當你發(fā)現(xiàn)線上的東西有問題,多長時間能回退到上一個版本?我們可以在秒級之內(nèi)回去,就是一分鐘之內(nèi)退回去,這是整個團隊開發(fā)效率的一個顯著治理 ,如果你做不到這一點的話,比如你已經(jīng)發(fā)現(xiàn)Bug了,第二天才能把這個更正,其中的時間全部都浪費了,而且對于一個線上系統(tǒng)就是損失。我是講比較實在的東西,對于開發(fā)系統(tǒng)的把控必須要特別嚴,怎么才能把控上線的這些東西呢?就是要把上線的過程和開發(fā)的過程、測試的過程全都緊密地聯(lián)系在一起,是一個整體,而不是把它們割裂。包括很多傳統(tǒng)企業(yè)這個方面做得也非常好,并不是敏捷獨有的,所有的東西我堅信都不是敏捷獨有的,對于優(yōu)秀的工程實踐來講都是通用的,整個過程都是非常好、非常快的。
記者:在敏捷方法流程中具體 實踐的有極限編程(XP)和Scrum等等,Scrum目前團隊用的是比較多的,對于極限編程不知道您有沒有了解,據(jù)我了解很多團隊用過Scrum的都不喜歡極限編程的實踐方式,能說說您的觀點嗎?
程顯峰:Scum只是一個簡單的溝通框架,所以大家的接受程度會比較高,只是規(guī)定了你該在什么時候溝通,該在什么時候反思,早上起來應(yīng)該怎么跟大家交流,抽張撲克牌估算一下這個東西,Scum只是一個實施框架。極限編程是大量工程實踐的集合,比如極限編程里講TCB,它是具體讓你操作的,比如咱倆就在一塊,它是一種具體的工程實踐,就是這么做的,具體工程實踐大家反感就比較大了,因為跟他以前的做法不一樣,而且問題的關(guān)鍵在于實施這種東西最重要的是有一個人帶一個人去實施,兩個人都不會你就在那兒極限編程,這個太扯了,根本一點用都沒有,這種東西就是師傅帶徒弟。
比如結(jié)對編程,兩個人都沒結(jié)對過,你在那兒結(jié)對。比如本來是一個大鋸,你在這邊我在那邊,大家都沒使過這個鋸,咱倆就商量這個鋸到底怎么拿,所以時間長了以后沒有效果,大家馬上就對這個不看好,然后就失敗了,他們不能帶來效果,一般這種東西在成熟的公司里面,他們是極限編程。就像結(jié)對這種最簡單了,總共有兩種,一種是師傅帶徒弟,就是一個Mentor,一個是徒弟在這里學,Mentor一開始會給你演示所有的編程,你就在后面看,Mentor可能會給你提問,等過了一陣你來,Mentor在后面觀察你、指導你,然后讓你干這些。這是帶新手非常有用的招,很快就能把新手培養(yǎng)出來。
另外一種就是兩個人的水平差不多,就是互相干活,一個人負責設(shè)計,另一個人負責實現(xiàn),這是真正的Pair工程模式,那個是教學模式,你就要求兩個人合作很長時間,比如我說的設(shè)計他不懂,這就玩完了,沒法在一起了。關(guān)于你說的極限編程,兩個人沒在一起合作過,或者兩個人都沒搭檔過,你還在電腦上干自己的,后面的人就特別沒意思,沒有互動沒有交流,這就完了,好多工程實踐都是這樣的,是跟你平時的編程方法不一樣導致的。這跟大家多數(shù)的東西都不沖突,只是原來要開會,現(xiàn)在也要開會,現(xiàn)在規(guī)定好了什么時間開什么會,只是輕度地改變了你的東西,所以實施起來非常容易,大家的認可度也非常高,某種程度上見效又比較快,因為它能發(fā)現(xiàn)一些具體流程上的問題,比如溝通的障礙、理解需求有問題,或者節(jié)拍上有問題,有的部門太快了有的部門太慢了,他們能發(fā)現(xiàn)這些問題。
我是覺得這個數(shù)據(jù)比較難以衡量,因為衡量有意義的必須是在某種固定的場景下,比如對于我這里來講,我可能會要求程序員開發(fā)一個標準模塊,或者是條形化的實踐,我會這樣去衡量,但是對于別人來講,這個他可能不太Care,就是從實施的角度來講,你可以看一下王曉明給華為和騰訊做的,你可以看看他的,我對怎么度量這個事情想的不是很多,我是比較相信主觀看法的,因為我在實施的過程中是跟他們在一起工作的,不需要用那些數(shù)據(jù)來告訴我他們已經(jīng)進步了,他們做外部咨詢的就比較Care這個事情,因為他們需要給那些老板寫報告,我不太需要這個東西,我對其它的產(chǎn)品負責就可以了。
記者:當一個敏捷團隊工作時,有時透明化的流程會暴露出機構(gòu)中的問題,而這些問題又被稱為敏捷開發(fā)流程的過失。在整個行業(yè)中,您們開始遇到這種情況了嗎?敏捷開發(fā)會使行業(yè)的缺點逐步暴露,從而在各方面招致一些與敏捷開發(fā)對抗的反對意見嗎?
程顯峰:是這樣的,按照我的理解,我覺得暴露問題是個好事,暴露問題就說明這不是一套有效的方法。為什么豐田要做單件流的系統(tǒng)呢?因為任何一個環(huán)節(jié)出了問題,馬上就要停掉工作,他是可以以最快的速度發(fā)現(xiàn)問題、解決問題,為什么是一鍵而不是兩鍵呢?因為一鍵可以發(fā)現(xiàn)的更及時,要求生產(chǎn)線上的所有環(huán)節(jié)都能嚴格匹配,有略微 不匹配的地方馬上就會跳出來,如果它是一種發(fā)現(xiàn)問題的話,我覺得這種很好,不發(fā)現(xiàn)才是問題,發(fā)現(xiàn)問題不好嗎?我覺得非常好。當然,你肯定會遭到反對意見,這個我覺得是實施的人應(yīng)該想清楚的事情,實施什么會遭到反對意見,或者不實施什么會遭到反對意見。
記者:在實施當中有沒有過這樣的情況?
程顯峰:肯定會有,這個可以來自于各個方面,但是你要實施的話就要清楚,比如老板什么時候會反對?不出效益的時候會反對,所以剛開始實施的時候不會去做那些影響步驟的問題,你要先見效,有很多方法可以先見效,但是很多人都不知道,你要實施那些先見效的,這對樹立信心、樹立威望都是非常有幫助的,你不能一開始就挽起袖子說要怎么干,沒有獲得之前這些事情是做不了的,我們團隊剛開始還好,有些團隊你要實施敏捷,或者實施某些具體工程實踐的話會有挑刺的,這就跟你實施人員的素養(yǎng)有關(guān)了,比如你能說服他就說服,要是說服不了他的話你也沒法實施。
比如講故事,有的人去實施版本操縱 ,他就說要用分步式的傳統(tǒng)模式,有些人就說為什么要用分步的?那么你做一個版本宏觀動作,我用這個做一個,我們比一下。因為技術(shù)這個東西很好衡量,大家一看就都明白,它不比了,就實施吧。你要有手段和信心去實施這個東西,而且你要知道對手是什么,如果你操縱 不住這個局面的話,以后實施的時候會有各種各樣的東西,比如實施測試,測試的好處你有沒有給團隊看到?你自己都不會測試,也帶來不了什么好處,你就說服不了團隊去做這種事情。
比如這里是有框架層面的東西,我特別情愿 實施工程實踐,因為我對工程實踐的把控力特別強,你要是反對我這些東西,我有很多理由去說服你,而且非常容易見效,你要很快地贏得工程技術(shù)人員的信任,反而是你實施這個項目大家會很嘀咕,大家會覺得這個家伙到底寫沒寫過代碼?是不是只會這些?因為它不涉及到任何技術(shù)細節(jié),工程實踐就不一樣了,你說代碼這么寫不合適,那你就得說出不合適的道理,你要那么設(shè)計的話就是一種技術(shù)的對抗。其實遭到反對意見不光是敏捷遇到,干什么事情沒有反對意見?沒有反對意見的事大家早就做了,也不需要其他人。
記者:其實我想了解你們開發(fā)的反對意見。
程顯峰:在我看來大部分的意見其實是一種固有思維的反應(yīng),就是他們固有模式的一種反應(yīng),以及固有的工作習慣不情愿 改變的反應(yīng)。問題是這樣的,他是沒有見到你要實施這種東西的好處的前提下會跳出來反對,你要做的事情是要證明這種東西會給他帶來利益,比如剛才說的那種,你用你的版本操縱 ,我用我的版本操縱 ,你自己本身有非常豐富的經(jīng)驗,你看到別人那么做就能很清楚地知道這樣做肯定是簡單或者容易,他才不比了,要是知道自己一定會贏的話肯定會比,肯定是他實施的新東西對他來講是有好處的,但是他又不情愿 付出改變的成本,又不情愿 讓大家明確地見到這種好處。因為團隊的人要是都知道這種好處你就沒法演下去了,所以很多事情要把它透明化,就是不存在那種邊邊角角的東西。
當然,阻力是各種各樣的,最好的方式就是把這些東西都透明化,這些程序員相對來說還是非常講道理的,因為跟機器打交道多了,有一說一有二說二,思維方式還是比較客觀公正的,不會說這些東西明明是效率高的卻跟你說不行,一般不會有這種情形。
記者:目前國內(nèi)出現(xiàn)了很多敏捷教練的角色,敏捷的教練需要具備什么樣的素養(yǎng)?
程顯峰:我個人覺得不管你具備什么樣的素養(yǎng),你要能和開發(fā)團隊打成一片,要能贏得開發(fā)團隊的尊重才能做得下去,否則你天天講,人家不信你,其實你什么事都做不了,你可以不懂技術(shù),但是開發(fā)團隊都很信你,這也OK,但是開發(fā)團隊一般都有一種傾向,就是技術(shù)沙文主義,不懂技術(shù)的人是不能打交道的,你要是想真正在這個團隊里混下去的話就得跟他們打交道。不同的團隊當然不一樣了,比如華為有敏捷實施的紅頭文件。
記者:這種規(guī)范開發(fā)人員的工作習慣,優(yōu)化他們的習慣,教他們一些工程方法,這跟CTO的職能有什么區(qū)別?技術(shù)部門的Leader職能跟它有什么區(qū)別?
程顯峰:比如丹峰就負責技術(shù)架構(gòu)設(shè)計運營,我就負責培訓,發(fā)現(xiàn)團隊的問題并整合這些看上去非?,嵥榈氖虑?,還有一些其它培訓方面的事情,他們是思變,是想著怎么去打這個仗,我是像個教官一樣想著怎么提高他們的戰(zhàn)斗力,他們只想怎么用這些人,然后是打哪兒,這是他們要管的事情,我是教他們怎么使用武器,讓他們訓練有素,學會配合這些常規(guī)性的事情。
豫公網(wǎng)安備41018402000614號