??因?yàn)樗佑|的業(yè)務(wù)復(fù)雜度高、技術(shù)難度大,不能像之前開發(fā)APP那樣拿到需求后畫畫流程圖、定一下各領(lǐng)域的時(shí)間節(jié)點(diǎn)和項(xiàng)目里程碑就開干,因?yàn)椴粚?duì)技術(shù)做抽象并輸出技術(shù)方案設(shè)計(jì)文檔是講不清楚項(xiàng)目的整體實(shí)現(xiàn)方案的,即使做出了功能,只要技術(shù)指標(biāo)不達(dá)標(biāo)(比如準(zhǔn)確率低、耗時(shí)長(zhǎng)等),就很難達(dá)到和產(chǎn)品預(yù)期相符的用戶體驗(yàn)。所以需要有和類似于大型項(xiàng)目的服務(wù)端技術(shù)方案設(shè)計(jì)一樣,對(duì)客戶端APP做技術(shù)方案設(shè)計(jì)的環(huán)節(jié),設(shè)計(jì)出高性能和高擴(kuò)展性的技術(shù)方案,避免項(xiàng)目風(fēng)險(xiǎn)大、項(xiàng)目目標(biāo)難達(dá)預(yù)期、技術(shù)債務(wù)堆積等問題。
??移動(dòng)端的技術(shù)方案設(shè)計(jì),同樣要遵循合適(合適優(yōu)于業(yè)界領(lǐng)先)、簡(jiǎn)單(簡(jiǎn)單優(yōu)于復(fù)雜)、演化(演化優(yōu)于一步到位)的原則,以高可用、高性能和高擴(kuò)展性為目標(biāo)。相比于服務(wù)端的技術(shù)方案設(shè)計(jì),做事的思路和方法都差不多,只是側(cè)重點(diǎn)不一樣而已。
??在做技術(shù)方案設(shè)計(jì)時(shí),我對(duì)自己的要求是需要遵循如下幾大原則:
1、成事心態(tài):作為架構(gòu)師,在設(shè)計(jì)技術(shù)方案時(shí)要想方設(shè)法達(dá)成產(chǎn)品需求和目標(biāo)。即使產(chǎn)品需求實(shí)現(xiàn)難度大、目標(biāo)不切實(shí)際、技術(shù)上存在瓶頸,經(jīng)過嚴(yán)謹(jǐn)?shù)姆治鲵?yàn)證后,在客觀陳述技術(shù)瓶頸的同時(shí)還要基于對(duì)用戶需求的洞察給出自己對(duì)產(chǎn)品方案的建議,推動(dòng)其它領(lǐng)域一起去促成項(xiàng)目目標(biāo)的達(dá)成;
2、全球視野:對(duì)于技術(shù)難度大或沒有頭緒的事情,多看看同行頭部企業(yè)是怎么做的,尤其是自己不了解、認(rèn)為有難度的地方,要通過查閱資料、深入交流等方式,去開闊自己的視野,切忌成了井底之蛙在坐井觀天;
3、說到做到:方案設(shè)計(jì)出來不是架構(gòu)師工作的終點(diǎn),而是工作的起點(diǎn),架構(gòu)師的厲害之處在于不僅能設(shè)計(jì)出合適的技術(shù)方案,還能將技術(shù)方案落地,達(dá)成預(yù)期目標(biāo)。要通過在落地過程中遇到的問題去反思復(fù)盤,優(yōu)化自己做技術(shù)方案設(shè)計(jì)的方法、加深對(duì)技術(shù)的理解。
??下面講講我對(duì)移動(dòng)端技術(shù)方案設(shè)計(jì)流程的理解:
一、需求分析:
??需求分析包括產(chǎn)品需求分析和技術(shù)需求分析,產(chǎn)品需求主要為功能性需求,技術(shù)需求主要為非功能需求,比如性能、穩(wěn)定性、安全性等,技術(shù)需求往往是設(shè)計(jì)技術(shù)方案時(shí)的約束。
??對(duì)產(chǎn)品的需求分析,最基本的是要了解做什么?解決用戶什么問題?什么時(shí)候做完?需要做成什么樣子?即要弄清楚產(chǎn)品功能、用戶需求、時(shí)間節(jié)點(diǎn)和產(chǎn)品規(guī)格。除了弄清楚這幾點(diǎn)之外,還要基于對(duì)用戶需求的洞察,去挖掘文字背后的隱藏信息,這些你洞察到但產(chǎn)品需求中沒有呈現(xiàn)出來的信息,往往就是潛在的需求變更點(diǎn),即使你將洞察到的需求和疑慮告知產(chǎn)品,產(chǎn)品回復(fù)暫時(shí)不做考慮,在設(shè)計(jì)技術(shù)方案時(shí)也要將這些可能的需求考慮進(jìn)去增強(qiáng)技術(shù)方案的拓展性。具體做法是假想自己就是用戶,去模擬用戶在特定場(chǎng)景下可能的行為。
??對(duì)技術(shù)的需求分析,主要是要識(shí)別出如果要保障產(chǎn)品在生命周期內(nèi)持續(xù)安全穩(wěn)定的運(yùn)行,需要做些什么,這通常都屬于非功能性需求,比如:
1、安全性問題:被劫持、被逆向、被抓包等;
2、兼容性問題:在不同設(shè)備上運(yùn)行可能存在的兼容性風(fēng)險(xiǎn);
3、性能問題:內(nèi)存泄漏、卡頓、高CPU占用等可能導(dǎo)致整機(jī)流暢度和功耗等問題;
4、 合規(guī)問題:技術(shù)上可能存在的法律風(fēng)險(xiǎn),比如使用第三方開源庫(kù)等。
二、方案設(shè)計(jì):
??需求分析的主要工作是知道做什么?要做成什么樣?什么時(shí)候做完?做什么、做成什么樣是目標(biāo),什么時(shí)候做完是約束。技術(shù)方案設(shè)計(jì)的主要工作是在產(chǎn)品和技術(shù)的約束下,設(shè)計(jì)技術(shù)方案實(shí)現(xiàn)項(xiàng)目目標(biāo)。其實(shí)技術(shù)方案的設(shè)計(jì)就是一個(gè)工作拆解的過程,現(xiàn)在的項(xiàng)目通常都很復(fù)雜、涉及領(lǐng)域眾多,只有拆成一個(gè)一個(gè)地模塊,然后由團(tuán)隊(duì)相互協(xié)作,才能更好的達(dá)成項(xiàng)目目標(biāo)。架構(gòu)師要做的就是抽象問題、拆解模塊、串聯(lián)各模塊搭建方案以及明確每個(gè)模塊的實(shí)現(xiàn)方案,具體到工作上就是三個(gè)方面的工作:輸出技術(shù)架構(gòu)圖、輸出核心流程圖、明確各模塊的技術(shù)實(shí)現(xiàn)方案。
??技術(shù)架構(gòu)圖就是抽象問題和拆解模塊的工具,架構(gòu)圖分很多種,其中分層、分模塊的架構(gòu)圖最為流行,做技術(shù)方案設(shè)計(jì)的首要任務(wù)就是畫出基于項(xiàng)目的技術(shù)架構(gòu)圖,通過劃分為多個(gè)抽象的層級(jí)實(shí)現(xiàn)邏輯上的拆分、通過對(duì)單個(gè)層級(jí)下劃分為多個(gè)模塊實(shí)現(xiàn)物理上的拆分。Android平臺(tái)架構(gòu)圖就是典型的分層、分模塊架構(gòu),具體如下圖所示:

