??因為所接觸的業(yè)務(wù)復(fù)雜度高、技術(shù)難度大融击,不能像之前開發(fā)APP那樣拿到需求后畫畫流程圖、定一下各領(lǐng)域的時間節(jié)點和項目里程碑就開干,因為不對技術(shù)做抽象并輸出技術(shù)方案設(shè)計文檔是講不清楚項目的整體實現(xiàn)方案的偿警,即使做出了功能,只要技術(shù)指標(biāo)不達(dá)標(biāo)(比如準(zhǔn)確率低唯笙、耗時長等)螟蒸,就很難達(dá)到和產(chǎn)品預(yù)期相符的用戶體驗。所以需要有和類似于大型項目的服務(wù)端技術(shù)方案設(shè)計一樣崩掘,對客戶端APP做技術(shù)方案設(shè)計的環(huán)節(jié)七嫌,設(shè)計出高性能和高擴(kuò)展性的技術(shù)方案,避免項目風(fēng)險大苞慢、項目目標(biāo)難達(dá)預(yù)期诵原、技術(shù)債務(wù)堆積等問題。
??移動端的技術(shù)方案設(shè)計挽放,同樣要遵循合適(合適優(yōu)于業(yè)界領(lǐng)先)绍赛、簡單(簡單優(yōu)于復(fù)雜)、演化(演化優(yōu)于一步到位)的原則辑畦,以高可用吗蚌、高性能和高擴(kuò)展性為目標(biāo)。相比于服務(wù)端的技術(shù)方案設(shè)計纯出,做事的思路和方法都差不多蚯妇,只是側(cè)重點不一樣而已。
??在做技術(shù)方案設(shè)計時暂筝,我對自己的要求是需要遵循如下幾大原則:
1箩言、成事心態(tài):作為架構(gòu)師,在設(shè)計技術(shù)方案時要想方設(shè)法達(dá)成產(chǎn)品需求和目標(biāo)乖杠。即使產(chǎn)品需求實現(xiàn)難度大分扎、目標(biāo)不切實際、技術(shù)上存在瓶頸胧洒,經(jīng)過嚴(yán)謹(jǐn)?shù)姆治鲵炞C后畏吓,在客觀陳述技術(shù)瓶頸的同時還要基于對用戶需求的洞察給出自己對產(chǎn)品方案的建議,推動其它領(lǐng)域一起去促成項目目標(biāo)的達(dá)成卫漫;
2菲饼、全球視野:對于技術(shù)難度大或沒有頭緒的事情,多看看同行頭部企業(yè)是怎么做的列赎,尤其是自己不了解宏悦、認(rèn)為有難度的地方,要通過查閱資料、深入交流等方式饼煞,去開闊自己的視野源葫,切忌成了井底之蛙在坐井觀天;
3砖瞧、說到做到:方案設(shè)計出來不是架構(gòu)師工作的終點息堂,而是工作的起點,架構(gòu)師的厲害之處在于不僅能設(shè)計出合適的技術(shù)方案块促,還能將技術(shù)方案落地荣堰,達(dá)成預(yù)期目標(biāo)。要通過在落地過程中遇到的問題去反思復(fù)盤竭翠,優(yōu)化自己做技術(shù)方案設(shè)計的方法振坚、加深對技術(shù)的理解。
??下面講講我對移動端技術(shù)方案設(shè)計流程的理解:
一斋扰、需求分析:
??需求分析包括產(chǎn)品需求分析和技術(shù)需求分析渡八,產(chǎn)品需求主要為功能性需求,技術(shù)需求主要為非功能需求传货,比如性能呀狼、穩(wěn)定性、安全性等损离,技術(shù)需求往往是設(shè)計技術(shù)方案時的約束。
??對產(chǎn)品的需求分析绝编,最基本的是要了解做什么僻澎?解決用戶什么問題?什么時候做完十饥?需要做成什么樣子窟勃?即要弄清楚產(chǎn)品功能、用戶需求逗堵、時間節(jié)點和產(chǎn)品規(guī)格秉氧。除了弄清楚這幾點之外,還要基于對用戶需求的洞察蜒秤,去挖掘文字背后的隱藏信息汁咏,這些你洞察到但產(chǎn)品需求中沒有呈現(xiàn)出來的信息,往往就是潛在的需求變更點作媚,即使你將洞察到的需求和疑慮告知產(chǎn)品攘滩,產(chǎn)品回復(fù)暫時不做考慮,在設(shè)計技術(shù)方案時也要將這些可能的需求考慮進(jìn)去增強(qiáng)技術(shù)方案的拓展性纸泡。具體做法是假想自己就是用戶漂问,去模擬用戶在特定場景下可能的行為。
??對技術(shù)的需求分析,主要是要識別出如果要保障產(chǎn)品在生命周期內(nèi)持續(xù)安全穩(wěn)定的運行蚤假,需要做些什么栏饮,這通常都屬于非功能性需求,比如:
1磷仰、安全性問題:被劫持袍嬉、被逆向、被抓包等芒划;
2冬竟、兼容性問題:在不同設(shè)備上運行可能存在的兼容性風(fēng)險;
3民逼、性能問題:內(nèi)存泄漏泵殴、卡頓、高CPU占用等可能導(dǎo)致整機(jī)流暢度和功耗等問題拼苍;
4笑诅、 合規(guī)問題:技術(shù)上可能存在的法律風(fēng)險,比如使用第三方開源庫等疮鲫。
二吆你、方案設(shè)計:
??需求分析的主要工作是知道做什么?要做成什么樣俊犯?什么時候做完妇多?做什么、做成什么樣是目標(biāo)燕侠,什么時候做完是約束者祖。技術(shù)方案設(shè)計的主要工作是在產(chǎn)品和技術(shù)的約束下,設(shè)計技術(shù)方案實現(xiàn)項目目標(biāo)绢彤。其實技術(shù)方案的設(shè)計就是一個工作拆解的過程七问,現(xiàn)在的項目通常都很復(fù)雜、涉及領(lǐng)域眾多茫舶,只有拆成一個一個地模塊械巡,然后由團(tuán)隊相互協(xié)作,才能更好的達(dá)成項目目標(biāo)饶氏。架構(gòu)師要做的就是抽象問題讥耗、拆解模塊、串聯(lián)各模塊搭建方案以及明確每個模塊的實現(xiàn)方案嚷往,具體到工作上就是三個方面的工作:輸出技術(shù)架構(gòu)圖葛账、輸出核心流程圖、明確各模塊的技術(shù)實現(xiàn)方案皮仁。
??技術(shù)架構(gòu)圖就是抽象問題和拆解模塊的工具籍琳,架構(gòu)圖分很多種菲宴,其中分層、分模塊的架構(gòu)圖最為流行趋急,做技術(shù)方案設(shè)計的首要任務(wù)就是畫出基于項目的技術(shù)架構(gòu)圖喝峦,通過劃分為多個抽象的層級實現(xiàn)邏輯上的拆分、通過對單個層級下劃分為多個模塊實現(xiàn)物理上的拆分。Android平臺架構(gòu)圖就是典型的分層、分模塊架構(gòu)必盖,具體如下圖所示:
??通過架構(gòu)圖能夠清晰明了地知道整個項目有哪些技術(shù)領(lǐng)域和哪些技術(shù)點組成满着,如果要讓整個項目運作赫悄,就需要通過流程將技術(shù)架構(gòu)中的各模塊串聯(lián)起來,技術(shù)架構(gòu)中的每一層和每個模塊就像一個一個的齒輪,流程圖就像是潤滑油,讓齒輪之間聯(lián)動運行起來谈喳。在技術(shù)方案設(shè)計階段,只需要畫出項目的主流程和核心流程就可以了戈泼,其它子流程可以在詳細(xì)設(shè)計的時候再畫婿禽。
??明確整個項目的方案后,還需要明確技術(shù)架構(gòu)中每個子模塊的實現(xiàn)方案大猛,在能夠滿足功能和指標(biāo)需求的前提下扭倾,子模塊盡量復(fù)用公司或社會現(xiàn)成資源,其中社會資源包括開源的項目以及通過商務(wù)合作的資源挽绩,因為快速低成本交付是項目的首要目標(biāo)膛壹。如果沒有現(xiàn)成的方案,就需要根據(jù)公司的技術(shù)能力和項目的約束唉堪,確定是自研還是尋找技術(shù)合作恢筝。如果是自研需要走預(yù)研流程,在有預(yù)研成果對項目有一定的把握后才能進(jìn)入工程化巨坊。如果是尋找技術(shù)合作,需要做技術(shù)方案選型此改,技術(shù)方案選型要基于項目的各維度關(guān)注點來選出最合適而非最厲害的方案(合適優(yōu)于業(yè)界領(lǐng)先)趾撵,在方案選型中呈現(xiàn)的信息必須是經(jīng)過實際驗證得出的,切忌只是做信息的收集共啃,避免因為信息不準(zhǔn)確而誤判導(dǎo)致潛在的項目風(fēng)險占调。
三、方案總結(jié):
??技術(shù)方案設(shè)計完成后移剪,需要給出總結(jié)性的結(jié)論究珊,答復(fù)團(tuán)隊和領(lǐng)導(dǎo)的疑慮。因為團(tuán)隊中領(lǐng)域眾多纵苛,大家對技術(shù)的理解和認(rèn)知各有不同剿涮,關(guān)注的重點也各不相同言津。所以在給出結(jié)論時要用直白簡練而非技術(shù)性的語言,解答各干系人的關(guān)注點取试。
結(jié)論通常包含如下幾個方面的內(nèi)容:
1悬槽、 技術(shù)上能否實現(xiàn)?
2瞬浓、 技術(shù)上能做到什么程度初婆?
3、 項目上存在哪些風(fēng)險猿棉?有何應(yīng)對方案磅叛?
4、 整個項目的投入情況如何萨赁?
??用一句話描述技術(shù)上能否實現(xiàn)即可弊琴,技術(shù)上可行/不可行。前提是要基于項目的約束位迂,包括產(chǎn)品上和技術(shù)上的访雪。
??如果可行,需要輸出整個項目以及各技術(shù)子模塊的技術(shù)規(guī)格掂林,講清楚衡量技術(shù)能力的指標(biāo)以及能做到什么程度臣缀。
??接下來需要闡述清楚在項目過程中存在的潛在風(fēng)險,風(fēng)險包括:
1泻帮、 進(jìn)度風(fēng)險:進(jìn)度上存在的風(fēng)險精置;
2、 資源風(fēng)險:人力等資源上存在的風(fēng)險锣杂;
3脂倦、 涌現(xiàn)風(fēng)險:多個技術(shù)組合、并行存在的風(fēng)險元莫,比如功耗赖阻、系統(tǒng)資源瓶頸等問題;
4踱蠢、 體驗風(fēng)險:比如耗時長火欧、操作繁瑣等和產(chǎn)品預(yù)期不一致的風(fēng)險問題;
5茎截、 指標(biāo)風(fēng)險:受限于項目約束和技術(shù)瓶頸苇侵,無法達(dá)成產(chǎn)品規(guī)格的風(fēng)險。
??風(fēng)險的應(yīng)對方案包括:
1企锌、 消除風(fēng)險:風(fēng)險可以消除且對項目沒有影響榆浓,這種通常不用寫出來;
2撕攒、 規(guī)避風(fēng)險:無法正面解決陡鹃,但可以曲線救國的方案烘浦,這種情況可能對用戶體驗或其它方面有影響,必須寫出來講清楚杉适,要在項目上達(dá)成一致谎倔;
3、 減小風(fēng)險:風(fēng)險無法消除但可以降低風(fēng)險對項目的影響猿推。
??最后需要講清楚項目在人力片习、資金方面的投入成本,便于領(lǐng)導(dǎo)決策項目的價值蹬叭。是否值得投入藕咏,或調(diào)整項目策略。
四秽五、方案落地:
??在方案設(shè)計完成孽查,且通過項目內(nèi)、領(lǐng)導(dǎo)的決策后坦喘,接下來需要按照設(shè)計的方案落地達(dá)成技術(shù)規(guī)格盲再,在落地的過程中需要重點關(guān)注如下幾個方面:
1、 分里程碑拆解目標(biāo)瓣铣,類似于敏捷開發(fā)小步快跑的方式及時交付答朋、遇到問題能快速調(diào)整,降低風(fēng)險棠笑,避免一條路走到黑梦碗、遲遲看不到效果。
2蓖救、 分點專項驗證各技術(shù)點的達(dá)成情況洪规,各個關(guān)鍵的技術(shù)點都需要針對性驗證和驗收,齒輪的質(zhì)量有保障循捺,多個齒輪組成的系統(tǒng)聯(lián)動才會有保障斩例。
3、 遇到異常時優(yōu)先嘗試去解決从橘,如果在一段時間內(nèi)沒有進(jìn)展需及時調(diào)整方案樱拴;只要是在方案設(shè)計階段經(jīng)過嚴(yán)格的驗證,遇到異常時首先不應(yīng)否定自己的方案洋满,要想辦法嘗試解決遇到的問題。如果實在解決不了珍坊,要及時調(diào)整避免對項目進(jìn)度造成影響牺勾。
4、 工程化的優(yōu)化是錦上添花的操作阵漏,但要正確理解工程化的優(yōu)化驻民,不是打補(bǔ)丁翻具,而是方案層面的優(yōu)化,比如多個技術(shù)并行減少運行時的耗時回还;
5裆泳、 項目結(jié)束后及時復(fù)盤總結(jié),優(yōu)化后續(xù)的技術(shù)方案設(shè)計流程和方法柠硕。
??下面是對整篇文章的總結(jié):
1工禾、 技術(shù)方案的設(shè)計要以全球視野去想方設(shè)法做成項目,并且方案設(shè)計出來后要能親自落地蝗柔,達(dá)成項目目標(biāo)闻葵;
2、 技術(shù)方案設(shè)計要充分洞察產(chǎn)品和技術(shù)需求癣丧,基于需求通過架構(gòu)圖拆解模塊槽畔,并通過流程將各模塊中的技術(shù)點串聯(lián)起來使整個項目運行起來。對于關(guān)鍵的技術(shù)點胁编,要基于嚴(yán)謹(jǐn)?shù)尿炞C分析做出方案選型厢钧;
3、 技術(shù)方案的評審要給出明確的結(jié)論嬉橙,以各領(lǐng)域都能懂的語言表達(dá)清楚技術(shù)的可行性早直、技術(shù)規(guī)格、風(fēng)險和應(yīng)對方案以及項目投入情況憎夷;
4莽鸿、 技術(shù)方案設(shè)計評審?fù)ㄟ^不是架構(gòu)師工作的終點,把技術(shù)方案落地達(dá)成項目目標(biāo)才是終點拾给。