雷火平台-中国知名电竞赛事平台

0471-4953016
當(dāng)前位置:首頁-新聞資訊-行業(yè)資訊

警惕降本增笑!軟件開發(fā)不可忽視的四大誤區(qū)

發(fā)布時(shí)間:2018-11-25閱讀次數(shù):2382

我們?cè)谝詫?shí)用為目的去做事情的時(shí)候,很容易受到一些思維誤區(qū)的干擾,自以為自己是追求實(shí)用的,但實(shí)際上早已經(jīng)謬之千里,卻不自知。

01、什么是軟件研發(fā)的實(shí)用主義?

軟件研發(fā)架構(gòu)的各種理論方法,其本質(zhì)都是圍繞著“實(shí)用”來進(jìn)行設(shè)計(jì)的。

所以,事實(shí)上不應(yīng)該有什么軟件研發(fā)的工作方法是不屬于實(shí)用主義的,一切的軟件架構(gòu)、軟件設(shè)計(jì)、軟件研發(fā)管理的方法,都應(yīng)該屬于實(shí)用主義。

但為什么我還是要提出這個(gè)題目,來探討這個(gè)問題?

那是因?yàn)槲覀冊(cè)谝詫?shí)用為目的去做事情的時(shí)候,很容易受到一些思維誤區(qū)的干擾,自以為自己是追求實(shí)用的,但實(shí)際上早已經(jīng)謬之千里,卻不自知。就好像我們明明是為業(yè)務(wù)發(fā)展、團(tuán)隊(duì)管理提出的『降本增效』目標(biāo),一不小心卻引發(fā)了穩(wěn)定性危機(jī)的『降本增笑』結(jié)果一樣。

具體有哪些誤區(qū)會(huì)干擾我們的判斷呢?我結(jié)合了在騰訊十多年工作經(jīng)驗(yàn),以及和前后數(shù)十個(gè)不同風(fēng)格的研發(fā)團(tuán)隊(duì)深度合作的經(jīng)歷,歸納了四大誤區(qū)。

02、誤區(qū)一:技術(shù)上的主次混淆

沒有人會(huì)認(rèn)為自己是一個(gè)主次不分的笨蛋,但實(shí)際上,團(tuán)隊(duì)合作過程中表現(xiàn)出來的綜合智商就是低于個(gè)體智商的。再加上,團(tuán)隊(duì)中,總是會(huì)摻雜一些“不知道自己不知道”的盲目者,最終會(huì)把團(tuán)隊(duì)帶向歧途。

舉一個(gè)在騰訊內(nèi),很典型很常見的例子。

本來有一個(gè)團(tuán)隊(duì),可能原本他們是負(fù)責(zé)一款軟件App的研發(fā),在執(zhí)行工作的過程中,發(fā)現(xiàn)自己缺少了一個(gè)基礎(chǔ)組件。這個(gè)組件可能是一個(gè)crash率的監(jiān)控組件,也可能是一個(gè)為了解決性能問題而誕生的性能監(jiān)控組件,還可能是性能輔助工具或者日志工具組件,等等。所以他們就會(huì)安排員工自己去做這樣一套工具組件出來。

當(dāng)工具組件開發(fā)完成,也能夠滿足自己使用的同時(shí),他們就會(huì)誕生一個(gè)想法,就是這個(gè)工具組件,在旁的團(tuán)隊(duì)是不是也需要?這樣常見的工具,很大概率大家都會(huì)需要吧?如果我們把這個(gè)組件推廣出去,我們的技術(shù)價(jià)值是不是就會(huì)擴(kuò)大?研發(fā)同事是不是就有更多的晉升素材?大家似乎能從中撈到好處,而且是以技術(shù)的名義,看起來還很正義。這樣的想法,大概率都是一拍即合的。

這個(gè)想法本身沒有錯(cuò),如果說我們有充分的時(shí)間精力,或者說我們確實(shí)做出了一個(gè)通用化的工具,且通用的價(jià)值也足夠大的話,是可以去做這個(gè)事情,但是現(xiàn)實(shí)往往很復(fù)雜。有可能他的主項(xiàng)目處于人力緊缺的一個(gè)狀態(tài),有可能他們的業(yè)務(wù)正在生死邊緣,都快做不下去了,有可能主業(yè)務(wù)那邊還在拼命招人,卻招不夠,找不到合適的人才。但是,這邊卻又拎著一支技術(shù)隊(duì)伍去做以通用化為目的的技術(shù)工具。那么最后的結(jié)果是什么呢?那就是浪費(fèi)了更多的人力和時(shí)間。

