訂后一顆紐扣
前端開發(fā)有其獨特的知識領(lǐng)域,但這并不意味著任何界面工作都要由前端開發(fā)工程師來完成。前后端的分離增加了開發(fā)過程中的瓶頸以及人員認知領(lǐng)域中”Unknown Unknown”的區(qū)域,降低了找到更優(yōu)解決方案的可能性。前端開發(fā)能力的培養(yǎng)特別適合在全團隊中無差別的展開:讓后端開發(fā)人員進行前端開發(fā)可以減少瓶頸,積累知識,構(gòu)造“T”型知識區(qū)。測試人員需要測試界面,所以了解界面是如何工作,可以幫助她們設計出更高質(zhì)量的用例,對于需求分析人員來說,高保真原型可以用作高效的交流工具。一個有效的方法是全面鋪開,引入專家,重點培養(yǎng),我們所采取的步驟是:
要求全團隊在業(yè)余時間完成一組界面練習,在全團隊普及Html, Css和Javascript知識。
引入界面開發(fā)專家重點培養(yǎng)一名有興趣進行界面開發(fā)的團隊成員,對系統(tǒng)的界面結(jié)對進行改進,優(yōu)化。
在界面開發(fā)專家的帶領(lǐng)下,全員重新完成之前的界面練習,專家每天用一個小時講解對應的前端技術(shù)并點評作業(yè)。
從全面普及知識到引入界面專家再到培養(yǎng)出新人,總共花費3周時間。值得一提的是,在整個過程中,由于之前團隊建設的鋪墊,其它成員有能力完全分擔工作,團隊重點培養(yǎng)的開發(fā)人員可以不受任何干擾,全職投入到前端開發(fā)中,大程度的利用了界面開發(fā)專家的價值,提升了學習效果。
上同一艘船
項目經(jīng)理是和技術(shù)是作為現(xiàn)場管理者存在的,他們必須能夠理解現(xiàn)場,能夠通過現(xiàn)場的痕跡找到團隊的不足和改進方向。那么,沒有什么比卷起袖子參與到一線的工作中更能幫助這些角色理解現(xiàn)場。形成對產(chǎn)品質(zhì)量和進度的親身體驗。理解現(xiàn)場,有效的管理現(xiàn)場而不是管理數(shù)據(jù),是這些角色輪換到開發(fā),測試或者分析工作的主要價值所在,F(xiàn)場管理人員常常有太多的職責,既要對內(nèi)負責也得對外負責,一個自然而然的問題是:”沒有時間投入一線工作“。我認為現(xiàn)場管理人員的工作主要是兩個部分:首先是職位責所賦予的管理性事務,譬如狀態(tài)的匯報,客戶的管理等;其次是能力所賦予的工作,作為團隊中有經(jīng)驗的成員,他們需要參與到需求分析、架構(gòu)設計、決策的制定、培訓等活動中;鶎庸芾碚邞斢幸庾R的主動的卸下身上的工作職責,完成到一線角色的轉(zhuǎn)換,從另一個角度看,這個過程是整個團隊能力提升的過程。
個人經(jīng)驗是:
對職位責所賦予的工作,首先做到對團隊的狀態(tài)、開發(fā)的進度等盡量的做到自動化、透明化、可視化,讓所有人都能獲得這些信息,其次通過知識傳遞,把不涉及敏感內(nèi)容的工作下放,重點培養(yǎng)一、兩名團隊成員參與管理。
對能力所賦予的工作,一是針對團隊急需提升的能力組織培訓,二是通過結(jié)對工作(參見結(jié)對工作,不止于結(jié)對)傳遞知識,提升能力,讓團隊習慣于自行決策,有意識的逐步弱化自己在團隊中的重要程度。
我們的的經(jīng)驗數(shù)據(jù)是大約需要4個星期,新人可以在指導下正確的進行管理實踐(正確的做事),這已經(jīng)可以保證基層管理角色一定的參與一線工作的時間;而讓新人具備辨別團隊目前需要什么幫助(作正確的事),進一步將原有的管理角色基本弱化為開發(fā)角色,則需要6個月左右的引導和練習。
結(jié)對工作,不止于結(jié)對
我完全認可結(jié)對工作在知識傳遞、提升工作正確性方面的作用。我們幾乎結(jié)對作所有的事情,某種程度上結(jié)對工作成為一種文化,成為了思維慣性和一種必然。長期的結(jié)對工作讓我發(fā)現(xiàn)目前的結(jié)對方式對于培養(yǎng)新人還不夠友好,這里,新人所指代的是廣義的新人概念,不僅僅指畢業(yè)生,剛剛從事測試工作的開發(fā)達人也算是測試新人。目前結(jié)對方式的的缺點在于:
培養(yǎng)了思維惰性,心理上依賴于別人的帶領(lǐng)。
無法從失敗中學習。有經(jīng)驗的人常常會跳過很多陷阱,新人的工作經(jīng)歷全是各種成功,一旦獨立工作被這些陷阱打的措不及防。
只見樹木不見森林。譬如在TDD的過程中,新手可以看到一個個的方法是如何被設計的,如何從測試中被驅(qū)動出來,但很難從他的搭檔那里學會如何想到要設計這些方法?從下向上驅(qū)動還是從上向下,各有什么分別?為什么這個方法要被放在這個類,而不是那個?
我認為結(jié)對工作其中一個被忽略的要點在于讓新人在可控的狀態(tài)下經(jīng)歷失敗,獲取經(jīng)驗,并且在工作中學會思考問題的方式(如何發(fā)現(xiàn)問題?從何處著手?怎么在不同的方案中取舍?從哪里開從哪里開始分析?),而不僅僅是思考問題本身(寫什么測試?如何讓測試通過?)。從我的觀察看,培養(yǎng)新人比較有效的途徑是從全程結(jié)對工作開始,通過對細節(jié)的指導讓新人了解工作的主要方式和職責,進行必要的知識貯備,學會如何正確的做事。接下來應當讓新人逐漸學會什么是正確的事情。我們的做法是:
新人接到任務后,自行思考。
在白板上寫下完成任務的主要步驟
向教練講解主要思路和考慮點,教練通過提問引導他(輸入特殊字符會怎樣?)
自行完善方案
和教練一起確認方案
教練對整個思考過程進行點評,告訴新人這類問題的思考要點
整個過程大致耗時半個小時,這種方式的優(yōu)點是新人對方案非常了解,執(zhí)行起來不容易跑偏;有機會在可控范圍內(nèi)犯錯,成長更快; 新人可以通過不斷的練習有能力通過多個任務逐漸總結(jié)出一套思維方式。教練利用這種方法可以通過代碼檢視和有選擇的結(jié)對(譬如針對任務中的難度部分結(jié)對)同時幫助多人,更有效率。
結(jié)局
在咨詢的過程中,我見過太多的團隊把目標放在交付上,冀希望于工具,外部力量能夠快速的解決問題,往往對小步前進不夠耐心,不關(guān)心團隊的成員。在我們這個 90%以上成員沒有.Net經(jīng)驗,50%是畢業(yè)生的團隊中,那些微不足道的改進,一點點的提升,終造了這個9個月中沒有加班,幾乎沒有缺陷,提前交付的項目,客戶甚至愿意為他們的滿意額外支付3萬美金作為獎勵。我把全篇總結(jié)為一句話:把項目目標放在人員能力提升,讓項目成功成為能力提升的副產(chǎn)物。