摘自 sean goedecke 博客 《啥也不干》
很多程序員,真該少干點活兒。我指的不光是少寫兩行代碼、少提交幾個改動,而是字面意義上的——每天少干幾個小時。就算到了該干活的時候,也得把節(jié)奏放慢。我習(xí)慣讓自己的“占用率”默認(rèn)停在八成:除非手頭有火燒眉毛的項目,否則每天至少有兩成時間,我是完全不碰電腦的。
真正值錢的活兒,往往不靠拼命
為什么?因為在一家科技公司里,決定你績效的,往往是一些“非常規(guī)事件”?;仡^想想,我做過最有沖擊力的那些改動,很多其實簡單到不可思議。搞軟件開發(fā),從來就不是拼誰更努力,關(guān)鍵是在對的時間點,解決對的問題。
在有點規(guī)模的工程師團(tuán)隊里,總有一些芝麻大的技術(shù)活兒,你只要干了,就能給公司帶來幾千萬甚至上億的回報。說三種最常見的情況:
第一,公司正在爭取一筆大單子,這時候你帶著一個功能或者一個 bug 修復(fù)半路殺出來,很可能直接促成簽約。功能甚至不需要多完美,有時候讓對方看見你們反應(yīng)夠快、愿意馬上動手改,這本身就夠了。
第二,提早預(yù)防或者及時摁住一次線上事故——很多時候你只需要知道該關(guān)哪個功能開關(guān)——就能省下一大筆錢。不止是事故那幾分鐘丟掉的收入,還有那些本來可能因此流失的客戶,或者打死也不肯再簽的待定合同。
第三,公司想上線一個備受矚目的功能,成敗往往就卡在一些不起眼卻又沒人懂的破事上(比如,得能在用戶設(shè)置里飛快加個新字段,或者去搞那個好幾年沒人碰、一坨屎山的企業(yè)數(shù)據(jù)導(dǎo)出功能)。你對系統(tǒng)熟不熟,就能決定這種改動是花幾個小時,還是拖上整整一周。
這些例子有個共同點:全都跟時機(jī)綁定。你沒法早上坐到工位,才臨時拍腦袋說“我今天要去促成一個重大交易”“我去壓個事故”“我去給重點功能提提速”。難道純粹是“來得早不如來得巧”?不完全是。更重要的是,你不能是個本來就忙得腳不沾地的人。
你得“松”下來
如果你永遠(yuǎn)把自己用到 100%,埋頭干那些優(yōu)先級排不上號的活兒——比如說,不停從待辦列表里薅工單,干掉,再薅下一個——那你就會從兩個方向上,完美錯過那些真正值錢的活兒。
第一,你會忙到根本沒眼力勁兒發(fā)現(xiàn)機(jī)會。你不會跟做其他事的同事閑聊,不看團(tuán)隊周報,也不關(guān)心正在發(fā)生的故障。這樣一來,參與高影響力工作的最佳途徑——主動拿自己的本事去幫忙——就跟你沒啥關(guān)系了。
第二,如果你整天看上去都忙得冒煙,你老板也就不好意思再幫你攬活了。而這就是參與這類工作的第二條好路子:讓你老板或產(chǎn)品經(jīng)理說,“哦,Sean 這會兒有勁兒,我叫他上”。這條路為什么更好?因為老板和產(chǎn)品經(jīng)理對啥活兒含金量高,通常比你清楚得多。很多會,你壓根兒就沒參加。
啥也不干,不是罪
如果你應(yīng)該把時間留給那些高含金量的活兒,而不是埋頭刷工單,那你每分鐘到底該干嘛?難道真就啥也不干?對啊!
啥也不干,其實是好事。搞軟件工程是個有壓力的活兒,但這種壓力通常不是均勻的:它往往來自偶發(fā)的線上事故、急得上墻的緊急需求,或者(最近這兩年)大裁員。假如你在工作中那些相對太平的階段,也繃得跟救火一樣緊,那等真正高壓的事兒砸過來,你早就又累又麻,根本扛不住。
就算在壓力山大的時候,啥也不干也還是好事。我給剛接手 on-call 的工程師一個建議:別著急忙慌的。接起電話、張嘴說話之前,先喘兩口氣,整體上試著“用慢鏡頭思考”。大多數(shù)線上事故自己就會消停。事故處理期間,那些火急火燎、覺得“試試這個說不定能好”的改動,十有八九只會讓事情更糟。有個通用法則:只要你做到不慌,你的事故響應(yīng)水平就已經(jīng)超過絕大多數(shù)工程師了。
“啥也不干”本身就是一個讓事情發(fā)生的空間。讓你的腦子歇一歇,你反而更可能冒出些新點子。當(dāng)有人甩給你一個重要任務(wù),你能把全部注意力投進(jìn)去,而不是跟前前后后三件后臺跑著的事來回拉扯。當(dāng)你不那么忙的時候,才有時間東看看西看看,吸收點新信息。
有意識地“不去碰”某些事
很多工程師看到有活兒擺在那兒,卻不去做,心里就會七上八下。我也是這德行,這是一種很多軟件工程師共享的心理癖好,因為(在一定限度內(nèi))有這種癖好,你才適合干這行。所以,為了能勻出時間“啥也不干”,有時候你得硬逼著自己別往上湊。
舉個例子,我覺得工程師一般來說應(yīng)該躲著點“膠水工作”。大多數(shù)膠水工作——比如確保大家互相通氣、給不是你主導(dǎo)的項目更新文檔、主動跳出來說要處理技術(shù)債——反映的其實是組織沒真正重視這些事。要是真重視,哪還用得著你主動往上貼?這里面就兩種情況:要么這事兒放任不管也沒啥大事,要么這就是個大坑。如果沒啥大事,那你就不該跳上去接著,純屬浪費自己時間,還會讓老板覺得你煩。如果這是個天大的錯誤,那你更不能干。因為你在拿自己的職業(yè)生涯和心理健康當(dāng)護(hù)墊,讓公司不用為自己犯的錯付出代價。
這對你來說是筆血虧的買賣,給后輩同事樹了壞榜樣,還開了個壞頭——等你哪天毫無意外地 burnout 之后,馬上又會有下一個人被推進(jìn)同一個坑里。如果后果真的很嚴(yán)重,那就讓它發(fā)生好了,這樣組織才能感到疼,然后改它的規(guī)矩。
我還覺得,太熱心腸會讓你在那些想白嫖你勞動的人面前變得很脆弱。科技公司里,到處是想從工程師身上榨取無償勞動的人。這跟你通過正常渠道接的活兒不一樣,后者的回報是晉升、獎金(還有你正常的工資)。我說的,是那些通過私下渠道摸過來的活兒——對方?jīng)]有能力,也沒那個意愿,保證這些工作能正式記在你名下。比如,其他部門的產(chǎn)品經(jīng)理給你發(fā)消息:“你查數(shù)據(jù)太牛了,能幫我拉一下關(guān)于 X 的統(tǒng)計嗎?”或者另一個團(tuán)隊的工程師找你“結(jié)對編程”,到最后變成代碼全是你寫的,人家安安靜靜用自己的名字把改動交了上去。這類活兒,適量幫點沒什么,能拉一把是一把。但你必須得會“施加反向壓力”——要么直接說“不”,要么就故意把回復(fù)拖上幾個小時甚至幾天。
還有個很值得避開的坑:別在那些大概率會不了了之的事情上砸太多心血。比如說,你正跟著一個邊做邊改主意的產(chǎn)品設(shè)計師干活。早上九點,他說頁面頭部要長這樣;十點,他又來微調(diào);十一點,再改……你千萬別傻到每個小時都撲上去把整個頁面重寫一遍。相反,你應(yīng)該啥也不干(比如下樓溜達(dá)一圈),然后下午照著最新一版設(shè)計,一次性改完。另一種常見情況是:“一個沒啥政治能量的經(jīng)理,突然蹦出個宏大想法”。通常,你大可以熬時間,熬到這個項目理所當(dāng)然地流產(chǎn)。
總結(jié)
很多軟件工程的建議和工具,都是圍繞怎么放大你“努力”的能力來設(shè)計的:幫你同時干更多的事,做更大規(guī)模的項目,或者單純敲出更多代碼。但搞軟件工程能不能成事,跟這些都沒太大關(guān)系。關(guān)鍵在于在正確的時間做正確的事,而這恰恰要求你在日常工作中,刻意收住一部分力。
就我的經(jīng)驗來看,只出八分力,照樣能當(dāng)“高績效工程師”。實際上,這樣更容易。因為你不大會因為壓力犯低級錯誤,而且你隨時都能騰出手,跳上那種能帶來超額回報的高含金量任務(wù)。
這不代表你就得永遠(yuǎn)不拼命。我大概一年會有兩三次,把自己推到極致:長時間、極高強(qiáng)度地專注,從睜眼到閉眼腦子里都是那一個問題。但我把這種模式,只留給回報真的極高的時刻。剩下的時間,我基本都過得比較從容。