英文原文:Engineering Managers Should Code 30% of Their Time
在一個科技公司里,軟件技術經理用在編程上的時間應該不低于總工作時間的30%。無論是管理一個團隊,還是一個分部,還是整個公司,當技術經理用在編程上的時間低于30%時,他執行職責的能力就會發生嚴重退化。
我的這個斷言可能跟那些我看到的想成為團隊首領的軟件程序員們期望的情況完全相反。每次晉升,程序員們都期待花在編碼上的時間會大幅度減少,當從“leader”爬到“經理”職位時,就應該徹底脫離編碼活動。而且,他們期望以一種“動口動眼不動手”的方式來保持對代碼庫的熟悉。再上級的領導就跟編碼完全沒關系了(如果有的話)。
大概一年前,當時我的時間被越來越多的其它事情占用,例如招聘,管理,開會等。我就發現,作為一個技術首領,當花在編程上的時間低于某個比例后,管理效果和工作效率就會出現問題。之前我寫過一篇短博客闡述過這種體驗和觀點,但沒有展開具體的描述。這里,我將會對這個觀點展開更詳細的論述。
為什么要堅持編程活動
很多人認為,作為管理者,應該退出戰斗第一線,專注于大戰略和管理工作。當然,管理者把大部分的時間用在這種事情上是應該的。但是,在我們這樣一個行業里,因為我們允許或要求管理者幾乎不再去編程,現實讓我們付出了沉重的代價。一旦一個人停止編碼,他和程序員們關心的事物之間的重要聯系就會退化。當這種情況發生時,決策、計劃和干群關系就會出問題,從而瓦解了將技術人員提升到管理職位的良好愿望基礎。
項目開發評估能力
程序員的百寶箱中最重要的一個絕活就是估計工期。如果沒有準確預估的能力,整體計劃是不可能正確的出臺的。大家也知道,做為一個族群,程序員們對工期的估計是臭名昭著的——糟糕的不能再糟,事實上,當從程序員口中得到一個預估的數字后,公認的方法是將它乘以二。通常,程序員都會對開發工作抱有非常樂觀的態度,但如果我們使用“estimate traction”理論,就會發現,編程活動表現出特別易變的特征。因為我可以用很多方法實現一個功能,當我們在還沒有深入細節之前,我們的估計就是不可靠的。
技術債務
另外一個事情是,對于技術債務給項目造成的影響,技術經理必須掌握第一手的資料。如今,技術債務這個術語非常流行,常被用來當作爭論的彈藥——優先開發新功能還是先重構老代碼。對“技術債務”這個詞的內涵熟悉的人通常最容易發起論戰。作為技術經理,你不僅僅要熟悉這個概念,而且它們會在你判斷何時償還技術債務的決策中起直接作用。經常寫代碼的經理擁有更多更有價值的信息來判斷何時/如何做出這樣的決策。
知情的連續性
我并不是隨意選擇30%的比率的。我是基于自己的經驗,將足夠的時間參與到開發活動中,你很容易就能時刻掌握代碼庫的任何變化。如果時間太少,你對開發動態的掌握就是斷斷續續,無法連成線。一旦斷了線,我就需要重新理順脈絡,由此得到的懲罰就是浪費了額外的時間。
分擔責任
作為負責人,你不可能讓所有決策都由你制定或由你批準。但你需要了解所有決策的前因后果和背景知識,來輔助這些決策。最終,你要為這些決策的后果負責,你對項目情況的掌控能力要能匹配你的這份責任。
積極參與編程贏得團隊尊敬
大家需要明白:要想成為一個成功的經理,你需要為團隊成員提供服務,促進開發,確保他們完成任務。我曾在一篇博客里寫過如何診斷和修復經理們有問題的干群關系。但是對于的管理程序員來說,你需要熱愛編程。因為你的團隊在編程,如果你在編程上做榜樣,他們都會對你肅然起敬。
達到30%的障礙
盡管付出了最大努力,我仍然在保持30%的編碼時間上遇到了很多的阻礙。包括下面這些:
工作繁多:在一個創業公司里,你總有忙不完的工作需要去做,即使在公司有規模、壯大后,如何對眾多都很重要的事情排優先級也是一種考驗。技術經理有很多職責,完全會占滿他的70%的時間。下面就是一些:
奪回時間:上面我說的這些活動都是一個技術經理應該投入時間的事情。下面要說的是我從經驗中發現的一些陷阱,是它們在阻擋我努力保持20%最低限度的編碼時間,至今仍站在我面前,妨礙我重回30%的目標。
失敗的策略
當在探索如何奪回我的編碼時間時,有很多的方法并不奏效。
成功的策略
盡管走了很多死胡同,我還是發現了一些成功的方法:
最后幾招
下面是一些經驗建議,送給那些發現自己試圖達到30%但無法接近的技術經理們:
我希望這些方法對你們有用。如果你有其它更好的技巧,請在評論里告訴我。謝謝。