那這件事能不能夠成功呢?

首先他還不一定能夠成功,對(duì)吧?即便他能夠成功,它也僅僅只是給別的團(tuán)隊(duì)提供了一個(gè)不一定很適用的工具。別的產(chǎn)品團(tuán)隊(duì)拿過去用,可能還會(huì)抱怨說這個(gè)工具不太好用。自己還得持續(xù)投入人力去不斷完善。因?yàn)槊總€(gè)團(tuán)隊(duì)有自己軟件架構(gòu)的一些特色特點(diǎn),用法特征,你做成通用化的,別人拿去不一定是最好用的,原本只做給自己用,完全以自己的使用方法習(xí)慣和團(tuán)隊(duì)的成員的特色去結(jié)合,是很好用的。但是他把它通用化之后,有可能自己也不一定好用了,別人也不一定是最適用的,雖然它可能有一定用途。即便最終有人用了,那旁的團(tuán)隊(duì)能給到他什么呢?能支持他的業(yè)務(wù)成功么?顯然不太可能。

所以,我們要思考一下,我們?cè)谝患掖蠊纠?,做這樣的一些小的基礎(chǔ)工具產(chǎn)生的價(jià)值,和我們做出一個(gè)真正意義成功的產(chǎn)品的價(jià)值的對(duì)比,差異有多大?完全不在一個(gè)量級(jí)吧,一款產(chǎn)品的大成功是決定性的價(jià)值,而一個(gè)或者好多個(gè)通用的小工具,其價(jià)值能與之相提并論么?

03、誤區(qū)二:管理懶惰與重度規(guī)范化問題

還有一個(gè)誤區(qū)就是來自于規(guī)范化,為什么規(guī)范化也會(huì)形成干擾呢?規(guī)范化不是好事么?如果一個(gè)事情是很容易能看出來問題的,就不會(huì)叫做誤區(qū)了。我們都能明白,日常生活中,最可怕的人就是面像和善的斯文敗類了,對(duì)吧?因?yàn)槟惚槐硐竺曰罅恕?/p>

繼續(xù)舉一個(gè)例子:比如某個(gè)團(tuán)隊(duì)復(fù)盤研發(fā)效率低下的問題,復(fù)盤的過程,會(huì)去追究為什么研發(fā)效率低?原因是他們的團(tuán)隊(duì)的同事在這些模塊接口的調(diào)用用法之間老是搞錯(cuò),或者找不到正確的用法,于是又另起爐灶開新的接口,形成各種垃圾代碼山?;蛘哒f把接口用錯(cuò),模塊重度耦合,牽一發(fā)動(dòng)全身,等等。這些都會(huì)制造很多的時(shí)間成本,而且還必然會(huì)導(dǎo)致一些質(zhì)量問題。

所以,面對(duì)這種情況,如果技術(shù)管理的主導(dǎo)者,自己的技術(shù)能力不夠強(qiáng)悍而又厭倦了無休止的討論后,會(huì)很容易能夠想到的,不需要太動(dòng)腦子的方法就是:“我們要增加注釋,把接口的規(guī)范統(tǒng)一整理,把架構(gòu)和目錄統(tǒng)一整理,要讓軟件變得更加易讀,架構(gòu)更加清晰”。當(dāng)然,這個(gè)內(nèi)容本身是很正義的,聽起來也貌似很美好。【注:他們大概率沒有能力去想到,員工能力培養(yǎng)的方法問題,技術(shù)骨干的甄別技巧問題,以及,其實(shí)應(yīng)該由技術(shù)總負(fù)責(zé)人自己親自設(shè)計(jì)架構(gòu)等核心因素……】

一個(gè)聽起來很正義的事情要推行下去的話,是容易得到大家的支持的。但是真是去推行的時(shí)候就會(huì)發(fā)現(xiàn)問題了,因?yàn)闆]有去定義注釋寫到什么程度是合格的,架構(gòu)清晰到什么程度是合格的,于是就需要有專人來做這樣的規(guī)范。

