如何做好技術(shù)Team Leader?
曾子曰:吾日三省吾身,反思是人類進(jìn)化出來的一項(xiàng)異常寶貴的能力。我在阿里帶團(tuán)隊(duì)也有四年多的時(shí)間,有必要總結(jié)一下此間得失;另外,前幾天和一個(gè)剛開始帶團(tuán)隊(duì)的同學(xué)聊天,他覺得角色轉(zhuǎn)變對于他有不小的挑戰(zhàn),因此我想做一點(diǎn)不算成熟的總結(jié)并分享出來。當(dāng)然,此文第一不代表我必然是一個(gè)多么成熟的管理者;第二不代表我的總結(jié)放之四海而皆準(zhǔn)(事實(shí)上很多人的管理方式和我推崇的方法是反的,但是如果從某些角度評價(jià),這些人更成功);第三我并無雄心壯志解答所有問題??偨Y(jié)僅僅是期望通過反思,幫助自己成為更好的管理者,而分享是希望能夠多多少少幫助到其他的管理者。
本文會(huì)重點(diǎn)講述我對招聘、目標(biāo)管理、團(tuán)隊(duì)溝通和工程文化的理解。挑選這幾個(gè)主題講述,主要是因?yàn)樵趲F(tuán)隊(duì)的這一段時(shí)間內(nèi),我認(rèn)為這幾個(gè)要素是團(tuán)隊(duì)長期發(fā)揮戰(zhàn)斗力和創(chuàng)新能力的核心。得到這個(gè)認(rèn)識對我來說并不容易,市面上有紛繁復(fù)雜的書籍(機(jī)場書店尤其多)嘗試告訴你什么叫領(lǐng)導(dǎo)力,公司也有相關(guān)的培訓(xùn)介紹,周圍也有很多 TL 用每日的言行告訴你他們是怎么做的。但是我認(rèn)為這些來自周圍的知識,很多是無效的,有更多是錯(cuò)誤的。例如有 TL 每天在辦公室坐到半夜下班,給團(tuán)隊(duì)巨大的加班壓力,表面看起來是奮斗,實(shí)際上會(huì)讓大家趨向于更多關(guān)注工作時(shí)長,從而降低對了對工作價(jià)值的思考;又有一些例子是,當(dāng)團(tuán)隊(duì)同學(xué)犯錯(cuò)后,把故障和績效強(qiáng)關(guān)聯(lián),在我看來這不僅無助于大家深入思考系統(tǒng)健壯性,更是鼓勵(lì)推責(zé),扼殺創(chuàng)新;更常見的例子可能是 TL 積極向上匯報(bào),承諾超出團(tuán)隊(duì)負(fù)責(zé)的交付能力,導(dǎo)致團(tuán)隊(duì)完全無視工程師文化,久而久之優(yōu)秀的人才逐漸流失,團(tuán)隊(duì)整體研發(fā)能力實(shí)則越來越弱。
很多事情是知易行難的,技術(shù) TL 實(shí)踐更是這樣,之后不斷學(xué)習(xí),執(zhí)行,反思,才能慢慢做得更好。如果我團(tuán)隊(duì)的同學(xué)在離開這個(gè)團(tuán)隊(duì)五年或者十年后,回想起這段時(shí)間,會(huì)感慨:“我們當(dāng)時(shí)的團(tuán)隊(duì)多好啊,大家一起做了很多有意思的事情。” 那我這個(gè)技術(shù) TL 的工作,就算做的出色了。
一、招聘
招聘的第一原則是寧缺毋濫。這么說出來大家都會(huì)認(rèn)同,但是實(shí)際執(zhí)行往往會(huì)因?yàn)槎唐趬毫Χ冃危绕涫钦衅冈絹碓诫y,好不容易面到一個(gè)看起來差不多的同學(xué),難免會(huì)內(nèi)心有點(diǎn)小傾斜,算了,先招進(jìn)來了。這其實(shí)是非常危險(xiǎn)的,因?yàn)橐坏┱衅噶隋e(cuò)誤的人,對于 TL 需要耗費(fèi)的管理時(shí)間會(huì)成倍增加,這些時(shí)間本來可以用來做更重要的時(shí)間。更危險(xiǎn)的是,錯(cuò)誤的人可能會(huì)對團(tuán)隊(duì)整體產(chǎn)生負(fù)面的影響,例如需要其他人不斷地補(bǔ)位,或者和人不斷爭吵,消耗大家的精力。
因此招聘一定是要嚴(yán)格要求的,如何面試我就不詳細(xì)講了,通常我會(huì)關(guān)注以下一些方面,基本上是缺一不可:
- coding 能力
- 對技術(shù)的熱情
- 能簡明扼要地溝通
- 積極樂觀
- 對團(tuán)隊(duì)目標(biāo)的認(rèn)同
招聘是個(gè)長期的事情,如果僅僅是在有名額的窗口去找人,通常是非常困難的。遇到合適的人,我會(huì)長期和他保持溝通,了解對方工作的狀態(tài),這其實(shí)也是一個(gè)不斷建立信任的關(guān)系。當(dāng)機(jī)會(huì)合適的時(shí)候,對方肯定會(huì)優(yōu)先考慮你。
當(dāng)候選人選擇機(jī)會(huì)的時(shí)候,團(tuán)隊(duì)的 TL 是個(gè)怎樣的人肯定是他重點(diǎn)考慮的因素之一。因此 TL 一定要做技術(shù)發(fā)聲,不論是開源項(xiàng)目的參與,撰寫技術(shù)文章,還是在技術(shù)大會(huì)做演講,都是充分體現(xiàn) TL 個(gè)人技術(shù)能力,技術(shù)思考,以及個(gè)人特質(zhì)的重要機(jī)會(huì)。
二、目標(biāo)
團(tuán)隊(duì)之所以為團(tuán)隊(duì),是因?yàn)檫@些人有共同的目標(biāo),如果沒有共同目標(biāo),這些人就是散兵游勇,不可能相互協(xié)同,無法成就巨大價(jià)值。而團(tuán)隊(duì)的目標(biāo),主要還是由 TL 去負(fù)責(zé)定義和明確的。
近期比較流行談 OKR(Objectives and Key Results,目標(biāo)與關(guān)鍵成果法),我認(rèn)為這就是一種協(xié)同團(tuán)隊(duì)聚焦目標(biāo)的方法。定方向 O(Objective),定數(shù)字目標(biāo) KR(Key Result),就是期望團(tuán)隊(duì)能夠凝聚在一起,朝共同的方向努力,相互理解和支持。量化的指標(biāo)(KR)用來指導(dǎo)方向,暴露問題。我比較反對用 KR 或者其他量化指標(biāo)來簡單粗暴地考核工程師,數(shù)字指標(biāo)如果用來考核,很容易導(dǎo)致大家舍本逐末。例如有人 KR 完成了 200%,卻挖了一堆坑;而有人 KR 完成 50%,但的確解決了棘手問題,代碼扎扎實(shí)實(shí)。我必然會(huì)把好的績效給后者,差的績效給前者。
定義團(tuán)隊(duì)目標(biāo)實(shí)際上是個(gè)非常困難的事情,因?yàn)檫@個(gè)目標(biāo)的定義要求你回答:
- 是否和你的用戶/客戶做了充分溝通,是否理解他們真正需要什么,你能給他們解決什么問題,他們的工作因?yàn)橛辛四銏F(tuán)隊(duì)會(huì)發(fā)生怎樣的改變。
- 和上下游協(xié)作方能夠做好協(xié)同,要兌現(xiàn)你給客戶承諾的價(jià)值,你會(huì)依賴于誰做什么事情?需要誰和你一起參與?這些依賴和協(xié)作方,是否認(rèn)同你的目標(biāo)?
- 你定義的目標(biāo)和價(jià)值,和你自己的的 TL 的目標(biāo),或者自己部門的目標(biāo),是否是一致的?
- 在技術(shù)團(tuán)隊(duì),你的目標(biāo)定義中有沒有考慮技術(shù)競爭力?持續(xù)建設(shè)技術(shù)競爭力不僅能幫助團(tuán)隊(duì)長期發(fā)展得更好,也能幫助吸引更多優(yōu)秀的人才。
當(dāng)然,如果這個(gè)目標(biāo)有那么點(diǎn)理想主義,那就更好了。工程師骨子都有那么點(diǎn)容易被理想主義吸引。有了清晰的團(tuán)隊(duì)目標(biāo)后,就是要和團(tuán)隊(duì)不斷的溝通了,讓每個(gè)人都清晰地理解目標(biāo),不要怕重復(fù),不要怕啰嗦。
下一步是把團(tuán)隊(duì)目標(biāo)分解為每個(gè)人的目標(biāo),這件事本質(zhì)上是產(chǎn)品架構(gòu)或者技術(shù)架構(gòu)。為什么這么說呢?在做軟件設(shè)計(jì)的時(shí)候,我們都會(huì)說高內(nèi)聚,低耦合;會(huì)說面向契約設(shè)計(jì)。人與人協(xié)作的時(shí)候,我們也希望每個(gè)人的目標(biāo)足夠清晰(對比軟件交付功能的定義,或者非功能性指標(biāo)的度量),以及人和人之間的協(xié)作邊界清晰(對比軟件系統(tǒng)之間的契約)。因此我們要不斷去思考團(tuán)隊(duì)負(fù)責(zé)產(chǎn)品的架構(gòu),和團(tuán)隊(duì)同學(xué)不斷討論細(xì)化,直至架構(gòu)及目標(biāo)足夠清晰。當(dāng)然還有一些橫向的目標(biāo),或者項(xiàng)目管理的工作目標(biāo),需要有同學(xué)去承擔(dān),這沒什么問題,但我非常不建議在研發(fā)團(tuán)隊(duì)中,讓一個(gè)同學(xué)有超過一半的時(shí)間在做橫向,因?yàn)榧夹g(shù)沒有深度是談不上廣度的。
三、溝通
如果團(tuán)隊(duì)同學(xué)找你,那就要盡可能立即響應(yīng)。立即響應(yīng)的意思是,如果你當(dāng)下有時(shí)間,就立刻和他溝通;如果你白天時(shí)間排滿了,那就晚上和他溝通;如果你實(shí)在晚上的時(shí)間也被占了,那就立刻安排明天一個(gè)時(shí)間,發(fā)出會(huì)議邀約。同學(xué)如果沒有他認(rèn)為重要的事情,一般是不會(huì)主動(dòng)找主管溝通的,立即響應(yīng)是和同學(xué)建立信任的重要方式。如果同學(xué)找你一次兩次都沒得到響應(yīng),或者響應(yīng)比較慢(給人不重視的感覺),那慢慢的很多事情就不會(huì)找你了。最差的情況,同學(xué)下次找你的時(shí)候可能是提轉(zhuǎn)崗了。
要盡量和同學(xué)做 1-on-1,國外專職做管理崗位的,把 1-on-1 作為一個(gè)非常正經(jīng)的日常工作在做,頻率也很高,例如兩周一次。在阿里巴巴,技術(shù) TL 通常沒有這么多的時(shí)間,因?yàn)樯砩铣袚?dān)的職責(zé)除了管理外,還要帶技術(shù),帶項(xiàng)目等等。但還是應(yīng)該做好日常的 1-on-1 溝通,而不僅僅是績效季。比較理想的頻率是一個(gè)月一次。在 1-on-1 的時(shí)候,一方面要給到非常具體的反饋,例如:
- 你做的 x 方案,在設(shè)計(jì)上非常好,考慮到了和隔壁團(tuán)隊(duì)的協(xié)作。
- 你近期的代碼,在 UT 覆蓋上做的不夠。
- 我看到你推進(jìn)的 y 項(xiàng)目,進(jìn)展不及理想,是遇到了什么問題嗎?需要我提供什么幫助?
除了反饋 1-on-1 更重要的是傾聽,同學(xué)在表述自己工作的時(shí)候,狀態(tài)好不好?在什么地方遇到了問題,作為 TL 能提供什么幫助?_其實(shí)很多時(shí)候,即使你暫時(shí)幫不了什么,但是用認(rèn)真的態(tài)度去聽一下同學(xué)的心情,無論這個(gè)心情是充滿熱情,還是沮喪,還是迷茫,對于同學(xué)來說都是非常重要的。我在做 1-on-1 的時(shí)候,都會(huì)做個(gè)簡單的記錄,留著下次 1-on-1 的時(shí)候 review,做好追蹤。
四、工程文化
要建設(shè)一支有戰(zhàn)斗力的團(tuán)隊(duì),優(yōu)秀的工程文化是必不可少的。什么是優(yōu)秀的工程文化?那就是對自己寫代碼,寫的測試,寫的設(shè)計(jì),做的產(chǎn)品,所有這些工程師的產(chǎn)出物,對其質(zhì)量和細(xì)節(jié)有足夠的尊重。為什么說,優(yōu)秀的工程師文化必不可少,我通過以下幾點(diǎn)解釋下:
- 從團(tuán)隊(duì)產(chǎn)品的長期發(fā)展來看,只有保證優(yōu)秀的質(zhì)量,才能保證產(chǎn)品可以長期,高效率的,持續(xù)的迭代。如果設(shè)計(jì)凌亂,代碼質(zhì)量差,無測試覆蓋,那么漸漸所有人的精力都會(huì)被消耗在各種”安全生產(chǎn)“問題上。漸漸的,一個(gè)需求的上線實(shí)現(xiàn),從數(shù)小時(shí)演變成了數(shù)天,甚至數(shù)周。
- 只有擁有優(yōu)秀工程文化的團(tuán)隊(duì),才能吸引優(yōu)秀的工程師。優(yōu)秀的工程師,真心把編程當(dāng)作一門手藝,以自己的手藝為傲。如果團(tuán)隊(duì) TL 不認(rèn)為這是一門應(yīng)當(dāng)引以為傲的手藝,大家漸漸的大家都把事情看成和搬磚無異的性質(zhì),區(qū)別只是工資高低。這樣的氛圍下,團(tuán)隊(duì)的人才構(gòu)成必然是二流甚至是三流的。
建設(shè)工程文化,就是要鼓勵(lì)大家做 Code Review,寫 UT,做好 CI,做知識分享。這些事情聽起來很容易,難的是,如何在項(xiàng)目壓力很大的時(shí)候,依舊堅(jiān)持住。另外,就是要承認(rèn)技術(shù)債的存在,產(chǎn)品上線一段時(shí)間后,必然會(huì)有很多“臨時(shí)方案”存在,作為 TL 要給團(tuán)隊(duì)創(chuàng)造空間,鼓勵(lì)他們花時(shí)間去償還技術(shù)債。
工程文化是技術(shù)團(tuán)隊(duì)的根基,可以讓所有人有一個(gè)正確的參照,什么是對的,什么是應(yīng)該學(xué)習(xí)的,什么是需要遵守的。我們可以看到很多丟失了工程文化的團(tuán)隊(duì),演變成一個(gè)什么樣的狀態(tài),寫看起來都差不多的 PPT,天天拉會(huì)推動(dòng)這個(gè)推動(dòng)那個(gè),遇到問題自己不去查根究底弄清楚原理,而是拉群,組會(huì),溝通…… 漸漸的這樣的團(tuán)隊(duì)的技術(shù)人才會(huì)逐漸流失,剩下的人繼續(xù)用他們擅長的非技術(shù)技能生存。
五、TL 對自己說
除了對外,我還經(jīng)常對自己說:
- 做真實(shí)的自己
- Don’t Panic!
- 耐心點(diǎn)
做真實(shí)的自己。每個(gè)人都有自己的性格特質(zhì),雖然因?yàn)槿松?jīng)歷,人的個(gè)性會(huì)發(fā)生變化,但在短時(shí)間內(nèi)一個(gè)人最本質(zhì)的東西是不會(huì)變化的?;驕匚娜逖?,或狹義豪情,或積極勤奮…… “真實(shí)不裝”是阿里價(jià)值觀中我最喜歡的一條。偽裝一時(shí)是很容易做到了,常年累月把自己偽裝成一種人設(shè),一來自己會(huì)非常累,二來團(tuán)隊(duì)同學(xué)也不是傻子,早晚會(huì)看出這其中虛偽的一面。而一旦一個(gè) TL 讓人感到虛偽,那就無從談起信任的建立了。當(dāng)然,對自我分析,認(rèn)識自己也并不是一件簡單的事情,心理學(xué)分析的書浩如煙海,我喜歡夜深人靜的時(shí)候讀一些。
Don’t Panic!TL 會(huì)面臨各種各樣的壓力,目標(biāo)變化,目標(biāo)難以達(dá)成,績效考核,人和人之間的沖突,團(tuán)隊(duì)很團(tuán)隊(duì)之間的沖突,這個(gè)時(shí)候大家都在看著你怎么處理。在這么多壓力下,人的自然反應(yīng)就是焦慮,甚至驚慌失措。我們知道,在運(yùn)動(dòng)的時(shí)候,演講的時(shí)候,過度的焦慮會(huì)導(dǎo)致動(dòng)作變形,乃至連自己的正常水平都無法發(fā)揮。而 TL 在這種狀態(tài)下,更容易做出錯(cuò)誤的判斷,而且嚴(yán)重焦慮的情緒很容易傳導(dǎo)給整個(gè)團(tuán)隊(duì)。越是這種時(shí)刻,越好穩(wěn)住自己,在有限的條件下,努力做出最合理的判斷,我們必須要承認(rèn)自己再怎么聰明勤奮,也只是普通人而已,并不是漫威中的超級英雄。
耐心點(diǎn)。程序員可能是最沒耐心的一批人,代碼寫下去,首先期望機(jī)器必然給反饋,其次期望機(jī)器立刻給出反饋,對了,還是出錯(cuò)了,一切都要清清楚楚,明明白白。可當(dāng)程序員的角色轉(zhuǎn)變成管理者的時(shí)候,一切就發(fā)生了巨大的變化。你給團(tuán)隊(duì)宣導(dǎo)的目標(biāo),可能有人記住了,有人沒記住;你給同學(xué)指出的問題,可能他幾個(gè)月半年都改不了,或者他根本不想改;你想在團(tuán)隊(duì)建立的工程文化,好像進(jìn)展非常慢,和預(yù)期相差太遠(yuǎn)。其實(shí)這一切都很正常,人腦接受和轉(zhuǎn)化信息,除非是性命攸關(guān)的信息,否則效率都是很低的,一個(gè)人自身積累幾十年的行為模式,哪怕做出細(xì)微的變化,也需要很長的時(shí)間。因此,重要的信息,不要嫌麻煩,可以說三遍甚至更多;而當(dāng)你好心給同學(xué)指出問題,也不要期望對方立刻接受并改變,很多時(shí)候他不做任何改變也是很正常的。但這也不是我們不做正確事情的理由,如果十個(gè)同學(xué)中有一兩個(gè)因?yàn)槟愕闹笇?dǎo),在職業(yè)生涯上突破了自己的一些瓶頸,那已經(jīng)作為 TL 能實(shí)現(xiàn)的巨大成就了。