1. 耗時(shí)六個(gè)月,投入數(shù)百人月,我們重構(gòu)了物聯(lián)網(wǎng)時(shí)代基礎(chǔ)設(shè)施

        共 8719字,需瀏覽 18分鐘

         ·

        2022-07-25 16:33

        好久沒寫公眾號(hào)文章了,一直想著等后面不忙了再寫,但突然想起事情是忙不完的,所以還是決定一定要給自己留些時(shí)間去總結(jié)、去思考。(而且最近客觀事實(shí)上確實(shí)要沒那么忙了,所以正好借此機(jī)會(huì)來做個(gè)總結(jié)。)
        這幾個(gè)月,我參與了個(gè)大項(xiàng)目。
        是的,我們耗時(shí)了幾個(gè)月,投入了數(shù)百人月,重構(gòu)了一個(gè)很大的系統(tǒng)。在此期間,實(shí)踐了很多本人的想法,也從中學(xué)習(xí)到了很多。

        今天的文章,就讓我來講述整個(gè)項(xiàng)目重構(gòu)期間發(fā)生的故事,不光光講技術(shù),更要講的是工程實(shí)踐。


        0

        前言

        在開始正文之前,先簡單介紹下我們重構(gòu)的系統(tǒng)背景。
        物聯(lián)網(wǎng)因其影響范圍之廣吸引著各行各業(yè)的關(guān)注。當(dāng)前物聯(lián)網(wǎng)行業(yè)的發(fā)展在一個(gè)什么位置上呢?
        衡量物聯(lián)網(wǎng)發(fā)展的一個(gè)很關(guān)鍵的指標(biāo)叫物聯(lián)網(wǎng)連接數(shù)。
        什么是物聯(lián)網(wǎng)連接數(shù)呢?每一個(gè)在線物聯(lián)網(wǎng)設(shè)備都算一個(gè)連接。所以物聯(lián)網(wǎng)連接數(shù)也可以叫設(shè)備在線數(shù)。
        物聯(lián)網(wǎng)連接數(shù)進(jìn)一步細(xì)分,可以分為蜂窩連接數(shù)和非蜂窩連接數(shù)。
        非蜂窩連接,指的是藍(lán)牙、Zigbee這類泛連接,這類連接一般出現(xiàn)在智能家居場景中,用于短距離通信。
        蜂窩連接,指的是通過通信服務(wù)運(yùn)營商的蜂窩網(wǎng)絡(luò)進(jìn)行的連接,用于長距離通信。
        從全球來看,目前物聯(lián)網(wǎng)連接數(shù)大概有100多億,其中包括了蜂窩連接和非蜂窩連接。
        在物聯(lián)網(wǎng)行業(yè),目前非蜂窩連接還是占據(jù)大多數(shù),大約占據(jù)70%-80%左右,蜂窩連接大約占據(jù)20%-30%。所以從全球來看,蜂窩連接大約在20-30億左右。
        那么中國的物聯(lián)網(wǎng)發(fā)展處于一個(gè)什么位置呢?
        因?yàn)閭€(gè)人所在的行業(yè),對蜂窩連接了解得比較多,當(dāng)前中國物聯(lián)網(wǎng)蜂窩連接數(shù)超過10億。在這背后,承載著中國超過10億物聯(lián)網(wǎng)蜂窩連接的是各大運(yùn)營商的物聯(lián)網(wǎng)連接管理平臺(tái)。而這其中,我們的物聯(lián)網(wǎng)連接管理平臺(tái)承載著將近3億的連接。
        可以看出,各大運(yùn)營商的物聯(lián)網(wǎng)連接管理平臺(tái),是物聯(lián)網(wǎng)時(shí)代名副其實(shí)的基礎(chǔ)設(shè)施。
        物聯(lián)網(wǎng)連接管理平臺(tái),就是本文的主角,就是我們重構(gòu)的對象。

        物聯(lián)網(wǎng)連接管理平臺(tái)處于物聯(lián)網(wǎng)系統(tǒng)中承上啟下的位置

        上圖是物聯(lián)網(wǎng)連接管理平臺(tái)在物聯(lián)網(wǎng)系統(tǒng)中的位置,以及它所具備的主要功能。

        簡單介紹了一下系統(tǒng)背景,下面就開始我們的項(xiàng)目重構(gòu)之旅吧。


        1

        開始


        系統(tǒng)好好的,沒人想著耗時(shí)耗力去重構(gòu),所以讓我們投入了如此多的時(shí)間精力來做重構(gòu),起因是什么呢?
        起因是當(dāng)前我們的物聯(lián)網(wǎng)連接管理平臺(tái)已經(jīng)無法滿足我們的業(yè)務(wù)增長需求了。是不是很官方的一句話?既然想做總結(jié),想做思考,那肯定不能浮于表面。我下面就來深挖下之前的系統(tǒng)是如何無法滿足我們的業(yè)務(wù)增長的。
        (1)可維護(hù)性差
        軟件項(xiàng)目的生命周期大概會(huì)經(jīng)歷如下幾個(gè)階段:
        上述軟件生命周期應(yīng)該是適用于所有軟件項(xiàng)目的,包括做軟件外包的2B公司、做互聯(lián)網(wǎng)產(chǎn)品的2C公司,只不過這些公司在每個(gè)階段的投入或者關(guān)注度有所不同。
        對于一些小型的、剛起步的互聯(lián)網(wǎng)公司,他們可能一開始有個(gè)Idea,然后團(tuán)隊(duì)討論討論就進(jìn)入到實(shí)施階段了。是的,你沒看錯(cuò),可能有時(shí)候還更簡陋點(diǎn),專業(yè)的團(tuán)隊(duì)都沒有,就幾個(gè)人罷了。
        實(shí)際上很多目前來看取得很大商業(yè)上成功的公司,其實(shí)一開始并沒有做什么詳盡的市場調(diào)研、規(guī)劃,想做就做了,最終也做成了,說無心插柳柳成蔭可能不太合適,因?yàn)樗麄冏铋_始確實(shí)是想做成點(diǎn)什么,不過比起很多大公司詳盡的市場調(diào)研、規(guī)劃,最終也沒做成來講,也有那么點(diǎn)意思。
        而對于一些專業(yè)的軟件公司,特別是做2B項(xiàng)目的公司,首先他們的團(tuán)隊(duì)規(guī)模將會(huì)更大,專業(yè)度也會(huì)更強(qiáng),他們的立項(xiàng)是伴隨著軟件合同的簽訂開始的,他們在規(guī)劃階段就會(huì)投入很大的精力,投入諸如項(xiàng)目范圍、時(shí)間、人力的規(guī)劃等,然后最終進(jìn)入到實(shí)施階段。
        說了這么多,實(shí)際上最終都是殊途同歸,軟件項(xiàng)目最終都會(huì)來到維護(hù)階段,該階段也是軟件項(xiàng)目生命周期中最長的階段。
        軟件工程和其他項(xiàng)目有著很大的不同,其中最大的不同在于維護(hù)階段的不同。
        拿房地產(chǎn)來舉例,開發(fā)商建好房子交付后,物業(yè)進(jìn)場就進(jìn)入了維護(hù)階段,但不論怎么維護(hù),當(dāng)初建的時(shí)候是幾棟幾層樓,最終還是幾棟幾層樓,物業(yè)不會(huì)把當(dāng)初的六層小洋房維護(hù)成十幾層的小高層。
        但軟件工程的維護(hù)就不一樣了,當(dāng)初是個(gè)“小平房”可能過幾年就維護(hù)成了“大教堂”,也可能最終維護(hù)成了“大茅廁”。
        所以軟件項(xiàng)目進(jìn)入維護(hù)階段,才是真正考驗(yàn)團(tuán)隊(duì)能力的時(shí)候。
        可維護(hù)性差,意味著新功能特性添加的困難,意味著糟糕的代碼質(zhì)量,意味著項(xiàng)目可靠性差,問題頻發(fā),意味著性能的不足。可維護(hù)性差,足以作為項(xiàng)目需要重構(gòu)的最大理由了。
        (2)可擴(kuò)展性差
        事務(wù)的發(fā)展一般都不是線性的,而是爆發(fā)性的。
        想想計(jì)算機(jī)的誕生才幾十年,它對我們今天的社會(huì)生活產(chǎn)生的影響是多么的巨大。對于漫長的人類歷史來說,幾十年產(chǎn)生如此大的影響,不得不說它的發(fā)展是爆發(fā)性的。
        對于很多公司的業(yè)務(wù)發(fā)展也是一樣的,短視頻的爆發(fā),自媒體的發(fā)展,直播帶貨也就是這兩年。
        雖說我們的系統(tǒng)在建設(shè)之初就預(yù)留了一定的容量,但隨著物聯(lián)網(wǎng)的發(fā)展,當(dāng)初預(yù)留的資源已經(jīng)無法滿足當(dāng)前的業(yè)務(wù)需求了,而且當(dāng)初的系統(tǒng)架構(gòu)可擴(kuò)展性也很差,導(dǎo)致即使增加資源也無法線性擴(kuò)展。
        在我看來,物聯(lián)網(wǎng)還遠(yuǎn)未達(dá)到爆發(fā)的程度,預(yù)則立,不預(yù)則廢,為應(yīng)對物聯(lián)網(wǎng)可能迎來的爆發(fā),需要一個(gè)可擴(kuò)展的系統(tǒng)架構(gòu),從這一點(diǎn)看,重構(gòu)也是必須要進(jìn)行的了。
        (3)可觀測性差
        對于分布式系統(tǒng)來說,可觀測性對于問題的排查及定位的重要性不言而喻。日志、調(diào)用鏈、指標(biāo)等監(jiān)控內(nèi)容,對于原有系統(tǒng)是部分缺失的,這也導(dǎo)致了問題的排查與定位的困難,鑒于以前系統(tǒng)的可維護(hù)性差,也很難給它添加上這些,所以需要重構(gòu)了。
        當(dāng)然除了上述問題之外,我們系統(tǒng)還有很多其他的問題,諸如代碼質(zhì)量差,文檔缺失等等,當(dāng)然我愿意把此類問題都?xì)w入到可維護(hù)性差上。

        鑒于目前系統(tǒng)存在的上述問題,我們決定開始重構(gòu)。


        2

        規(guī)劃

        決定了要重構(gòu),下一步就需要規(guī)劃了。
        項(xiàng)目規(guī)劃階段我們主要做的事有如下幾個(gè),范圍規(guī)劃、時(shí)間規(guī)劃、團(tuán)隊(duì)組建以及各類規(guī)范的制定。
        我們經(jīng)常說勿忘初心,在做什么事情之前一定要弄清楚自己為什么做,以及要把事情做成什么樣子,這件事很重要。
        因?yàn)槌跣牟煌?,事情的結(jié)局會(huì)大不相同。不知道自己為什么出發(fā),走著走著就容易迷路。
        在盤點(diǎn)了當(dāng)前系統(tǒng)存在的問題之后,我們決定啟動(dòng)新項(xiàng)目的重構(gòu)。既然開始了,首先要確認(rèn)的就是目標(biāo)。
        新系統(tǒng)要重構(gòu)成什么樣子的呢?這是我們需要回答的第一個(gè)問題。
        經(jīng)過我的思考加上霎那間的靈光一現(xiàn),我確認(rèn)了新系統(tǒng)重構(gòu)的目標(biāo):
        高性能、高可靠、可擴(kuò)展、可維護(hù)、可觀測的下一代物聯(lián)網(wǎng)連接平臺(tái)。
        確認(rèn)目標(biāo)對于做事來講真的是太重要了,在整個(gè)重構(gòu)過程中,作為整個(gè)系統(tǒng)的架構(gòu)師,我都在時(shí)不時(shí)的回過頭來重新審視我們的目標(biāo)。目標(biāo)的確認(rèn),也讓后面的項(xiàng)目決策有了很多的原則可指導(dǎo)。這在后面會(huì)不斷得提到的。
        確認(rèn)了目標(biāo)之后,還需要確認(rèn)時(shí)間,咱們要花多少時(shí)間去完成目標(biāo)。畢竟不能無休無止地做下去,一定要有個(gè)時(shí)間。
        實(shí)際上時(shí)間的確認(rèn)可長可短,畢竟可以加人力嗎,人力多的話,時(shí)間就可以短一些,人力少做的時(shí)間就長一些。(但是隨著項(xiàng)目的實(shí)施,后面我也發(fā)現(xiàn)了在時(shí)間規(guī)劃上,軟件項(xiàng)目并不是這樣的,加人力,但拖慢了項(xiàng)目進(jìn)度的事,也是遇到了。)
        在項(xiàng)目的時(shí)間規(guī)劃上,還有一點(diǎn)要注意的就是要設(shè)立項(xiàng)目節(jié)點(diǎn)及里程碑,節(jié)點(diǎn)及里程碑的設(shè)立實(shí)際上就是把大的目標(biāo)拆分成小的目標(biāo),對于團(tuán)隊(duì)的節(jié)點(diǎn)達(dá)成及激勵(lì)都是有一定的作用的。
        目標(biāo)、時(shí)間確認(rèn)后,需要做的就是團(tuán)隊(duì)的組建了。
        團(tuán)隊(duì)組建有一點(diǎn)非常重要,就是分工,團(tuán)隊(duì)中一定要分工明確,因?yàn)榉止た梢宰屜嚓P(guān)人員更專注于自己的領(lǐng)域,這樣才能更專業(yè),更有效率。分工明確了,職責(zé)也就明確了。切記合理的團(tuán)隊(duì)分工,是邁向成功的關(guān)鍵一步。
        以下是我們整個(gè)團(tuán)隊(duì)的人員分工及對應(yīng)職責(zé):
        系統(tǒng)架構(gòu)組:負(fù)責(zé)系統(tǒng)整體架構(gòu),關(guān)鍵疑難問題解決,架構(gòu)的持續(xù)優(yōu)化;
        后端業(yè)務(wù)服務(wù)組:負(fù)責(zé)相關(guān)業(yè)務(wù)微服務(wù)開發(fā)工作;
        前端業(yè)務(wù)服務(wù)組:負(fù)責(zé)前端開發(fā)工作;
        代碼質(zhì)量組:負(fù)責(zé)整體代碼質(zhì)量、規(guī)范工作;
        項(xiàng)目管理:項(xiàng)目進(jìn)度管理、采購管理。
        在規(guī)范方面,整個(gè)項(xiàng)目進(jìn)行過程中,我們團(tuán)隊(duì)制定了代碼規(guī)范、開發(fā)流程規(guī)范、接口規(guī)范、分支規(guī)范以及溝通規(guī)范等。
        具體的規(guī)范內(nèi)容就不再貼出來了,但這里想說明的是規(guī)范的重要性,以及制定規(guī)范的幾點(diǎn)注意事項(xiàng)。
        團(tuán)隊(duì)幾十號(hào)人,后面將會(huì)構(gòu)建幾十甚至上百個(gè)微服務(wù),沒有規(guī)范就問你可不可怕。
        制定規(guī)范很重要,讓團(tuán)隊(duì)所有的人都遵守規(guī)范更重要。下面要講的就是規(guī)范制定的注意事項(xiàng)了。
        第一點(diǎn)需要注意的是,不要一言堂。各類規(guī)范當(dāng)然得有一位主導(dǎo)人,負(fù)責(zé)規(guī)范的初版編寫,畢竟不能所有的點(diǎn)都由團(tuán)隊(duì)所有人來討論確定,沒這個(gè)必要也沒這個(gè)時(shí)間,但是最終版的確定一定要經(jīng)過團(tuán)隊(duì)所有人的討論及確認(rèn),記住是所有人,所有需要遵守這個(gè)規(guī)范的人,哪怕是外包人員。**有參與感才有責(zé)任感,有責(zé)任感才會(huì)遵守規(guī)定。**這里從整個(gè)規(guī)范的討論到最終確認(rèn),需要開很多次會(huì),花很多時(shí)間,但是這個(gè)時(shí)間跟團(tuán)隊(duì)不遵守這個(gè)規(guī)范或者根本不認(rèn)可這個(gè)規(guī)范繼而導(dǎo)致后面項(xiàng)目出現(xiàn)的各類問題所花費(fèi)的處理時(shí)間相比,成本還是低的多的。
        第二點(diǎn)需要注意的是,規(guī)范要簡單可行,貼合實(shí)際。想一想你自己都不想遵守的規(guī)范,別人為什么要遵守?
        第三點(diǎn)需要注意的是,規(guī)范要統(tǒng)一放在一個(gè)地方,方便查閱。整個(gè)項(xiàng)目中,我們的所有文檔都是在線的,實(shí)際上這是我們的項(xiàng)目溝通規(guī)范。這樣的好處是有一個(gè)地方可以統(tǒng)一管理各類規(guī)范,人手一個(gè)Word文檔,后面文檔更新了怎么辦?這簡直是一個(gè)分布式一致性問題了。統(tǒng)一放線上還可以方便后面新加入的團(tuán)隊(duì)成員閱讀。
        項(xiàng)目的規(guī)劃階段我們就大概做了這么多事,沒有一開始就著急去做設(shè)計(jì)、去編碼,先把準(zhǔn)備工作做好,后面會(huì)走的更快、更遠(yuǎn)。

        慢就是快。


        3

        實(shí)施


        項(xiàng)目實(shí)施階段,我們做了系統(tǒng)總體架構(gòu)設(shè)計(jì)、微服務(wù)拆分設(shè)計(jì)以及啟動(dòng)系統(tǒng)的編碼實(shí)現(xiàn)。
        在系統(tǒng)的總體架構(gòu)設(shè)計(jì)及決策上,實(shí)際倒是沒有花什么時(shí)間與精力,作為業(yè)內(nèi)的主流架構(gòu),微服務(wù)架構(gòu)是經(jīng)歷過實(shí)踐檢驗(yàn)的,并且生態(tài)環(huán)境也很完善。所以新系統(tǒng)采用微服務(wù)架構(gòu)是團(tuán)隊(duì)的共識(shí)。當(dāng)然微服務(wù)有利有弊,有它的優(yōu)點(diǎn)也有它的挑戰(zhàn),這不在本文的討論范圍。
        確認(rèn)了系統(tǒng)整體微服務(wù)架構(gòu),下面要做的就是微服務(wù)拆分了,在這上面還是花了些時(shí)間的。
        在微服務(wù)的拆分上,有一些基本的原則,比較常見的原則有:基于功能拆分的原則、按照服務(wù)變更頻率拆分的原則、按照安全要求拆分的原則、按照性能拆分的原則等。
        但在我看來,微服務(wù)要想拆分得好,除了根據(jù)這些基本原則外,最最重要的一點(diǎn)就是架構(gòu)師一定要對業(yè)務(wù)有非常深入的了解。這里不是指某一處業(yè)務(wù),而是需要從全局視角,對整個(gè)系統(tǒng)的所有業(yè)務(wù)都有非常深入的了解。這對于一個(gè)復(fù)雜的系統(tǒng)來說,是一個(gè)不小的挑戰(zhàn),但我們的系統(tǒng)可不是一般的復(fù)雜。
        作為系統(tǒng)架構(gòu)師,我花了兩周時(shí)間,深入各個(gè)業(yè)務(wù)模塊,與各個(gè)業(yè)務(wù)負(fù)責(zé)人及開發(fā)人員進(jìn)行了深入的溝通,最終也只能說是對整個(gè)系統(tǒng)的全局業(yè)務(wù)有了個(gè)基本的了解,遠(yuǎn)遠(yuǎn)沒達(dá)到理解的程度。究其原因,并不是我不行,而是我們的業(yè)務(wù)真的不是一般的復(fù)雜。(有熟悉運(yùn)營商業(yè)務(wù)的同學(xué)應(yīng)該可以理解。)
        在梳理了兩周之后,我決定不再耗費(fèi)時(shí)間了,不如先做再說。首先,我們先確定了整個(gè)微服務(wù)拆分的總體指導(dǎo)原則:前期先粗粒度,不同服務(wù)有相同業(yè)務(wù)邏輯時(shí),再拆分出單獨(dú)服務(wù)。明顯獨(dú)立的服務(wù),可以先拆分。有了原則之后,后續(xù)做事就有規(guī)則可循了,可見原則的重要性。
        基于上述原則,我們前期基于業(yè)務(wù)首先拆分出12大微服務(wù)群,每個(gè)微服務(wù)群最終可能包含數(shù)個(gè)微服務(wù),但前期是粗粒度,所以每個(gè)微服務(wù)群暫時(shí)都按照一個(gè)微服務(wù)來構(gòu)建。
        微服務(wù)拆分初步完成,每個(gè)服務(wù)便開始轟轟烈烈地進(jìn)入開發(fā)了。
        工程實(shí)施階段時(shí)間最長,遇到各種各樣的問題也最多,這期間的故事也很多。
        下面就讓我來講講這期間遇到的一些故事。
        (1)意見有分歧怎么辦?
        軟件工程不同于其他項(xiàng)目,沒有一個(gè)統(tǒng)一的限制或約束。比如建筑學(xué),有力學(xué)為基礎(chǔ)指導(dǎo)。這也導(dǎo)致了軟件工程對于特定問題,解決方案之多,選型之多很容易在團(tuán)隊(duì)間產(chǎn)生分歧。對于特定問題,實(shí)際上每種方案都有各自的優(yōu)缺點(diǎn),在很多情況下都沒有對錯(cuò)之分,可以說是用這種方案也行,用那種方案也行,都能解決問題。
        但最終到底用哪個(gè)呢,這是需要有人來做出決策的,而且要能說清楚為什么要用這個(gè)而不用另一個(gè)。
        那么如何在有意見分歧的時(shí)候做決策,我個(gè)人的經(jīng)驗(yàn)是你們的團(tuán)隊(duì)一定要有自己的原則,或者不妨說是團(tuán)隊(duì)負(fù)責(zé)人一定要有自己的原則。方案沒有對錯(cuò)之分,選擇哪一個(gè)就要依賴相應(yīng)的原則了。舉個(gè)例子,簡單性原則是你們在構(gòu)建系統(tǒng)時(shí)所遵循的原則,那么所有可能會(huì)引入復(fù)雜性的方案都可以被否掉了,雖然它們可能也符合一定的場景,但并不符合你們的原則。
        發(fā)生意見分歧沒問題,但團(tuán)隊(duì)一定要有相應(yīng)的原則來做指導(dǎo)。至于原則是怎么來的,很多情況下來源于團(tuán)隊(duì)的負(fù)責(zé)人,但一定要經(jīng)過團(tuán)隊(duì)充分的討論共同確認(rèn)下來,有參與感才有責(zé)任感,這樣大家才會(huì)去遵守相應(yīng)的原則,才會(huì)認(rèn)同你的決策。
        當(dāng)然,這里額外說一句,可能有時(shí)候一些問題并沒有明確的原則來指導(dǎo),可能只是依靠自己的直覺,這時(shí)候你也需要有魄力去拍板,去讓大家相信你的判斷。
        如何讓大家相信你的判斷,并且按照你說得去做呢?這就依賴你的個(gè)人魅力了。
        (2)項(xiàng)目進(jìn)度緊,加了人力但是進(jìn)度卻被拖慢?
        想象一下我們現(xiàn)在在工地搬磚??偣灿袃扇f塊磚,假設(shè)一個(gè)人一天搬兩千塊磚,那么一個(gè)人把所有磚搬完需要十天時(shí)間,兩個(gè)人呢?五天。五個(gè)人呢?兩天。這應(yīng)該是沒有什么問題的。
        但是在軟件工程實(shí)施中,是這樣嗎?一個(gè)功能點(diǎn),假如一個(gè)人實(shí)現(xiàn)要花十天時(shí)間,兩個(gè)人呢,五天能完成嗎?實(shí)際情況下,可能兩個(gè)人花的時(shí)間要比一個(gè)人花的時(shí)間還要長。
        為什么會(huì)這樣呢?究其原因還是軟件項(xiàng)目的復(fù)雜性引起的。搬磚嘛,無非是從A搬到B,易上手。但軟件開發(fā)就不是這么簡單的了,新加入的人,上手前,規(guī)范要學(xué)、業(yè)務(wù)得培訓(xùn)、環(huán)境要熟悉,上手后,代碼要Review、問題要修改等等??梢钥闯鰜?,這一切的成本都是很高的,而且這是與專業(yè)水平高低無關(guān)的,當(dāng)然專業(yè)水平高的人上手可能要快一點(diǎn),但這些都是必不可少的需要學(xué)習(xí)的內(nèi)容。
        當(dāng)然講這些并不是說加人成本高,不需要加人了,團(tuán)隊(duì)要發(fā)展,人員當(dāng)然得擴(kuò)充。講這些只是為了說明,想要在短時(shí)間內(nèi)通過人員增加來加快項(xiàng)目進(jìn)度,是不現(xiàn)實(shí)也是無法實(shí)現(xiàn)的。
        (3)你把要做的事情說清楚了嗎?
        一個(gè)人的精力和時(shí)間是有限的,我們不能一個(gè)人把所有事情都做了,所以要學(xué)會(huì)合理授權(quán),把事情安排給別人去做。
        你把事情安排給別人去做,最重要的是什么,是要把要做的事情給說清楚。
        我經(jīng)常說要做重要但不緊急的事情,而不是做重要又緊急的事情,如果你有很多又重要又緊急的事情,你要反思反思是不是因?yàn)橹匾痪o急的事情沒做好。
        這里具體舉例說明,你安排團(tuán)隊(duì)成員開發(fā)某個(gè)功能特性,一沒詳細(xì)的文檔,二又描述的不清楚,整個(gè)過程也沒有流程規(guī)范去監(jiān)控去反饋,等要驗(yàn)收的時(shí)候才發(fā)現(xiàn)做的事情完全不是那么回事,到時(shí)候是又通宵又加班的去補(bǔ)救。
        在上面的例子中,哪些事情是重要但是不緊急的?一是詳細(xì)的文檔(包括功能文檔、設(shè)計(jì)文檔)、二是授權(quán)事情的詳細(xì)描述、三是整個(gè)開發(fā)過程的流程規(guī)范制定。這些事情做好了,你覺得還會(huì)有后面緊急補(bǔ)救的事情嗎?
        所以我們在授權(quán)別人做事的時(shí)候,一定要把事情給描述清楚,必要時(shí)候要多重復(fù)幾遍。但這里有的人可能會(huì)說,費(fèi)這么大勁講清楚,還不如我自己做了。實(shí)際這里也要分情況的,對你比較放心的人,可能只要簡單描述要做的事情是什么就夠了,過程細(xì)節(jié)交給他去做,偶爾詢問反饋下就行。而對不太放心的人,可能還需要額外把達(dá)成目標(biāo)的具體步驟詳細(xì)描述給他,過程中要經(jīng)常詢問反饋才行。
        溝通很難,而且對不同的人要有不同的溝通方法,但溝通確實(shí)很重要。
        (4)重要的事情不要壓在自己這里,需要安排下去。
        要想實(shí)現(xiàn)一個(gè)大的目標(biāo),一定需要團(tuán)隊(duì),把要做的事情安排下去,這在前面已經(jīng)講過了,要合理授權(quán)。
        不知道別人是否有這種情況,我有時(shí)候會(huì)有很多重要的事情要做,但又不放心下面的成員去做,擔(dān)心他們做不好,而我又沒有精力去做所有的事情,這就導(dǎo)致了很多重要的事情積壓在我這里,知道它們重要,但又沒法安排下去,這也導(dǎo)致了我很焦急。
        怎么辦呢?
        答案是培養(yǎng)。培養(yǎng)有兩種方式,一種是培訓(xùn)學(xué)習(xí)式,另一種是實(shí)際指導(dǎo)式。第一種方式可以外出學(xué)習(xí)交流,也可以內(nèi)部培訓(xùn)學(xué)習(xí),都是學(xué)習(xí)的理論知識(shí)。第二種方式就是手把手指導(dǎo)了,耗費(fèi)的精力會(huì)更大,但效果應(yīng)該是最好的。
        經(jīng)過培養(yǎng)過后,你會(huì)發(fā)現(xiàn)有些事情可以安排下去了。
        當(dāng)然,還有一點(diǎn)比較重要的是,把所有重要的事情安排計(jì)劃,你不必一次性把所有重要的事情都解決,我們總是在時(shí)間有限、資源有限的情況下做事的,把重要的事情枚舉出來,安排計(jì)劃,一個(gè)季度挑幾個(gè)解決,重要的事情都排了計(jì)劃了,這樣就不會(huì)讓人有焦急的感覺了。
        (5)沉默成本不是成本,推倒重來不要怕。
        有時(shí)候,方案錯(cuò)了,修修改改并不能完全解決問題,相反可能會(huì)讓系統(tǒng)越來越復(fù)雜,技術(shù)債越攢越多。
        我們已經(jīng)做了這么多了,踩過這么多坑了,推倒重來不要怕,從頭再來到走到現(xiàn)在的位置,花不了多少時(shí)間。
        實(shí)際這里最關(guān)鍵的是需要魄力,推翻重來的魄力。
        (6)分布式系統(tǒng)的復(fù)雜性。
        一件事情有多難,你問不同的人答案是不一樣的。
        行業(yè)頂尖的人,他對該行業(yè)的認(rèn)識(shí)與普通人是不一樣的。認(rèn)識(shí)得越深入,越能知道其中的困難。
        業(yè)內(nèi)分布式領(lǐng)域頂尖學(xué)者都會(huì)告訴你要規(guī)避分布式事務(wù),更是要規(guī)避補(bǔ)償,因?yàn)樗芸吹狡胀ㄈ丝床坏降睦щy之處。
        反觀行業(yè)內(nèi)一些公司或者說是團(tuán)隊(duì),小作坊式的也要搞微服務(wù)、大數(shù)據(jù),只能說他們連這件事難度有多大都沒能力認(rèn)清。
        當(dāng)然我們不能畏畏縮縮,不敢前進(jìn),但也要結(jié)合實(shí)際,心存敬畏。
        (7)人員的重要性。
        事情都是人做出來的。
        成功的項(xiàng)目管理是要讓相關(guān)利益方都收益。相關(guān)利益方這里包括投資者、管理層、項(xiàng)目團(tuán)隊(duì)成員、合作伙伴等。
        在說明人員的重要性時(shí),更要說明的是我們要尊重所有人的利益,讓所有人在項(xiàng)目中都能夠有所收獲。
        (8)你偏離目標(biāo)了嗎?
        項(xiàng)目實(shí)施過程周期長,任務(wù)多,壓力大。這期間肯定會(huì)有無數(shù)個(gè)讓你崩潰的瞬間,所以一定要有強(qiáng)大的內(nèi)心,要確信最困難的時(shí)候就是最接近成功的時(shí)候。還要不斷地回過頭來看看初心,當(dāng)初為什么出發(fā)。

        還記得當(dāng)初制定的目標(biāo)嗎?堅(jiān)守它,實(shí)現(xiàn)它。


        4

        反饋


        在項(xiàng)目實(shí)施過程中,我們要能及時(shí)發(fā)現(xiàn)風(fēng)險(xiǎn),以便應(yīng)對風(fēng)險(xiǎn)。
        正所謂早發(fā)現(xiàn)早治療。
        工程反饋需要貫穿于整個(gè)項(xiàng)目實(shí)施過程中,方法其實(shí)就是開會(huì)。晨會(huì)、周會(huì)、月度會(huì),雖然日常我本人也是很反對開會(huì)的,但是在項(xiàng)目實(shí)施過程中,會(huì)議是不嫌多的。
        雖然我們平時(shí)也會(huì)經(jīng)常開會(huì),但是想要開好一個(gè)會(huì)是不容易的。
        一個(gè)有效的會(huì)議組織至少要考慮以下內(nèi)容:
        實(shí)時(shí)監(jiān)控與反饋,需要貫穿于整個(gè)項(xiàng)目周期。監(jiān)控與反饋可以幫助我們發(fā)現(xiàn)問題,進(jìn)而解決問題。


        5

        發(fā)布交付

        這個(gè)世界是個(gè)實(shí)踐的世界。
        我們做的所有事情,最終的價(jià)值都體現(xiàn)在對別人產(chǎn)生影響上,都體現(xiàn)在改變世界上。
        不要覺得改變世界有多難,很多人可能都沒有你能力強(qiáng),但他們依然在改變著世界。
        看看你的書桌,看看你的廚房,看看那些影響著你學(xué)習(xí),影響著你生活的小玩意,你能說這些小玩意的制造者沒有改變世界嗎?
        軟件的最終價(jià)值一定體現(xiàn)在交付上。
        因?yàn)檎麄€(gè)項(xiàng)目進(jìn)行過程中,我們都遵循著持續(xù)開發(fā)、持續(xù)集成、持續(xù)測試、持續(xù)發(fā)布的原則,所以在最終的項(xiàng)目交付上線的時(shí)候,并沒有焦頭爛額,手忙腳亂。最終的上線也只是簡單的切一下配置,僅此而已。

        這里還有一點(diǎn)需要注意的是,我們不要想著把所有問題都在第一個(gè)版本解決,這只會(huì)導(dǎo)致發(fā)布時(shí)間的無限延長。先發(fā)布,再完善,迭代起來。


        6

        Leader


        Leader是領(lǐng)導(dǎo)者的意思。
        單獨(dú)拉出來講是因?yàn)長eader是項(xiàng)目成功非常重要的因素。
        Leader可以說是整個(gè)項(xiàng)目團(tuán)隊(duì)的主心骨,所有棘手的問題、決策最終都會(huì)來到他這邊,等著他來處理。
        一個(gè)合格的Leader,心中一定有著項(xiàng)目必定成功的理念,而支撐著這一理念的是他的業(yè)務(wù)能力,他的自信,他的方法論。
        面對各種各樣的問題,他該出手時(shí)就出手,有著兵來將擋,水來土掩,遇水搭橋,逢山開路的決心。
        面對質(zhì)疑,他沉著冷靜,不必急于爭辯,用實(shí)際行動(dòng)來證明對錯(cuò)。
        面對上級(jí)壓力,他能扛得住,不傳播焦慮,不亂分寸。
        面對團(tuán)隊(duì)成員,他推心置腹,善于理解。
        他有著自己的原則,自始至終知道自己在做什么。

        遇到這樣的Leader,就跟了吧。


        7

        自我成長

        生而不有,為而不侍,功成而弗居,是以不去。
        文章最開始就已經(jīng)講了,初心不同,結(jié)局完全不同。
        如果你做事的目的是為了獲得獎(jiǎng)賞、獲得榮譽(yù),那么整個(gè)過程中,你都會(huì)患得患失,最終得不到它們也會(huì)很痛苦。而這些事情往往都很飄渺,而且不是由你自己決定的。
        如果你是發(fā)自內(nèi)心的想做一件事,你便會(huì)享受整個(gè)過程,不計(jì)得失,專注于想做的事,最終你會(huì)發(fā)現(xiàn)榮譽(yù)、財(cái)富反而都會(huì)隨之而來。即使不來又有什么關(guān)系呢,你想做的事已經(jīng)做了,這不就足夠了嗎。
        我們要經(jīng)常聽聽自己內(nèi)心的聲音,追隨自己的內(nèi)心,在前進(jìn)的路上不斷成長。



        寫在最后


        軟件工程確實(shí)是一個(gè)很復(fù)雜的工程,進(jìn)入軟件維護(hù)階段才是真正考驗(yàn)團(tuán)隊(duì)能力的時(shí)候。
        高可靠、高性能、可維護(hù)、可觀測、可擴(kuò)展,可以作為分布式系統(tǒng)的通用建設(shè)目標(biāo)。
        即使面對相同的問題,不同團(tuán)隊(duì)不同條件下也會(huì)有不同的解決方案,如何選擇合適的解決方案,我們要有自己的原則。
        先做規(guī)劃,再做實(shí)施。
        慢就是快。
        分工才會(huì)更專業(yè),更有效率。合理的團(tuán)隊(duì)分工是邁向成功的第一步。
        不要想著通過加人來加快項(xiàng)目進(jìn)度。但我們要培養(yǎng)人。
        做重要但不緊急的事情。
        成功的項(xiàng)目管理是要滿足各方利益。
        沉默成本不是成本,推倒重來不要怕。
        面對風(fēng)險(xiǎn),要早發(fā)現(xiàn)早治療。
        去發(fā)布吧,這個(gè)世界是個(gè)實(shí)踐的世界。
        初心不同,結(jié)局完全不同。
        時(shí)不時(shí)回過頭看看自己為什么出發(fā),當(dāng)初的目標(biāo),還記得嗎?堅(jiān)守它,實(shí)現(xiàn)它。
        生而不有,為而不侍,功成而弗居,是以不去。
        經(jīng)常聽聽自己的內(nèi)心。

        推薦閱讀:
        《微服務(wù)權(quán)限處理,為什么這么難?》



        聊技術(shù),不止于技術(shù)。

        在這里我會(huì)分享技術(shù)文章、管理知識(shí)以及個(gè)人的思想感悟,歡迎點(diǎn)擊關(guān)注。
        瀏覽 74
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 日韩爱爱爱| 亚洲无码视频免费在线观看 | 久久久欧美精品蜜芽毛片 | 淫荡内射 | 免费成人视屏 |