這個(gè)時(shí)候團(tuán)隊(duì)里面就會(huì)開始形成了分工,會(huì)有專人來負(fù)責(zé)這些規(guī)范化的事情,而負(fù)責(zé)規(guī)范化事情的同時(shí),他的KPI和他的核心職責(zé)就是讓規(guī)范足夠的極致。這一下就開始完蛋了。

大家可以想象到一定會(huì)有過度的規(guī)范制定出來。因?yàn)榧热挥袑H藖砀蛇@個(gè)事情,就會(huì)有人把這種事情當(dāng)做KPI或者OKR。這種規(guī)則,即便嚴(yán)苛,但因?yàn)橐婚_始這個(gè)是所有人都舉手所贊成支持的事情,后面怎么可能自己又跳出來反對(duì)呢?所以,反對(duì)的聲音都是很渺小的,于是他們的團(tuán)隊(duì)的成員就會(huì)形成一種:”我感覺這件事情有點(diǎn)不對(duì),但是我又說不上來哪里不對(duì)“的感受。

最后的結(jié)果是什么?就是會(huì)開始形成一些有意或無意的抗?fàn)?,或者是?zhí)行怠慢。

那么負(fù)責(zé)執(zhí)行規(guī)范的人就會(huì)發(fā)現(xiàn)規(guī)范大家都很支持,卻很難執(zhí)行,因?yàn)榇蠹矣蟹纯骨榫w。他們的領(lǐng)導(dǎo)層往往會(huì)在事后,收到執(zhí)行上出現(xiàn)困難的一些聲音之后,開始舉行一個(gè)反思會(huì),或者說復(fù)盤會(huì),去思考他們這么做是對(duì)的嗎?

他們很快會(huì)發(fā)現(xiàn)這件事情上,單就規(guī)則本身來討論,它一定是一個(gè)正確的事情,所以他們沒有辦法去把復(fù)盤出來“這個(gè)事不需要繼續(xù)進(jìn)行”的結(jié)論。而且大概率會(huì)復(fù)盤出另一個(gè)結(jié)論,就是:“這件事情要繼續(xù)做,而且是堅(jiān)決的做,沒有執(zhí)行好是因?yàn)椴粔驀?yán)格,規(guī)則還不夠明細(xì),獎(jiǎng)懲措施沒有落實(shí)到人。做得好的應(yīng)當(dāng)獎(jiǎng)勵(lì),樹立標(biāo)桿,執(zhí)行不好的人要有懲罰!”

接下來,他們就會(huì)開始細(xì)化如何用更強(qiáng)制的措施讓這個(gè)事情能夠執(zhí)行得更好,怎樣甑別那些干擾的人,不愿意嚴(yán)格執(zhí)行的人。而強(qiáng)制的措施最容易想到不太用動(dòng)腦子就能想到的解決方法就是打分,打分就可以量化,就不用去個(gè)例化分析了,因?yàn)閭€(gè)例化分析太難了,團(tuán)隊(duì)的人那么多,情況那么多對(duì)吧?

他們急切地希望制定很多的一刀切的規(guī)則標(biāo)準(zhǔn),拿著這些一刀切的規(guī)則和標(biāo)準(zhǔn)去要求大家,這樣才不會(huì)老是遇到爭(zhēng)議。

根據(jù)這些標(biāo)準(zhǔn)來量化大家做的事情,這個(gè)時(shí)候團(tuán)隊(duì)的失敗就進(jìn)入到中后期了,因?yàn)樗麄兯械臅r(shí)間和精力就開始圍繞著分?jǐn)?shù)去進(jìn)行工作了。團(tuán)隊(duì)成員的目標(biāo)倒是很明確了,把分?jǐn)?shù)做高就對(duì)了。但是,這是整個(gè)團(tuán)隊(duì)的最終目標(biāo)么?

監(jiān)管團(tuán)隊(duì)的人在制定規(guī)則,他的KPI他的思考變成了思考規(guī)則,而做事情的人變成了圍繞分?jǐn)?shù)去進(jìn)行工作。

