隨著項目的進展,代碼量的積累,代碼質(zhì)量的問題逐漸暴露了出來,這一階段的session主要針對代碼質(zhì)量和軟件設(shè)計,Home Ideas團隊推出了“軟件設(shè)計檢討會”系列session。起初,代碼問題較多的團隊成員檢查自己的代碼,并且和其他人一起討論代碼設(shè)計或重構(gòu)方案,每周做一次到兩次;并且把需要重構(gòu)的問題專門記錄在一個共享文檔里,以便跟蹤;不用太長時間,這些人的代碼設(shè)計能力逐步成長到能夠發(fā)現(xiàn)整個團隊的代碼設(shè)計問題,并且由主講人變成了組織者,帶動其他團隊成員討論代碼問題。經(jīng)過這一階段,團隊成員的軟件設(shè)計能力和項目的代碼質(zhì)量都明顯提高。
下來一個階段的session主要關(guān)注特定功能和問題的解決方案和特定技術(shù)的專項提高,比如在實現(xiàn)了與第三方系統(tǒng)的集成后,主要參與設(shè)計和實現(xiàn)的項目成員做了這部分工作從實現(xiàn)方案,到使用的技術(shù),到具體代碼設(shè)計的全套session。此外,code jam也是常用的專項技術(shù)能力提升的方式。比如團隊中的前端開發(fā)人員連續(xù)組織多次CSS專項提高練習(xí),他每次都會根據(jù)主題設(shè)計一系列小練習(xí),層層深入,覆蓋所有的知識點。
“一人一技”
項目用到的技術(shù)和知識挺多,想要所有團隊成員同時研究這些技術(shù)和知識,從資源利用和效率的角度來講都是不可取的。相反,讓每個人選擇其中一項技術(shù)進行重點研究,對這個人著重培養(yǎng)這方面的技能,并且集中優(yōu)勢資源給予支持,而后再進行知識傳遞,效果往往更好。Home Ideas團隊將此命名為“一人一技”,并進行了實踐。比如一個團隊成員專攻DevOps,團隊把他送到客戶現(xiàn)場加入客戶的DevOps團隊六周一起工作;另一個團隊成員的主要目標(biāo)是成為UI開發(fā)人員,團隊從別的辦公室邀請來的前端開發(fā)人員和他結(jié)對,客戶來訪時,也讓他和客戶的前端開發(fā)人員結(jié)對編程,并且在平時的工作中讓他多做和前端直接相關(guān)的工作;還有一個團隊成員研究BDD和端到端測試,當(dāng)這方面的技術(shù)專家來西安出差時,讓他們結(jié)對編程,還專門讓這個團隊成員去客戶現(xiàn)場和客戶那邊的QA Lead探討端到端測試的問題,等等。
實際效果是,兩三個月的時間可以將一個人打造成團隊內(nèi)部某個特定技術(shù)的專家,再假以時日,甚至可以成為業(yè)界這個領(lǐng)域的佼佼者,比如那個研究DevOps的團隊成員此后不久去InfoQ做過關(guān)于DevOps的主題演講。
試想,如果讓所有人都去研究某個技術(shù),我們會得到怎樣的效果?要么我們不可能送所有人都去客戶現(xiàn)場加入他們的DevOps團隊,要么到西安出差的技術(shù)專家要在一兩周時間內(nèi)和所有人結(jié)對工作,收效微乎其微。需要特別注意的是,“一人一技”的實踐終是否成功,取決于知識傳遞是否充分,良好的知識分享的機制和氛圍是“一人一技”的重要前提。如果沒有將重點培養(yǎng)形成的單個團隊成員的技術(shù)積累傳遞出去,對項目的運行也是有潛在的風(fēng)險。
成長計劃
我們常說要不斷拓展個人的舒適區(qū),在一個項目團隊中如何來實現(xiàn)呢?團隊有責(zé)任和每一個團隊成員進行溝通,幫助其設(shè)立個人的成長目標(biāo);而每一個團隊的成員,都應(yīng)該不斷思考自己的成長計劃,并努力實現(xiàn)。