先做下自我介紹:李國鵬,EGO北京第四小組成員,目前在北京風信科技有限公司任CTO,主要業務方向是企業移動安全。在加入風信開始創業之前,由于職位原因,我連續好多年和各種技術背景、項目背景的團隊打交道,因為我不在管理崗,所以有機會從非管理的角度來接觸技術團隊,觀察和研究團隊的健康狀態、團隊成員的工作滿意度以及由此引起的短期和長期執行力變化。
在影響團隊長遠戰斗力的諸多因素中,比較有意思同時也非常關鍵的一個因素是對tech lead 的選擇和培養,這也是我們今天的話題。
千軍易得,一將難求
對技術團隊來說,怎么強調tech lead的重要性都不算過分。
好的tech lead能極大程度提升團隊的凝聚力和執行力;嚴重不合格的tech lead會導致團隊迅速崩潰,但好在暴露快、時間短、危害小。接近合格水平的tech lead則既不容易替換,又讓產品的進度和質量緩慢、持續下降,處理不好的話會積重難返,最終變成滅頂之災(接近合格水平的技術經理也一樣)。
招聘難,招tech lead更難,相信群里的各位都深有體會。要技術強、要工程經驗豐富、要善于協作;要能coding、能設計、能寫文檔、能演講;積極主動、抗壓好、學習快;溝通必須好、產品必須關注;有團隊領導能力、最好還懂管理技巧... 可上九天攬月,可下五洋捉鱉...
總之一句話,我們希望他ride a white horse and save the day。
在產品進度出問題、質量出問題的時候,tech lead更容易成為萬眾矚目的焦點,或者說被放在火上烤。比如在某公司一次線上事故中,幾個副總、幾個總監加上更多一線經理熱火朝天參與的方案(che)討論(dan)會的背后,是一個默默看代碼解決問題的小lead。似乎只有神或者神一樣的男人才能做好tech lead。
但從管理的角度看,職位(自然也包括tech lead)是為普通人設計的。你我皆凡人,十全十美不光是臣妾,大家都做不到。
那么問題來了,tech lead 應該做什么?他需要具備什么樣的素質?應該怎么找到他?
Tech Lead 的職責
廣義上Tech lead有很多種概念。我的理解是:主要從事技術工作;獨立負責某個工作方向;帶領 1-15 人的技術團隊;在團隊內沒有更細致的管理結構;交付軟件開發、測試或研究成果。
1、對結果負責
在技術團隊中,tech lead和其他成員的本質區別在于:tech lead不僅要完成技術任務,還『必須對團隊的交付結果負責』。
『對結果負責』要求他絕不能沉迷于技術,他要關注產品需求,關注團隊和其它團隊之間的關系,掌握技術優雅和人力、時間、進度之間的平衡。他是和團隊工作在一起的一線架構師,同時也是方案的執行者。如果團隊里技術最強的工程師沒有這方面的意識的話,那他可以成為團隊內的領域專家,但不適合成為 lead。
2、干別人不干的活
以開發組為例,一個成功的開發組需要多種角色來承擔如下任務:
需求分析、系統分析、設計、實現、集成、測試、交付
保持團隊的工作目標和項目目標一致,拆分長期目標到階段性短期目標
文檔編寫、環境搭建、部署、維護
外部協作(軟硬件資源、系統依賴、依賴對方、被對方依賴)
工作量估算、任務分配、進度跟蹤、任務調整
風險監控(技術風險、進度控制、質量控制),發現、預警、處理風險
匯報、統計、向管理層透明化展示團隊的工作狀態
其它非技術的溝通管理工作。
不同公司的行政結構、企業文化以及個人能力的差異很大。有些公司除tech lead外,還給團隊配備了技術經理、敏捷教練、一二線架構師;有的公司則可能連合格的產品經理都沒有,這導致tech lead在不同環境下的具體分工有非常大的區別。
大公司的tech lead可以只做開發相關的具體工作;而小公司的tech lead可能就是CTO。無論分工如何,既然Tech lead要對結果負責,他就必須做團隊里(有時包括團隊外)沒人干的活 —— 不管是沒人能干還是沒人愿意干。
3、Say People Words(說人話)
一般來說,tech lead要負責的內容有:技術決策 + 掌控進度 + 實現目標 + [改進流程]。
技術決策者:Tech lead應該是團隊內技術最全面的人,即使團隊內有比自己更精通某個細分方向的領域專家,tech lead也必須是主要技術方向的決策者。
不能深入理解技術方案 -> 很難對進度做正確評估 -> 無法提前發現和控制技術風險 -> 影響目標實現(理解技術方案和理解每一個細節接口和代碼是兩碼事。在一個中型的多功能團隊里,希望tech lead掌控每一個細節是不可能的)。
進度掌控者:為了掌控進度,tech lead會持續跟蹤(所有人的)進度,及時發現技術和非技術風險(比如對外部的依賴),通過各種手段降低風險危害,必要的時候還會砍掉次要目標以確保主要目標的實現。
4、進階:流程緩沖加落地
優秀的tech lead除實現目標外,還能成為團隊最佳工程實踐的推動者。在沒有流程的小公司,流程確立靠tech lead;在流程打滿無數張A4紙的大公司,流程落地靠tech lead.
最佳工程實踐的信條一抓一把,但是具體落到每個公司都不太像那么回事。每個團隊都有自己的特定情況,都需要有所變通。區別只是靈活的團隊可以搞得心照不宣、隨心所欲而不逾矩;而處理不太好的團隊就難免搞得魚死網破。
流程改進是一個持續而漫長的過程,只要團隊有成長,成長速度能夠跟得上公司的變化,就是最好的團隊,不應該苛求團隊的行為必須符合教科書上的最佳實踐。
我的經驗是流程改進和系統設計一樣,需要兼顧自頂向下和自底向上,tech lead是兩者之間最好的“膠合層”,這樣既不至于違背高層的流程設計目標,又給團隊保留了足夠的靈活度,還有機會向上提供反饋以改進過于僵化的流程框架。
團隊是流程最重要的執行單位,在成熟的研發體系和組織架構下,tech lead不必參與流程改進,但是如果能關注并提供反饋就可以給流程的決策者提供有價值的信息,也許有機會避免一些災難性的后果(雖然在成熟體系下很難撼動既有框架)。
Tech Lead 的特質
作為tech lead,他對技術團隊的整體結果負責。他懂得要事先行,他也懂得根據形勢動態調整優先級,不拘泥、不固化。如果團隊成員的技術能力弱于他,他的任務拆解能力和解決核心技術問題的能力同樣重要。如果團隊成員的技術水準和他一樣高(甚至更高),他的心胸和愿意為團隊服務的態度很重要;持開放的心態接受不同意見,關鍵時刻有自己的決斷,并且愿意做其他人不做的臟活累活是他的顯著特征。
他關注細節,也關注愿景;關注腳下的每一步,也關注終點的方位和路徑。他識別問題,暴露風險,不遮掩,不拖延。他的心中不光有技術,還有成本;不光有目標,還有人;不光有規則,還有變通。他不把個人野心凌駕在團隊目標之上。
有一個關于技術副總(engineering VP)和CTO分工的說法:技術副總要帶領團隊披荊斬棘、穿越叢林,CTO則需要努力飛高一點看明方向。對于一線技術團隊來說,tech lead在自己負責的范圍內,要成為這兩種形象的合體。既要腳踏實地和大家一起快速前進,又要不斷跳高遠望,確保團隊工作在正確的方向上。
簡單地說,一只眼要看著整體目標(比如半年、一年的工作目標),一只眼看著自己的短期目標(比如一個星期、一個迭代的目標)。這是tech lead有別于其他成員的核心能力之一。
發現 Tech Lead
我基本上是按照上面的規則按圖索驥。
我很贊同 YC創業課上“如何運營公司”中的觀點:在沒有上下級關系的時候,如果很多人不斷跑到一個人的桌子前面去請教問題、去尋求幫助,那這個人就是lead。
另外還有一種lead也同樣優秀:在沒有上下級關系,同時也沒有直接利益關系的情況下(比如不能為對方的績效考評說話),能帶動周圍的人共同完成目標。
核心lead的另一個識別特征:在項目前期能有條理地梳理項目的脈絡,能清晰地拆分關鍵技術任務,能夠在各方面都還不清楚的時候就有節奏的忙起來,同時又不瞎折騰。核心lead的其它特征:自主性強,在沒有明確指導的情況下能夠獨立完成工作任務,并且主動擴大自己的防區。
培養 Tech Lead
一個人很難同時具有所有的優點,只要具備幾個方向的優點,同時沒有不可接受的缺點,就有潛力可以培養。欠缺的方面可以由其他人來補充。在培養tech lead方面,大家肯定都有自己的絕招。在這里,我簡單介紹下風信現在的實踐方法:
作為一個沒有什么知名度,也不愿意砸錢挖人的創業公司,一方面我們積極尋找志同道合,愿意共同創業的lead和優秀工程師加入。另一方面,我們更加積極和努力的在內部做人才培養,希望我們現有的團隊成員都能在一兩年內成長為合格的tech lead。
我們的基本要求是:要帶好別人,先帶好自己 (to lead others, learn to lead yourself first)。
"lead yourself" 是我們的核心文化之一。作為知識工作者,是否能成為lead不看一個人現在管多少人,而要看他能負責什么東西。
我們曾經有過一個內部會議,討論的話題是『如果在風信創業失敗關門的時候,你只鍛煉了一種能力,你希望是什么』。最終的結論是“明白做事情的流程,分清任務優先級,專注工作八小時,成為自己的lead”。這當然不足以讓人成為一個合格的tech lead,但應該是成為 lead的必由之路。
我們花非常多的精力在日常工作中鍛煉團隊的領導能力。包括:
強制每周都要有人做內部培訓,話題不限,以鍛煉主持人的文字組織能力、演講和溝通能力、會議主持能力;
努力不放過任何一次大型會議機會,不斷的培養主持人、記錄員以及參與者的討論和溝通能力、代辦事項的跟蹤執行能力等等;
每個月至少一次正式回顧會議(通常在六個小時以上),集體討論公司發展的問題和建議,我覺得這是我們在領導力培訓上最有成果的單項活動(需要有足夠深入的參與度);
在團隊的溝通協作上,不以解決溝通問題為最終目標,而是通過培養開放、透明、坦誠的文化,努力提升團隊成員在溝通中的影響力;
在任務分解、工作安排上,培養要事先行,識別動態優先級的能力;
努力培養大家在一個正確的抽象層次上處理問題——這不僅僅是為了編碼;
另外最主要的就是充分信任和授權,允許團隊成員犯錯誤,給大家足夠的鍛煉機會!