本來我們是應(yīng)該圍繞著產(chǎn)品的成功去工作的,但是,這個(gè)產(chǎn)品如何才能成功這件事,是誰在負(fù)責(zé)?這個(gè)時(shí)候,已經(jīng)幾乎沒有人負(fù)責(zé)了,只有領(lǐng)導(dǎo)大老板自己一個(gè)人在負(fù)責(zé)。但是他又想不明白有什么不對(duì)勁?因?yàn)樗才畔氯プ龅氖虑槎际菄@著他的目標(biāo)想要做好而推導(dǎo)出來的事情,最后卻做得一團(tuán)糟,所有人都在努力,卻都沒有圍繞最終目標(biāo)去做。

其實(shí)背后的原理就來自于一個(gè)偷懶的行為:就是他們不想具體案例具體分析了,他們希望制定統(tǒng)一標(biāo)準(zhǔn)之后,大家統(tǒng)一地來套這個(gè)標(biāo)準(zhǔn)就好了,不要有誰去挑戰(zhàn)規(guī)則。這個(gè)才是問題的癥結(jié)。

當(dāng)然,實(shí)用主義也不是說我們就不要規(guī)則了。因?yàn)橛行┦虑樗牧考?jí)很高,量級(jí)很大,如果每一個(gè)問題都要具體案例具體分析,大家也累不過來。這種時(shí)候,是需要真正的技術(shù)領(lǐng)導(dǎo)者來統(tǒng)籌全局的,對(duì)問題的洞悉不應(yīng)該來自于層層傳遞,而是本身的深度理解。

例如大部分軟件足夠龐大后,會(huì)碰到多線程帶來的穩(wěn)定性問題,會(huì)引入層層疊疊的規(guī)范和規(guī)則,以及層層疊疊的架構(gòu)保護(hù)措施。幾乎無窮無盡,最后還是解決不干凈線程問題。而我會(huì)要求企業(yè)微信的線程數(shù)量嚴(yán)格控制,io都是一個(gè)線程,網(wǎng)絡(luò)也都是一個(gè)線程,再加上UI主線程,常規(guī)情況下只有互不干擾的3個(gè)線程。當(dāng)然,也允許特例,但是非常有限,都需要懂這套規(guī)則背后原理的人來審核。幾年下來,企業(yè)微信這樣一個(gè)幾千萬行的超大型軟件系統(tǒng),幾乎不會(huì)遇到任何線程上的質(zhì)量問題。這為我們的快速迭代提供了極大的助力。當(dāng)然,這個(gè)只是無數(shù)措施中不起眼的一小條而已。最關(guān)鍵的是,主負(fù)責(zé)人,自己理解是否對(duì)。

當(dāng)然,團(tuán)隊(duì)里的核心人物數(shù)量有限,當(dāng)事情的量級(jí)達(dá)到一定程度的時(shí)候,我們一定會(huì)迫不得已會(huì)用一些自動(dòng)化的或者說一刀切的規(guī)則化的方式去做事情,這些規(guī)則化實(shí)施的時(shí)候,一定要遵循一個(gè)原則:就是這個(gè)規(guī)則面對(duì)一些個(gè)例的時(shí)候,要有一個(gè)方法去衡量邊界,越界的,就必須有足夠能力的技術(shù)leader來獨(dú)立分析解決問題。要不然技術(shù)leader干什么呢?只管人不管技術(shù)就不是合格的技術(shù)leader了。

規(guī)則不能貪多,不能一開始就妄圖制定涵蓋一切的規(guī)則。規(guī)則太多就沒有辦法做到每一條規(guī)則都完美化了。當(dāng)我們定規(guī)則定得太快太多,又長(zhǎng)時(shí)間不更新不回溯,它們就會(huì)形成我們前面講的失敗的案例的結(jié)果。

所以規(guī)則要少要精,而且要時(shí)常復(fù)盤,對(duì)一些不能夠完美化的規(guī)則,要及時(shí)地清理。不要太過懶惰地試圖去批量的進(jìn)行規(guī)范化,規(guī)范化一定要有節(jié)制。尤其是,有些事情,過去這樣做是對(duì)的,今天,不這樣做可能才是對(duì)的。

04、誤區(qū)三:架構(gòu)經(jīng)驗(yàn)的拿來主義

“架構(gòu)師”這個(gè)職務(wù)名稱,聽起來比程序員或者開發(fā),要高大上得多。這個(gè)名稱也就成為我們軟件技術(shù)人的重要追求之一。大家都希望自己被稱呼為架構(gòu)師,而不是程序員。

