引言:技術(shù)硬實力很重要萝衩,然而技術(shù)軟實力同樣也很重要猩谊,本文一起探討下應該怎樣做事祭刚。
吳孟達的一句”你在教我做事啊“成了生活中一個開玩笑的梗墙牌,大家都喜歡以自己的方式做事情暗甥,然而我們的做事方式真的正確嗎,是否有更好的做事方式了淋袖,值得深入研究探討锯梁。
如果本文是告訴你陌凳,要認真做事,要專心做事初橘,巴拉巴拉,說一大推老生常談的東西充岛,估計你看到直接想罵人:“真是閑的蛋疼保檐,扯一堆沒用的”。如果真是那樣崔梗,我自己也會罵自己吃飽了撐的夜只,浪費大好時間和精力。
那么蒜魄,本文究竟想探討什么了扔亥?本文是想探討和總結(jié)一些好的做事方式或者是一些形成體系的方法論,它不是那種籠統(tǒng)的東西谈为,而是一些具體的且行之有效的且經(jīng)過實踐檢驗的做事理論旅挤。
按照時間順序,對于做一件事情伞鲫,我們將其分為事前粘茄、事中和事后三個階段,就每個階段秕脓,再分別探討分析下驹闰,應該做什么以及怎么做。為什么要這么拆分了撒会?是因為,我們很多時候屹培,只關(guān)注“事中”階段褪秀,只想著怎么把事情做好做完,而事情做完后仑氛,又馬上投入了其他事情锯岖,忽略了事前和事后階段出吹,然后那才是往往決定一個人成長和發(fā)展的關(guān)鍵環(huán)節(jié)捶牢。比如我們有沒有思考過什么要做這件事秋麸、目標是啥灸蟆。做完后次乓,是否有思考過這個是否可以適用其他場景甚至抽象出一些通用的東西票腰,此外自己從中是否有學到什么了時候有總結(jié)了杏慰。
本文將圍繞“事前-事中-事后”三個階段缘滥,去展開各個環(huán)節(jié)中的一些方論論討論朝扼,最終希望形成一個成體系的閉環(huán)思維和做事方法論擎颖。
事前階段
“為什么要做這件事搂捧?”允跑,“痛點是什么聋丝?”潮针,這是很多大佬經(jīng)常問的問題每篷,往往是在你滔滔不絕地介紹方案的時候焦读,大佬們就用這個問題打斷了你矗晃,既然大佬們經(jīng)常問张症,說明背后一定有其深層原因俗他,結(jié)合我自身的理解我從技術(shù)優(yōu)化類和產(chǎn)品需求類來分析這個思考的必要性吧阔逼,這是碼農(nóng)日常最常見的兩類事情羡亩。
產(chǎn)品需求類: 很多人說危融, 這個產(chǎn)品都已經(jīng)思考好了, 照著做就是了辞居,哪來那么多為什么呀速侈?的確倚搬,在我們這些碼農(nóng)接到需求之前每界,產(chǎn)品同學內(nèi)部應該都討論多倫了庙楚,但是我們還是要去理解一下需求背后的深層原因馒闷,一方面能夠加深對需求的理解纳账、提高業(yè)務理解能力疏虫, 另一方面也能通過對需求本質(zhì)的理解在設計方案的時候思路更清晰卧秘,例如技術(shù)方案評審的時候被問到為什么這么做翅敌、而不是那么做的時候哼御, 你能結(jié)合需求業(yè)務場景和擴展性等作出清晰的解釋恋昼。
技術(shù)優(yōu)化類: 比如你覺得現(xiàn)在網(wǎng)絡框架中需要引入 quic 液肌,你要思考的問題就是為什么要引入 谤祖, 是 quic 比較弱網(wǎng)情況下性能比較好粥喜?那再問额湘,我們目前的網(wǎng)絡庫性能表現(xiàn)不好嗎锋华? 有沒有數(shù)據(jù)支撐說明毯焕? 另外做完這件事投入是多少纳猫? 收益是多少擅耽?能不能從現(xiàn)有的數(shù)據(jù)情況推論出做這件事之后的收益? 這些問題想清楚之后憾儒,規(guī)劃執(zhí)行才能有理有據(jù)起趾,你的 leader 才可能給你爭取資源來做训裆。
思考動機
知道經(jīng)常被問和理解其必要性之后边琉,我們就來準備怎么才能清晰回答這些問題,要想應對自如定欧,就是提前問自己渔呵,方法論是:“2P挖掘法”:
即至少找出兩個痛點或者兩個論據(jù)來支持你做這件事的必要性扩氢, 這兩個痛點不是拍腦袋或憑感覺,最好要有嚴格的數(shù)據(jù)說明巩检。
例如,現(xiàn)在要對一個百人的項目做組件化重構(gòu)迟螺,痛點是: 1. 編譯太慢矩父,影響開發(fā)效率;2. 模塊耦合嚴重球订,維護成本高; 為了進一步說明這個痛點有多痛开睡, 你可以用一些數(shù)據(jù)說明苟耻,例如一次編譯要 20min, 一般開發(fā)在開發(fā)和解 bug 平均一天編譯 6 次,一天花在編譯上的時間就是 2h蝗茁, 一百人的團隊, 一天浪費的時間就是 200h哮翘; 如果能組件化后單獨編譯組件只要 2min , 一天就能節(jié)約180h 的時間。 如果每件事情都逼迫自己至少挖出兩個以上類似的痛點或論據(jù),后續(xù)被問到 why 的時候署驻,一定能應對自如糖埋, 因為你早就已經(jīng)經(jīng)過了深思熟慮 。
目標制定
如何深刻理解目標瞳别?一方面要有基礎(chǔ)的知識、能力積累,另一方面要靈活運用SMART原則從不同維度梳理目標痪宰。
● S:具體乖订,把目標明確到一件具體的結(jié)果上,而不是虛無縹緲抓不住的想法乍构;M:量化扛点,搞清楚需要達到什么量化的結(jié)果奥帘;
● A:可實現(xiàn)仪召,認真考量目標是否可以實現(xiàn)扔茅,團隊的資源、能力店读、士氣是否足夠達成目標所需的條件文虏,如果不滿足怎么辦灭忠,如果遠遠超出能力范圍,就不要做承諾;
● R:有意義原杂,做這件事對公司印颤、對團隊、對個人是否有意義穿肄,深刻理解其中的意義是什么年局;
● T:有時限,明確了解完成目標最終實現(xiàn)的時間限制咸产。
事中階段
想清楚為什么做這件事之后矢否,做的時候就能放開顧慮去做了, 包括方案設計脑溢、落地實施僵朗、問題處理等重要的步驟。
設計優(yōu)先
“設計優(yōu)先”這條原則屑彻,相對來說更加具體一些验庙。之所以單列一項,是因為架構(gòu)設計太重要了社牲。Uncle Bob曾說過:“軟件架構(gòu)的目標粪薛,是為了讓構(gòu)建與維護系統(tǒng)的所需人力資源最小化〔簦”
架構(gòu)設計违寿,并不僅僅關(guān)系到系統(tǒng)的質(zhì)量,還關(guān)乎團隊的效能問題熟空。很多團隊也有明文規(guī)定藤巢,開發(fā)周期在3pd以上的項目必須有設計文檔,開發(fā)周期在5pd以上的項目必須有設計評審息罗。在具體的執(zhí)行過程中掂咒,由于各種原因,設計往往并不能達到預期的效果阱当。究其原因俏扩,有的是因為項目周期緊,來不及設計得足夠詳細弊添;有的是因為RD主觀上認為項目比較簡單,設計草草了事捌木。無數(shù)事實證明油坝,忽略了前期設計,往往會導致后續(xù)開發(fā)周期被大幅拉長,給項目帶來了很大的Delay風險澈圈。而且最可怕的是彬檀,不當?shù)脑O計會給項目帶來巨大的后期維護成本,我們不得不騰出時間瞬女,專門進行項目的優(yōu)化與重構(gòu)窍帝。因此,無論什么時候都要記住“設計優(yōu)先”這一原則诽偷。磨刀不誤砍柴工坤学,前期良好的設計,會給項目開發(fā)以及后期維護帶來極大的收益报慕。
“設計優(yōu)先”這一原則深浮,要求寫別人看得懂的設計。我們了解一個系統(tǒng)最直接的途徑就是結(jié)合設計文檔與代碼眠冈。在實際工作中飞苇,很多同學的設計文檔讓大家看得一頭霧水,通篇下來蜗顽,看不出系統(tǒng)整體的設計思路布卡。其實,設計的過程是一種智力上的創(chuàng)造雇盖,我們更希望它能成為個人與集體智慧的結(jié)晶忿等。如何才能讓我們的設計變得通俗易懂?我個人認為刊懈,設計應該盡量使用比較合理的邏輯这弧,進而把設計中的一些點組織起來。比如可以使用從抽象到具體虚汛,由總到分的結(jié)構(gòu)來組織材料匾浪。在設計過程中,要以需求為出發(fā)點卷哩,通過合理的抽象把問題簡化蛋辈,講清楚各個模塊之間的關(guān)系,再詳細分述模塊的實現(xiàn)細節(jié)将谊。做完設計之后冷溶,可以發(fā)給比較資深的RD或者PM審閱一下,根據(jù)他們的反饋再進行完善尊浓。好的設計逞频,一定是邏輯清晰易懂、細節(jié)落地可執(zhí)行的栋齿。
如何設計方案
“你為什么選擇這個方案苗胀?”襟诸、“你的方案考慮過xxx這種情況嗎?”基协、“業(yè)界是怎么做的歌亲?為啥不使用xxx開源方案?”澜驮,這些都是在一場技術(shù)評審會上被問得最多的問題陷揪, 如果你的回答是支支吾吾、臨時拼湊杂穷,那么就會給人留下你沒有深入研究的印象悍缠。 解決這個問題的方法是:每次設計方案的時候逼迫自己想出三個備選方案,如果你想出了三個方案亭畜,那么前面提到的哪些問題扮休,你一定都提前問過自己了。這個其實就是3C 方案設計法:
3C 拴鸵,即三個 Choice, 主要是逼迫自己去想更多的可能性玷坠, 橫向?qū)Ρ刃袠I(yè)是怎么做的,是不是可以拿來用劲藐, 自身業(yè)務情況下是不是有更多選擇八堡, 嚴格按照這個思維去做方案, 久而久之也會無形中提高自己的深度和廣度聘芜,有人可能會覺得浪費時間兄渺,想快,這也是人的天性汰现,但是我們用這些方法論不就是對抗人性的弱點嗎挂谍? 如果為了快,方案有多潦草瞎饲,技術(shù)評審會上討論就有多激烈口叙, 最終也浪費了大家的時間,最終返工浪費的時間更多嗅战,還給大佬留下不好的印象妄田, 所以”3C“還是值得花時間去做的。
穩(wěn)步推進
落地實施的進度條
方案設計之后驮捍, 就是怎么推動事情落地了疟呐。 首先把任務按照依賴關(guān)系最小粒度的劃分,評估每個模塊的工作量东且,最后評估出總的工作量启具, 然后排上計劃,執(zhí)行的時候就開始了我們的進度條珊泳, 如果太長 富纸,可以劃分為 2~3 個里程碑囤踩,執(zhí)行過程隨時檢測進度旨椒,是不是存在風險晓褪。需要注意的是, 在拆解任務的時候盡量識別出依賴或被依賴的關(guān)鍵節(jié)點综慎,盡早安排涣仿,實際開發(fā)中, 工作量評估最常見的盲區(qū)就是忽略了跨組聯(lián)調(diào)示惊、對接話的時間好港,這些節(jié)點往往也容易成為項目進度風險的關(guān)鍵因素。
借助他人的力量
程序員最容易犯的錯誤就是習慣自己一個人埋頭苦干米罚,希望自己能搞定一切事情钧汹,怕打擾他人, 但是有些事情需要他人配合才能完成录择,甚至需要依賴外部團隊拔莱, 怎么推動他人按照自己的計劃配合完成事情呢? 這里我覺得和平時做人有些關(guān)系(并不是指人品好壞)隘竭,我覺得會有一篇《大佬們的做人方法論》塘秦, 如果是熟人、或有交情的人动看,推動起來就事半功倍尊剔,如果不熟悉,的確不太好推動菱皆,可能平時多和兄弟團隊多打打招呼须误、多認識認識會有些好處。 如果自己無法驅(qū)動時仇轻, 可以借助 leader 的力量京痢, leader 出面,對方也會重視起來拯田,別人配合你做事也有名有分历造。
問題分析
方案執(zhí)行或上線灰度中會遇到一些問題,需要我們第一時間去分析原因船庇。這里吭产,我們要注意直接原因和根本原因的區(qū)分,那么什么是直接原因和根本原因了鸭轮?舉個例子:
問題:為何請求出現(xiàn)502臣淤?
回答:因為服務發(fā)生了重啟。
對于窃爷,上面這個例子邑蒋,當用戶請求發(fā)生502時姓蜂,分析下,很快就發(fā)現(xiàn)服務發(fā)生了重啟導致請求找不到服務医吊,進而導致了502钱慢。因為服務重啟頻率很低,很多人到這一步可能就結(jié)束了卿堂。然而束莫,真正原因是什么了,繼續(xù)深入:
問題:為何發(fā)生重啟?
回答:因為服務發(fā)生OOM草描?
問題:為何OOM?
回答:因為服務JVM參數(shù)設置不合理览绿,導致OOM
可以,發(fā)現(xiàn)服務是由于JVM參數(shù)設置不合理穗慕,在某些特殊的場景后饿敲,就會發(fā)生OOM。對于上面這個例子逛绵,其中服務重啟就是直接原因怀各,而JVM參數(shù)設置不合理才是根本原因。如果找到直接原因就打住暑脆,那么其實根本原因沒找到渠啤, 遲早還是會出問題。
因此添吗,我們需要區(qū)分直接原因和根本原因沥曹,對于每一個問題都要找到根本原因,那么如何找到根本原因了碟联?通過連續(xù)追問妓美,就可以找到根本原因,這個方法叫做 “5W根因分析法”鲤孵,最初是由豐田集團創(chuàng)始人豐田佐吉提出的, 這方法論指導豐田成為世界名企壶栋,具體內(nèi)容如下:
實踐應用中,不一定要問5個問題普监,有時可能問到第三個就找到了根本原因了贵试,這里需要注意的時,在連續(xù)追問的時候可能容易挑起情緒化凯正,認為發(fā)問者是在刁難你毙玻,容易引發(fā)撕逼;問之前也可以強調(diào)下廊散,接下來我們要用5W根因分析法找原因了桑滩,大家不要情緒化。 我相信大家在實際過程中都被 leader 的連環(huán)奪命問折磨過允睹, 解決的方法是:提前用連環(huán)奪命問先折磨自己运准,避免同步問題的時候被 leader 連環(huán)奪命問折磨幌氮。
事后階段
事后包括:事后反饋,事后匯報胁澳,事后總結(jié)该互。
事后反饋
凡事有交代,件件有著落听哭,事事有回音慢洋。很多人,事情做完了陆盘, leader 不問,你也不說败明,那leader就無法把握事情的進展隘马,如果出現(xiàn)問題影響了項目整體進度,那這風險就不可控了妻顶。
因此酸员,面對別人交代的事,尤其是上級交代的一件事情讳嘱,作為下屬應該盡力去完成 幔嗦,而最后不管完成的質(zhì)量如何都應該在約定的時間內(nèi)給領(lǐng)導一個反饋。
事后匯報
當我們把事情做完后沥潭,很多時候邀泉,像別人匯報或稱述時,總是邏輯混亂钝鸽,或者啰哩啰嗦汇恤,抓不住重點,這里建議采用金字塔模式展開拔恰。
何為金字塔模式因谎?簡單來講,就是任何事都可以總結(jié)出一個結(jié)論(結(jié)論先行)颜懊,然后這個結(jié)論由三至七個分論據(jù)支撐财岔,而這些分論據(jù)又本身也可作為分論點,如此延伸下去河爹,猶如一個金字塔匠璧。
邏輯上,可以采用金字塔模式昌抠,形式上可以如果可以用上SCQOR法則患朱,那就更完美了,何為SCQOR炊苫?其中:
● S是情景(Situation);由聽眾熟悉的情景引入——項目背景
● C是矛盾(Complication); 說明發(fā)生的沖突——現(xiàn)狀分析
● Q是問題(Question):引發(fā)或提出問題裁厅?——問題解析
● O是具體內(nèi)容或過程(Obstracle)冰沙,如何解決問題,客服障礙
● R是解決收尾(Resolution )
如果要將SCQOR大致做出區(qū)分执虹,SCQ是故事的導入拓挥,通過匯報對象已經(jīng)熟知的事物或信息來導入,使匯報對象產(chǎn)生疑問袋励,過渡到希望要引出回答的問題上侥啤。O為故事的中心,R則是故事的結(jié)尾茬故。一般來說故事的導入和結(jié)尾內(nèi)容比較少盖灸,故事的中心內(nèi)容篇幅最多。以大家熟悉的“起磺芭、承赁炎、轉(zhuǎn)、合”架構(gòu)來做對照钾腺,SCQ為起徙垫,O為“承、轉(zhuǎn)放棒、承姻报、轉(zhuǎn)、承间螟、轉(zhuǎn)”吴旋,R是合。
事后總結(jié)
很多人寒亥,事情做完了邮府,自己也很少去總結(jié),但是辛辛苦苦做完事情溉奕,如果不去做一個總結(jié)的話褂傀,其實是比較虧的。更重要的是給自己一個總結(jié)加勤、幫組自己成長仙辟。哪些沒做好需要提升,哪些是做的好的鳄梅,有沒有什么亮點叠国、難點、挑戰(zhàn)等。
那么,如何總結(jié)了谎亩,可以采用4D總結(jié)法斋射,從四個維度對這件事情做個總結(jié): 結(jié)果、數(shù)據(jù)拉队、技術(shù)提升翻屈、個人成長四個維度:
● 結(jié)果: 做完這件事缀程,我們?nèi)〉昧耸裁唇Y(jié)果香追? 可能是開發(fā)效率提升了合瓢, 也可能是穩(wěn)定性提升了,用戶 DAU 提升了透典。
● 數(shù)據(jù): 這個是對結(jié)果的補充晴楔, 比如你說經(jīng)過你的重構(gòu),開發(fā)效率提升了峭咒,提升了多少税弃? 這是很容易被挑戰(zhàn)的, 你在做之前應該就統(tǒng)計過或者調(diào)查過開發(fā)團隊讹语, 開發(fā)一個版本時間是多少钙皮, 解決一個 bug 平均耗時是多少; 經(jīng)過優(yōu)化之后顽决, 一個版本迭代縮短了 xx 天。
● 技術(shù)提升: 個人技術(shù)得到了哪些提升导匣, 是不是可以給團隊做一個分享才菠, 是否可以在一個領(lǐng)域復用。
● 個人成長: 比如在執(zhí)行力上贡定、事情推動力上赋访、方法論沉淀等軟實力上是不是也有收獲。
后記說明
這里缓待,我簡單介紹下自己蚓耽,我只是一個在騰訊才工作三年的菜鳥,談不上自己的做事方法論總結(jié)旋炒,上述大多是參考其他大佬的建議和文章步悠,本文是個開篇,我希望自己能時常來更新這篇文章瘫镇,不斷豐富和調(diào)整其內(nèi)容鼎兽。
參考文章:
一圖看透騰訊大佬們的做事方法論
寫給工程師的十條精進原則
淺談寫作邏輯思維之SCQOR模型
《金字塔原理》
5w2h分析法最全解析,收藏了