程式設計師如何做好技術規劃?

奶爸碼農發表於2019-07-25

1 前言

隨著程式設計師的經驗、資歷不斷提升,不再滿足於日常業務搬磚,也要朝技術創新方向不斷努力。對低階別的技術同學來說也許點上面的優化就可以做的不錯了,但對於高階別的同學,體系化的思考能力尤其重要,這就需要做好技術規劃。
在大前端新框架層出不窮的年代,技術規劃似乎約等於輪子大法,不管三七二十一,新出一個框架拿來就嘗試一下,例如RN、Flutter這類框架,第一批吃螃蟹的總能獲得不錯的紅利。要是再有追求的,直接另起爐灶自己實現一下,例如Weex就是RN的Vue語言版本,在阿里體系內也是混的風生水起。
但最近幾年大前端的新技術趨於穩定,不再有那麼多紅利可吃,另外很多公司也嚴禁重複造輪子,作為業務開發的我們如何在日常繁重的業務開發中做好技術規劃呢?

2 什麼是技術規劃

規劃,意思就是個人或組織制定的比較全面長遠的發展計劃,是對未來整體性、長期性、基本性問題的思考和考量,設計未來整套行動的方案。規劃是融合多要素、多人士看法的某一特定領域的發展願景。
-百度百科

從百度百科的定義來看,技術規劃相比於日常技術優化有幾個特點:

  • 整體性:技術規劃一定是對現有系統有體系化的思考,得出一個全面整體的改進方案,不在停留在某些具體優化點之上
  • 長期性:技術規劃一般週期都在在季度、半年度甚至年度,這就意味著這件事情是比較長期穩定的,需要持續推進的
  • 方向性:技術規劃需要針對某個方向,提出一個較為長遠的目標,設計全面的發展計劃和行動方案

  

規劃的意義就在於給到一個長遠的目標,起到了燈塔的作用,也許一開始並不能馬上就找準方向得到理想的結果,但是通過設立規劃目標、階段性的里程碑,不斷做有積累的事情,最終就能夠得到理想的結果。

3 怎麼做技術規劃

前期準備

  • 業務分析
    技術不是空中樓閣,一定是服務於業務場景,這個需要技術同學加深業務的理解。有句話提到加深業務理解總結下來就是:“站在業務方的視角,在理解業務發展目標、看清業務發展方向的前提下,做出技術和業務的平衡”。
    所以技術規劃首先要考慮的是業務價值,千萬不要為了技術自嗨,為了規劃而規劃,一定要想想做這件事情最終給業務能帶來什麼?

  • 業界對標
    當你要解決一個問題的時候,要相信你不會是第一個遇到的,也許業界已經有很好的解決方案,所以技術規劃時候需要前期做足準備,充分調研看看別人是如何解決的,是否適合你的場景,多比較多對標,再開始動手。
    技術同學往往會有自己動手的衝動,往往覺得自己親自造輪子解決才有成就感,其實如果你能採用成熟方案以最小代價解決問題,這個難道不是更有效嗎?

設立目標

一般設立目標的時候遵循SMART(S=Specific、M=Measurable、A=Attainable、R=Relevant、T=Time-bound)原則,可以逐條對照目標原則看你的目標是否符合。

當然設立目標也需要考慮一些因素:

  • 收益:目標一定是能夠獲得業務收益的,例如收入、效率、體驗,不要設立一個無法明確收益的目標。
  • 技術:從技術層面來看,分為三個層次:現有擴充套件或者深度挖掘,新方向探索,趨勢判斷。越往後面的層次約考驗技術同學的技術判斷能力,這個需要大量的積累。
  • 團隊:目標是否是現有團隊人力可以承受的?技術能力上團隊是否能夠支撐?比如做一個移動作業系統可能就不是一箇中小公司可以考慮的事情,或許只有華為、阿里這類大型公司才有可能落地實現。

一個技術規劃設立目標的例子:

在xxx時間內達到:

  • xxx系統可用性99.99%
  • xxx系統線上故障<x個
  • xxx系統響應時間90線<x秒

任務分解