不要小看這種力量,這種影響會(huì)讓技術(shù)團(tuán)隊(duì)中的相當(dāng)多人,以學(xué)習(xí)足夠多的和架構(gòu)技術(shù)相關(guān)的名詞為榮。

學(xué)習(xí)知識(shí)還能有錯(cuò)?這當(dāng)然沒有錯(cuò),學(xué)海無涯,多學(xué)總是好事。但問題就出在“紙上談兵的故事”。學(xué)成孔乙己可不是什么好事。軟件架構(gòu)這種東西,我始終不認(rèn)為它是一種數(shù)理級(jí)別的定理級(jí)知識(shí),我更傾向于它是經(jīng)驗(yàn)型知識(shí)。

怎么理解經(jīng)驗(yàn)型知識(shí)呢?

就比如,騎自行車、游泳,這些技能都是經(jīng)驗(yàn)型技能。這種技能有個(gè)特點(diǎn),就是你沒有辦法通過閱讀甚至背誦一本《游泳技巧大全》而實(shí)現(xiàn)游泳技能的提升。你必須自己下水去嗆水,騎上車去摔跤,然后才可能真的學(xué)會(huì)。

我曾經(jīng)和一個(gè)合作團(tuán)隊(duì)的同事去討論一套合作的技術(shù)方案,我提出了一套接口用法,可以相對(duì)比較容易得快速的達(dá)成雙方的目標(biāo),然而我卻受到了對(duì)方合作團(tuán)隊(duì)一個(gè)年輕同事的激烈反駁,他認(rèn)為我的架構(gòu)不滿足架構(gòu)上的某某什么原則什么理論,講了一大串名詞。最后,我們還要花費(fèi)大量的時(shí)間和精力,和他逐條掰扯這樣做的具體問題到底在哪里。如果真的按他說的做,除了架構(gòu)上有一種莫名的數(shù)學(xué)上的美以外,沒有在任何維護(hù)成本、開發(fā)速度、質(zhì)量控制上的明顯優(yōu)勢(shì)。這個(gè)就是典型的經(jīng)驗(yàn)?zāi)脕碇髁x。

所以我在做技術(shù)招聘的面試的時(shí)候,不管面什么內(nèi)容,哪怕是問TCP和UDP有什么差別,這樣基礎(chǔ)性的問題,我喜歡反復(fù)追問的都是,UDP與TCP各自存在的價(jià)值分別是什么?為什么兩種方法要同時(shí)存在?我要的是這個(gè)分析過程,要的不是背誦TCP的各種基礎(chǔ)結(jié)構(gòu),各種理論定義。我要的是TCP的每一個(gè)結(jié)構(gòu)為什么要長(zhǎng)這樣?而不是那樣?它當(dāng)初形成的推導(dǎo)過程有沒有思考過?只有學(xué)會(huì)了推導(dǎo)過程,在你遇到問題的時(shí)候,才能夠通過思考的方式去進(jìn)行這個(gè)事情,應(yīng)該怎么做?什么方法是可以拿來用的,對(duì)吧?

我們千萬要警惕團(tuán)隊(duì)里有人把別人寫的書、做的學(xué)問、編的文章,當(dāng)做像三字經(jīng)一樣在你面前背誦,跟你說這是某某曰過,所以要按這樣做。我并不是反對(duì)去學(xué)習(xí)別人的經(jīng)驗(yàn),反而我很提倡多學(xué)習(xí)別人的經(jīng)驗(yàn),但問題是說經(jīng)驗(yàn)?zāi)眠^來用的時(shí)候,我們用的方法一定是漁法,而非魚本身。要了解這個(gè)經(jīng)驗(yàn)它是怎么來的,經(jīng)驗(yàn)創(chuàng)造出來的一個(gè)過程,推導(dǎo)這個(gè)經(jīng)驗(yàn)的過程如果和我們當(dāng)前遇到的情況很契合,所以我們才用它,而不是說因?yàn)檫@個(gè)經(jīng)驗(yàn)是一個(gè)牛人說的,是一個(gè)大佬寫的,是來自于一個(gè)很成功的項(xiàng)目得出的,于是得出我們要用,這是完全沒有邏輯的。