??通過架構(gòu)圖能夠清晰明了地知道整個(gè)項(xiàng)目有哪些技術(shù)領(lǐng)域和哪些技術(shù)點(diǎn)組成,如果要讓整個(gè)項(xiàng)目運(yùn)作,就需要通過流程將技術(shù)架構(gòu)中的各模塊串聯(lián)起來,技術(shù)架構(gòu)中的每一層和每個(gè)模塊就像一個(gè)一個(gè)的齒輪,流程圖就像是潤(rùn)滑油,讓齒輪之間聯(lián)動(dòng)運(yùn)行起來。在技術(shù)方案設(shè)計(jì)階段,只需要畫出項(xiàng)目的主流程和核心流程就可以了,其它子流程可以在詳細(xì)設(shè)計(jì)的時(shí)候再畫。
??明確整個(gè)項(xiàng)目的方案后,還需要明確技術(shù)架構(gòu)中每個(gè)子模塊的實(shí)現(xiàn)方案,在能夠滿足功能和指標(biāo)需求的前提下,子模塊盡量復(fù)用公司或社會(huì)現(xiàn)成資源,其中社會(huì)資源包括開源的項(xiàng)目以及通過商務(wù)合作的資源,因?yàn)榭焖俚统杀窘桓妒琼?xiàng)目的首要目標(biāo)。如果沒有現(xiàn)成的方案,就需要根據(jù)公司的技術(shù)能力和項(xiàng)目的約束,確定是自研還是尋找技術(shù)合作。如果是自研需要走預(yù)研流程,在有預(yù)研成果對(duì)項(xiàng)目有一定的把握后才能進(jìn)入工程化。如果是尋找技術(shù)合作,需要做技術(shù)方案選型,技術(shù)方案選型要基于項(xiàng)目的各維度關(guān)注點(diǎn)來選出最合適而非最厲害的方案(合適優(yōu)于業(yè)界領(lǐng)先),在方案選型中呈現(xiàn)的信息必須是經(jīng)過實(shí)際驗(yàn)證得出的,切忌只是做信息的收集,避免因?yàn)樾畔⒉粶?zhǔn)確而誤判導(dǎo)致潛在的項(xiàng)目風(fēng)險(xiǎn)。
三、方案總結(jié):
??技術(shù)方案設(shè)計(jì)完成后,需要給出總結(jié)性的結(jié)論,答復(fù)團(tuán)隊(duì)和領(lǐng)導(dǎo)的疑慮。因?yàn)閳F(tuán)隊(duì)中領(lǐng)域眾多,大家對(duì)技術(shù)的理解和認(rèn)知各有不同,關(guān)注的重點(diǎn)也各不相同。所以在給出結(jié)論時(shí)要用直白簡(jiǎn)練而非技術(shù)性的語(yǔ)言,解答各干系人的關(guān)注點(diǎn)。
結(jié)論通常包含如下幾個(gè)方面的內(nèi)容:
1、 技術(shù)上能否實(shí)現(xiàn)?
2、 技術(shù)上能做到什么程度?
3、 項(xiàng)目上存在哪些風(fēng)險(xiǎn)?有何應(yīng)對(duì)方案?
4、 整個(gè)項(xiàng)目的投入情況如何?
??用一句話描述技術(shù)上能否實(shí)現(xiàn)即可,技術(shù)上可行/不可行。前提是要基于項(xiàng)目的約束,包括產(chǎn)品上和技術(shù)上的。
??如果可行,需要輸出整個(gè)項(xiàng)目以及各技術(shù)子模塊的技術(shù)規(guī)格,講清楚衡量技術(shù)能力的指標(biāo)以及能做到什么程度。
??接下來需要闡述清楚在項(xiàng)目過程中存在的潛在風(fēng)險(xiǎn),風(fēng)險(xiǎn)包括:
1、 進(jìn)度風(fēng)險(xiǎn):進(jìn)度上存在的風(fēng)險(xiǎn);
2、 資源風(fēng)險(xiǎn):人力等資源上存在的風(fēng)險(xiǎn);
3、 涌現(xiàn)風(fēng)險(xiǎn):多個(gè)技術(shù)組合、并行存在的風(fēng)險(xiǎn),比如功耗、系統(tǒng)資源瓶頸等問題;
4、 體驗(yàn)風(fēng)險(xiǎn):比如耗時(shí)長(zhǎng)、操作繁瑣等和產(chǎn)品預(yù)期不一致的風(fēng)險(xiǎn)問題;
5、 指標(biāo)風(fēng)險(xiǎn):受限于項(xiàng)目約束和技術(shù)瓶頸,無法達(dá)成產(chǎn)品規(guī)格的風(fēng)險(xiǎn)。
??風(fēng)險(xiǎn)的應(yīng)對(duì)方案包括:
1、 消除風(fēng)險(xiǎn):風(fēng)險(xiǎn)可以消除且對(duì)項(xiàng)目沒有影響,這種通常不用寫出來;
2、 規(guī)避風(fēng)險(xiǎn):無法正面解決,但可以曲線救國(guó)的方案,這種情況可能對(duì)用戶體驗(yàn)或其它方面有影響,必須寫出來講清楚,要在項(xiàng)目上達(dá)成一致;
3、 減小風(fēng)險(xiǎn):風(fēng)險(xiǎn)無法消除但可以降低風(fēng)險(xiǎn)對(duì)項(xiàng)目的影響。
??最后需要講清楚項(xiàng)目在人力、資金方面的投入成本,便于領(lǐng)導(dǎo)決策項(xiàng)目的價(jià)值。是否值得投入,或調(diào)整項(xiàng)目策略。
四、方案落地:
??在方案設(shè)計(jì)完成,且通過項(xiàng)目?jī)?nèi)、領(lǐng)導(dǎo)的決策后,接下來需要按照設(shè)計(jì)的方案落地達(dá)成技術(shù)規(guī)格,在落地的過程中需要重點(diǎn)關(guān)注如下幾個(gè)方面:
1、 分里程碑拆解目標(biāo),類似于敏捷開發(fā)小步快跑的方式及時(shí)交付、遇到問題能快速調(diào)整,降低風(fēng)險(xiǎn),避免一條路走到黑、遲遲看不到效果。
2、 分點(diǎn)專項(xiàng)驗(yàn)證各技術(shù)點(diǎn)的達(dá)成情況,各個(gè)關(guān)鍵的技術(shù)點(diǎn)都需要針對(duì)性驗(yàn)證和驗(yàn)收,齒輪的質(zhì)量有保障,多個(gè)齒輪組成的系統(tǒng)聯(lián)動(dòng)才會(huì)有保障。
3、 遇到異常時(shí)優(yōu)先嘗試去解決,如果在一段時(shí)間內(nèi)沒有進(jìn)展需及時(shí)調(diào)整方案;只要是在方案設(shè)計(jì)階段經(jīng)過嚴(yán)格的驗(yàn)證,遇到異常時(shí)首先不應(yīng)否定自己的方案,要想辦法嘗試解決遇到的問題。如果實(shí)在解決不了,要及時(shí)調(diào)整避免對(duì)項(xiàng)目進(jìn)度造成影響。
4、 工程化的優(yōu)化是錦上添花的操作,但要正確理解工程化的優(yōu)化,不是打補(bǔ)丁,而是方案層面的優(yōu)化,比如多個(gè)技術(shù)并行減少運(yùn)行時(shí)的耗時(shí);
5、 項(xiàng)目結(jié)束后及時(shí)復(fù)盤總結(jié),優(yōu)化后續(xù)的技術(shù)方案設(shè)計(jì)流程和方法。
??下面是對(duì)整篇文章的總結(jié):
1、 技術(shù)方案的設(shè)計(jì)要以全球視野去想方設(shè)法做成項(xiàng)目,并且方案設(shè)計(jì)出來后要能親自落地,達(dá)成項(xiàng)目目標(biāo);
2、 技術(shù)方案設(shè)計(jì)要充分洞察產(chǎn)品和技術(shù)需求,基于需求通過架構(gòu)圖拆解模塊,并通過流程將各模塊中的技術(shù)點(diǎn)串聯(lián)起來使整個(gè)項(xiàng)目運(yùn)行起來。對(duì)于關(guān)鍵的技術(shù)點(diǎn),要基于嚴(yán)謹(jǐn)?shù)尿?yàn)證分析做出方案選型;
3、 技術(shù)方案的評(píng)審要給出明確的結(jié)論,以各領(lǐng)域都能懂的語(yǔ)言表達(dá)清楚技術(shù)的可行性、技術(shù)規(guī)格、風(fēng)險(xiǎn)和應(yīng)對(duì)方案以及項(xiàng)目投入情況;
4、 技術(shù)方案設(shè)計(jì)評(píng)審?fù)ㄟ^不是架構(gòu)師工作的終點(diǎn),把技術(shù)方案落地達(dá)成項(xiàng)目目標(biāo)才是終點(diǎn)。