在目標設立好之後,需要進行目標的拆解,形成一份可以執行的計劃。在任務分解的過程中需要注意幾點:

  • 全景圖
    任務分解不是沒有章法的,這個尤其考驗技術leader的技術大局觀,必須具備開闊的視野看到整個事情的全景圖,才能夠在巨集觀層面更好的進行拆解。
    以美團點評金融平臺 Web 前端技術體系為例(圖片來源:https://tech.meituan.com/2018/03/16/front-end-web-architecture.html):

     

     

    我相信在做技術規劃的時候,有這張技術全景圖對於任務分解會起到非常大的幫助。規劃要做的事情可以很容易按照分層圖一層層拆分,或者按照不同框架系統進行拆分,同時也可以針對某層或者某個框架模組進行細分目標設定,使得目標更加精確容易衡量。
  • 明確可執行
    拆分出來的子任務需要明確可執行,子任務或者子目標也是要遵循SMART原則,同時拆分後更加貼近最終落地的結果,更加容易執行,未來也更容易進行衡量。

執行計劃

任務分解後是制定執行計劃,這個和做業務需求一樣,要把一件事在分解拆細,評估工時,安排到人,進行專案排期。在執行計劃上需要注意幾點:

  • 設定里程碑


    對於一個長期的技術規劃專案而言,經過任務拆解後可以能會分為幾個子方向或者子專案並行開發,再加上週期漫長,如果要等到全部做完後再驗證結果,這時候往往會產生非常大的偏差。里程碑的設立非常重要,一方面可以給到團隊階段性的勝利成果鼓勵信心,另一方可以快速驗證小步快走,避免出現重大的方向誤差。
  • 高風險專案
    針對高風險專案,需要採取快速試錯的方式,小步快走,前期要分階段快速出成果。先做demo進行技術驗證,再小範圍嘗試,最終再沉澱為應用。

  • 計劃設定
    技術設定時候可以前緊後鬆,專案管理按照時間分階段,月度計劃可以細化到周或者天,長期計劃可以細化到月。
    任務拆分和估時的顆粒度也要適中,拆分出來的每一件事情都是可以測試驗證效果的,但同時不宜太大(1~3天工作量最好),這樣可以提高工作量預估的準確性,而且將來計劃調整也比較靈活。

風險評估

執行過程中需要不斷評估風險,風險分為兩類:技術風險和管理風險。
技術風險:前期需要評估技術可行性,結合團隊技能和梯隊情況,充分調研業界最佳實踐,尋找到合適自己的技術方案,一定要記住不要被“顛覆性”的想法衝昏了頭腦。
管理風險:團隊人員配備是否充足,是否會因為業務波峰波谷導致技術需求無法持續,這個需要考驗技術leader對於未來業務的判斷,同時和業務團隊充分溝通,針對技術需要留有一些固定比例人力,保證技術專案的長期性。

貫徹執行

執行過程中,專案到了一個里程碑,需要停下來進行總結覆盤,看看當前的位置離目標是否越來越近,覆盤過程中是否有改善的地方,同時按照當前的狀態對計劃進行調整和制定改進動作。規劃就是為了更好地適應明天的變化。

4 總結一下 

 

技術規劃包括明確目標、任務分解、執行計劃、風險評估、貫徹執行這5個環節,每個環節都需要技術leader們認真思考,技術規劃不光是表面光鮮高大上的事情,更需要腳踏實的狠抓細節才能落地。
最後,大家往往提到技術規劃的時候腦中總是飄過各種高大上、酷炫屌炸天的技術,對於那些髒活苦活不屑一顧。但是我們需要仔細思考,迴歸到技術的本源,任何技術都是為業務服務的,如何選取合適的技術並且體現業務價值才是真正應該值得各位同學好好追尋探索。

---華麗的分割線---
第一則廣告:美團點評上海團隊招聘前端資深/專家工程師,有興趣的同學歡迎投簡歷到wangdan53[AT]meituan.com

第二則廣告,有興趣同學可以關注微信公眾號奶爸碼農,不定期分享關於投資、理財、IT等內容:

 

 

 

 

相關文章