辨別和理解這些經(jīng)驗(yàn)的過程,或者說,自己創(chuàng)造屬于自己經(jīng)驗(yàn)的過程,是需要大量實(shí)踐的練習(xí)與深度思考一起進(jìn)行的。其實(shí),這條誤區(qū)的背后,是培養(yǎng)技術(shù)人才的核心技巧之一。如果有時(shí)間,我以后再寫專門的文章詳細(xì)講解。

05、誤區(qū)四:性能潔癖主義

這個(gè)誤區(qū)貌似比較容易理解,只是有時(shí)候,它的存在像一個(gè)陽謀,我們知道不對(duì)勁,但卻無能為力。

一般技術(shù)團(tuán)隊(duì),在人多了之后,隊(duì)伍里面會(huì)出現(xiàn)各種各樣角色的人,一定會(huì)有一些完美主義傾向的,有潔癖癥的一些人,他們會(huì)摻雜在里面,就會(huì)導(dǎo)致我們?cè)谧鍪虑榈臅r(shí)候容易偏離核心目的。

當(dāng)然,寫到這里,有些讀者可能會(huì)誤解我的意思——會(huì)理解為“做性能要適可而止”。但這不是我想表達(dá)的!

做性能,我是傾向于能盡可能地做到現(xiàn)有條件下的極致化。只有極致化的性能才能在競(jìng)爭(zhēng)中脫穎而出,這個(gè)非常關(guān)鍵的,如果我們做不到,往往是資源不夠,或者能力不夠,而不是決心不夠,這個(gè)不是什么誤區(qū)。我要講的誤區(qū)是:“我們往往因?yàn)樽非蟪R?guī)的性能參數(shù),而喪失更重要的體驗(yàn)級(jí)性能”,這才是很多人,難以跳脫出來的誤區(qū)。

繼續(xù)舉一個(gè)例子:大家都在傳微信誕生之初,騰訊內(nèi)部有三個(gè)團(tuán)隊(duì)都在做微信,最后是張小龍的團(tuán)隊(duì)勝出。這個(gè)故事不是完全真實(shí),但是確實(shí)也是有故事的原型的。我就是當(dāng)時(shí)其中一個(gè)團(tuán)隊(duì)的技術(shù)負(fù)責(zé)人,也確實(shí)有在和張小龍的團(tuán)隊(duì)競(jìng)爭(zhēng)(當(dāng)然,龍哥現(xiàn)在已經(jīng)是我的老板了)。我們當(dāng)時(shí)的產(chǎn)品叫做Q信,用Q信來發(fā)IM消息、語音消息、圖片消息。過程中,要解決一個(gè)問題“移動(dòng)端信號(hào)不如有線網(wǎng)穩(wěn)定的情況下,如何做到像系統(tǒng)短信一樣極高的發(fā)送成功率?”那時(shí)候,3G時(shí)代還在巔峰,4G尚未完全普及,一部分用戶還依然在使用網(wǎng)絡(luò)極差的2G?;诋?dāng)時(shí)的條件下,我們對(duì)信號(hào)弱,發(fā)送失敗的情況設(shè)計(jì)了大量的重試策略、動(dòng)態(tài)化的重試步長(zhǎng)、網(wǎng)絡(luò)探測(cè)策略,等等各種復(fù)雜規(guī)則……

但是,我們發(fā)現(xiàn),無論怎么做,發(fā)送消息失敗的概率,以及發(fā)送成功的速度,都還是明顯弱于微信。我們始終無法正確預(yù)測(cè)用戶什么時(shí)候突然進(jìn)入電梯沒有信號(hào)了,什么時(shí)候又出了電梯,什么時(shí)候又進(jìn)入隧道沒有信號(hào)了......而微信卻仿佛能夠預(yù)測(cè)未來一樣,總是在用戶走出電梯的一瞬間,把消息發(fā)送成功。

我們的問題出在哪?

