建設(shè)全功能團隊——實踐篇
在上篇文章中我們一起回顧了分工歷史,對于技術(shù)團隊影響以及建設(shè)全功能團隊的必要性 ,在實踐篇中我將詳細分享一些實踐以及我們團隊的經(jīng)驗數(shù)據(jù)。
吃自己的狗糧
當開發(fā)人員坐在測試工作站前,你將會詫異于多少開發(fā)人員因為繁瑣的步驟而不會安裝/升級自己參與制作的軟件,多少人認為自己設(shè)計的復(fù)雜配置是荒唐的。在很多情況下,這都不是安裝、配置的問題,而是設(shè)計問題,將開發(fā)和測試過程分離把痛苦轉(zhuǎn)嫁給了另一個團體(測試、用服、用戶),開發(fā)人員喪失了親身使用軟件的機會,從而無法發(fā)現(xiàn)問題的存在。暴露并修正這些問題,是將開發(fā)人員和測試人員進行輪換的主要價值之一。從我們的經(jīng)驗數(shù)據(jù)看,開發(fā)人員可以在一周內(nèi)掌握大多數(shù)的測試技巧,個人的建議是從經(jīng)驗豐富的開發(fā)人員開始輪換,一方面他們更能認識到測試的必要性,便于交流,也便于形成表率。另一方面豐富的經(jīng)驗更容易幫助他們察覺到問題的存在。其它的一些要點是:
- 一對一的充分交流,讓開發(fā)人員認識到進行測試工作的價值和目的。
- 引導開發(fā)對痛點進行思考、改進。改變測試簡單、重復(fù)的工作面貌,要對開發(fā)人員形成挑戰(zhàn)。
- 一周輪換2天持續(xù)數(shù)周或連續(xù)輪換2星期為宜。
睜開眼睛看大象
開發(fā)人員習慣于正確性驅(qū)動,然而正確的返回結(jié)果卻不一定是必須的,有時甚至是一種浪費。我們項目所需要處理形如1001的期貨時間戳,10代表2010年,01代表一月份。開發(fā)人員自然想到了如何區(qū)分1910年、2010年、2110年的問題。于是復(fù)雜的內(nèi)部表達被設(shè)計出來,用于推斷正確年份。這是必須的么?如果我們能了解到客戶最大的壓力在于半年后項目能否成功上線替換掉現(xiàn)有無人能夠維護的應(yīng)用,而不是100年后才可能出現(xiàn)的問題,我們是否能在類似的技術(shù)決策中,做出更聰明的選擇呢?幫助開發(fā)/測試角色獲取更多的信息,讓他們了解到制定需求的上下文,而不僅僅是需求是什么;讓他們更高的層面認清各個故事之間的關(guān)聯(lián),能夠分辨可以給客戶帶來最大價值的任務(wù),這是將開發(fā)角色/測試角色與分析角色對換的主要價值。一些要點是:
- 在進行分析工作前,開發(fā)人員需要完成多個模塊的開發(fā),而測試人員最好完成開發(fā)輪崗,否則收效甚微。
- 分析工作可以兼職進行,我們認為比較有效的方法是每天下午花40分鐘讓開發(fā)/測試人員在教練的帶領(lǐng)有重點的分析一、兩個故事。
- 重點放在提供一套思考框架幫助新手梳理分析思路,我們發(fā)現(xiàn)一個有效的方法是結(jié)對工作、獨立思考、演講并點評。(參見結(jié)對工作,不止與結(jié)對一節(jié))
根據(jù)我們的經(jīng)驗,兩周全程跟蹤式的結(jié)對分析足夠幫助新手初步掌握分析思路,教練可以考慮逐漸減少在新手思考過程中的侵入,再經(jīng)過大概2個月的練習,新手基本可以獨立工作。
和客戶對話
在進行過分析角色的輪換后,可以進一步利用需求管理作為主線讓團隊成員參與到客戶交流中,慢慢削弱項目經(jīng)理的客戶聯(lián)系人角色,其主要價值在于:
- 提升交流質(zhì)量,一線人員常常比項目經(jīng)理更了解產(chǎn)品。
- 展示開發(fā)人員的能力,增強客戶信心。
- 弱化項目經(jīng)理在客戶眼中的重要性,為未來平滑的取代項目管理者,減少開銷作準備。
- 幫助技術(shù)人員掌握交流技巧、提升團隊能力。
個人建議是:
- 從例行的功能展示會(showcase)開始,讓每個成員練習從客戶的角度進行思考(客戶想看什么?),鍛煉語言能力,消除與客戶交流的恐懼感,并且讓客戶熟悉開發(fā)團隊的每個成員,習慣開發(fā)團隊的交流方式。
- 由多人分別準備客戶進行電話會議中需要討論的議題,每人深入思考的一、兩個問題,通過充分思考彌補經(jīng)驗、技巧上的不足。
- 結(jié)對完成發(fā)給客戶的郵件,讓另一雙眼睛檢查有沒有把該說的問題點到,表達方式、方法是否得當。
- 提供一套與客戶交流的思考框架,并在與客戶的交流中不斷強化它。我們采用的框架是“客戶,交付,流程,員工”,團隊成員在思考問題時,首先從這四個點出發(fā)再逐層展開。
這項練習需要貫穿項目始終,對于團隊成員無差別的進行,我們的經(jīng)驗數(shù)據(jù)是經(jīng)過5個月左右的練習,項目經(jīng)理就不需要出現(xiàn)在與客戶的例行電話交流中了。
寫程序,我行么?
測試人員普遍編程技術(shù)能力欠缺,同時又常常對編程這一未知的經(jīng)驗產(chǎn)生恐懼。從經(jīng)驗看,如果測試人員不能編寫、維護自動化測試,測試工作將很快成為交付瓶頸。通過編程,讓測試人員掌握技術(shù),避免瓶頸的出現(xiàn)是測試到開發(fā)角色轉(zhuǎn)換的主要價值。我們所采取的步驟是:
- 與測試人員結(jié)對完成簡單的編碼任務(wù),不斷樹立信心。在這個團隊中,我們從設(shè)計與實現(xiàn)自動測試框架開始,親手設(shè)計的框架讓測試人員更有能力來編寫、維護測試,同時增強了編程的信心。
- 在測試人員消除了編程恐懼、具備編程基礎(chǔ)后,安排測試人員與開發(fā)人員結(jié)對進行功能開發(fā)。
在這個過程中,必須首先要幫助測試人員正視編寫程序的必要性以及消除恐懼,同時針對每天的工作內(nèi)容留一些家庭作業(yè)效果也非常好。必須承認的事實是即便在完成輪換后,測試人員較開發(fā)人員還有一定距離,然而我們得到了一個意外的收獲:進行過輪換后,再討論需求時,測試人員越來越熟練的使用開發(fā)術(shù)語與團隊交流,越來越多得參與討論,甚至主導討論,她開始直接引用核心組件的設(shè)計思想來推導測試用例,不斷質(zhì)疑和挑戰(zhàn)開發(fā)人員,極大的提升了交流的效率和功能實現(xiàn)的質(zhì)量。從經(jīng)驗數(shù)據(jù)看,大致需要3個月的時間測試人員可以達到在輔導下完成功能的程度。
訂最后一顆紐扣
前端開發(fā)有其獨特的知識領(lǐng)域,但這并不意味著任何界面工作都要由前端開發(fā)工程師來完成。前后端的分離增加了開發(fā)過程中的瓶頸以及人員認知領(lǐng)域中”Unknown Unknown”的區(qū)域,降低了找到更優(yōu)解決方案的可能性。前端開發(fā)能力的培養(yǎng)特別適合在全團隊中無差別的展開:讓后端開發(fā)人員進行前端開發(fā)可以減少瓶頸,積累知識,構(gòu)造“T”型知識區(qū)。測試人員需要測試界面,所以了解界面是如何工作,可以幫助她們設(shè)計出更高質(zhì)量的用例,對于需求分析人員來說,高保真原型可以用作高效的交流工具。一個有效的方法是全面鋪開,引入專家,重點培養(yǎng),我們所采取的步驟是:
- 要求全團隊在業(yè)余時間完成一組界面練習,在全團隊普及Html, Css和Javascript知識。
- 引入界面開發(fā)專家重點培養(yǎng)一名有興趣進行界面開發(fā)的團隊成員,對系統(tǒng)的界面結(jié)對進行改進,優(yōu)化。
- 在界面開發(fā)專家的帶領(lǐng)下,全員重新完成之前的界面練習,專家每天用一個小時講解對應(yīng)的前端技術(shù)并點評作業(yè)。
從全面普及知識到引入界面專家再到培養(yǎng)出新人,總共花費3周時間。值得一提的是,在整個過程中,由于之前團隊建設(shè)的鋪墊,其它成員有能力完全分擔工作,團隊重點培養(yǎng)的開發(fā)人員可以不受任何干擾,全職投入到前端開發(fā)中,最大程度的利用了界面開發(fā)專家的價值,提升了學習效果。
上同一艘船
項目經(jīng)理是和技術(shù)領(lǐng)袖是作為現(xiàn)場管理者存在的,他們必須能夠理解現(xiàn)場,能夠通過現(xiàn)場的痕跡找到團隊的不足和改進方向。那么,沒有什么比卷起袖子參與到一線的工作中更能幫助這些角色理解現(xiàn)場。形成對產(chǎn)品質(zhì)量和進度的親身體驗。理解現(xiàn)場,有效的管理現(xiàn)場而不是管理數(shù)據(jù),是這些角色輪換到開發(fā),測試或者分析工作的主要價值所在。現(xiàn)場管理人員常常有太多的職責,既要對內(nèi)負責也得對外負責,一個自然而然的問題是:”沒有時間投入一線工作“。我認為現(xiàn)場管理人員的工作主要是兩個部分:首先是職位責所賦予的管理性事務(wù),譬如狀態(tài)的匯報,客戶的管理等;其次是能力所賦予的工作,作為團隊中最有經(jīng)驗的成員,他們需要參與到需求分析、架構(gòu)設(shè)計、決策的制定、培訓等活動中?;鶎庸芾碚邞?yīng)當有意識的主動的卸下身上的工作職責,完成到一線角色的轉(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的過程中,新手可以看到一個個的方法是如何被設(shè)計的,如何從測試中被驅(qū)動出來,但很難從他的搭檔那里學會如何想到要設(shè)計這些方法?從下向上驅(qū)動還是從上向下,各有什么分別?為什么這個方法要被放在這個類,而不是那個?
我認為結(jié)對工作其中一個被忽略的要點在于讓新人在可控的狀態(tài)下經(jīng)歷失敗,獲取經(jīng)驗,并且在工作中學會思考問題的方式(如何發(fā)現(xiàn)問題?從何處著手?怎么在不同的方案中取舍?從哪里開從哪里開始分析?),而不僅僅是思考問題本身(寫什么測試?如何讓測試通過?)。從我的觀察看,培養(yǎng)新人比較有效的途徑是從全程結(jié)對工作開始,通過對細節(jié)的指導讓新人了解工作的主要方式和職責,進行必要的知識貯備,學會如何正確的做事。接下來應(yīng)當讓新人逐漸學會什么是正確的事情。我們的做法是:
- 新人接到任務(wù)后,自行思考。
- 在白板上寫下完成任務(wù)的主要步驟
- 向教練講解主要思路和考慮點,教練通過提問引導他(輸入特殊字符會怎樣?)
- 自行完善方案
- 和教練一起確認方案
- 教練對整個思考過程進行點評,告訴新人這類問題的思考要點
整個過程大致耗時半個小時,這種方式的優(yōu)點是新人對方案非常了解,執(zhí)行起來不容易跑偏;有機會在可控范圍內(nèi)犯錯,成長更快; 新人可以通過不斷的練習有能力通過多個任務(wù)逐漸總結(jié)出一套思維方式。教練利用這種方法可以通過代碼檢視和有選擇的結(jié)對(譬如針對任務(wù)中的難度部分結(jié)對)同時幫助多人,更有效率。
結(jié)局
在咨詢的過程中,我見過太多的團隊把目標放在交付上,冀希望于工具,外部力量能夠快速的解決問題,往往對小步前進不夠耐心,不關(guān)心團隊的成員。在我們這個 90%以上成員沒有.Net經(jīng)驗,50%是畢業(yè)生的團隊中,那些微不足道的改進,一點點的提升,最終造就了這個9個月中沒有一天加班,幾乎沒有缺陷,提前交付的項目,客戶甚至愿意為他們的滿意額外支付3萬美金作為獎勵。我把全篇總結(jié)為一句話:把項目目標放在人員能力提升,讓項目成功成為能力提升的副產(chǎn)物。
相關(guān)閱讀
作者:胡凱,ThoughtWorks中國區(qū)總經(jīng)理
本文由 @胡凱 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于 CC0 協(xié)議
- 目前還沒評論,等你發(fā)揮!