我在反復(fù)琢磨了很久并對(duì)微信抓包分析之后,才后知后覺。其實(shí)一切都很簡(jiǎn)單,是我們自己錯(cuò)誤的性能追求框死了自己。因?yàn)槲覀冏隽硕嗄甑囊苿?dòng)端App,對(duì)移動(dòng)端App省電的經(jīng)驗(yàn)深入骨髓,這樣的經(jīng)驗(yàn)前提下,我們所有的重試策略都會(huì)制定時(shí)間間隔、重試次數(shù),我們像潔癖癥患者一樣,不允許任何無畏的耗電。壓根不會(huì)跨出省電的大前提去設(shè)計(jì)技術(shù)方案。而微信的做法,簡(jiǎn)單粗暴,在消息發(fā)送不成功的時(shí)候,快速、多次不斷地重試。當(dāng)然可以在用戶打開電梯門,網(wǎng)絡(luò)恢復(fù)的一瞬間,馬上發(fā)送消息成功!我們犯了一個(gè)致命的錯(cuò)誤,就是我們并沒有去計(jì)算我們通過這套復(fù)雜的省電規(guī)則,到底節(jié)省了多少電?節(jié)省的這點(diǎn)有限的電量(后來證明,由于異端場(chǎng)景的概率問題,節(jié)省的電量極少),能否比得上一個(gè)發(fā)消息速度極快且極其穩(wěn)定不懼網(wǎng)絡(luò)波動(dòng)的軟件,帶來用戶的信心的價(jià)值?一款產(chǎn)品的成功,摻雜著無數(shù)條類似這樣能勘破常規(guī)誤區(qū),能直擊靶心的思維尖刀!而在當(dāng)時(shí)欠缺這套能力的Q信,顯然差距還比較明顯。

再重復(fù)一遍,我當(dāng)時(shí)犯的錯(cuò)誤是:“我們往往因?yàn)樽非蟪R?guī)的性能參數(shù),而喪失更重要的體驗(yàn)級(jí)性能”。

06、總結(jié)

坊間有流傳,企業(yè)微信以幾百人的產(chǎn)研團(tuán)隊(duì)完成常規(guī)團(tuán)隊(duì)需要數(shù)千人才能完成的工作。互聯(lián)網(wǎng)行業(yè)的八卦產(chǎn)業(yè)也著實(shí)無孔不入。但是,我也確實(shí)為企業(yè)微信的研發(fā)團(tuán)隊(duì)而驕傲,這算是外界對(duì)團(tuán)隊(duì)研發(fā)效率的肯定吧。

企業(yè)微信包含著Win、Mac、Android、iOS、Web、小程序、Server共七大平臺(tái),合計(jì)超過6500W行代碼。橫跨教育、零售、餐飲、政務(wù)、工業(yè)、醫(yī)療、IT等等諸多行業(yè)的垂直功能。這已經(jīng)是一套超大型的綜合型軟件系統(tǒng)了。其中的OA系統(tǒng)、HR系統(tǒng)、日程系統(tǒng)、協(xié)作系統(tǒng)、郵件系統(tǒng)、客服系統(tǒng)、CRM系統(tǒng)……這類大體量、獨(dú)立的、專業(yè)型的功能就有近百個(gè)之多,其中的相當(dāng)一部分,單獨(dú)拎一個(gè)出來,就足夠養(yǎng)活一整家普通的IT公司了。例如HR系統(tǒng),voip通話系統(tǒng),對(duì)我們來說也就是10人左右的研發(fā)FT就能快速完成的系統(tǒng),而某些友商產(chǎn)品可能需要數(shù)百人的長(zhǎng)時(shí)間協(xié)作才能完成迭代。這其實(shí)有太多效率型的影響因素,從管理到技術(shù)再到人才,有非常多的經(jīng)驗(yàn)值得分享。如果這篇文章有足夠多的人感興趣,我會(huì)再繼續(xù)分享更多更深的知識(shí)。

當(dāng)然,寫這篇文章,不是想說我們已經(jīng)做得有多好,相反,企業(yè)微信的研發(fā)上也還有很多問題需要去解決,需要補(bǔ)課的地方還很多,以一敵十的背后也是有諸多犧牲的。只是,我們相信目前階段下,是抓對(duì)了一些重點(diǎn)。因此我想,把階段性有效的知識(shí)先記錄下來,并不斷打磨才是要?jiǎng)?wù)。企業(yè)微信在后續(xù)的階段,還有很多真正的更難的挑戰(zhàn)。當(dāng)然,我們也無懼挑戰(zhàn),去做到一些更NB的事情,人生才更有意義,不是么?