資深程式設計師必備技能-如何對軟體系統做技術規劃

ThinkerQAQ發表於2024-06-23

1. 前言

本文是筆者對於技術規劃的一些思考沉澱。如果這篇文章能幫助你入門技術規劃,那自然是最好的,同時,正所謂教是最好的學,這也側面了證明筆者已經掌握了技術規劃的能力哈哈。

2. 我對軟體系統技術規劃的理解

軟體系統技術規劃,顧名思義,就是對軟體系統做一些技術側的規劃,分三塊描述:

  1. 軟體系統
  2. 技術側
  3. 規劃

2.1. 軟體系統

往大了說桌面端的PC軟體,Web端的網頁、移動端的APP等等都是軟體系統,往小了說,一個服務,一個模組,一個元件,一個小工具也屬於軟體系統的範疇。任何一個軟體系統都是可以做技術規劃的,一方面世界上不存在完美的系統,總會有這樣或那樣的問題,把這些問題歸因分類下,我們就可以做規劃了;另一方面,世間萬事萬物總是向前發展的,即使現在的系統真的很完美,我們仍然可以思考系統未來的發展方向,並針對這個方向做一些技術探索甚至創新顛覆,這也是規劃的一種。

2.2. 技術側

技術側是相對於業務側來說的,本文雖然專注於技術視角,但是我們也要知道,技術和業務是相輔相成的,不能孤立的看待兩者,有了業務的發展才有技術的用武之地,有了技術的支撐業務才能更好得發展,因此做技術規劃的過程是繞不開業務話題的。

2.3. 規劃

根據規劃-百度百科的定義,

規劃,是個人或組織制定的比較全面長遠的發展計劃,是對未來整體性、長期性、基本性問題的思考和考量,設計未來整套行動的方案

按我個人理解,主要有兩個關鍵點:

  1. 規劃即方案
  2. 規劃即計劃

2.3.1. 規劃即方案

方案,是用來解決問題的措施,因此方案既要明確問題是什麼,同時要避免假大空,要避免空中樓閣,要細化到怎麼解決問題,或者說細化到解決問題的具體步驟。

規劃即方案,說的是規劃也要滿足上述針對方案的論斷,這點毋庸置疑。同時,規劃相對於方案來說,首先側重於解決基本性問題而不是一個兩個BUG,其次正所謂不謀萬世者,不足謀一時,不謀全域性者,不足謀一域,好的規劃需要從區域性視角切換到全域性視角,需要以一種較為全面整體的視角來出方案。

2.3.2. 規劃即計劃

2.3.2.1. 規劃是面向未來的

規劃主要是面向未來的,但是要想展望未來必先立足當下。對於一個軟體系統而言,需要對系統的現狀甚至過去的演進有一個足夠的瞭解後,才能做出比較好的規劃。

2.3.2.2. 規劃是長期性的

規劃需要面向多久的未來呢?一般情況下是3-12個月,時間太短了趕著落地可能會出一大堆Bug,而且誰也不想天天活在Dealine的恐懼中;太長了也不好,正所謂計劃趕不上變化,萬一出現了一些意外情況導致結果不及預期,那麼船小還能掉頭。

2.3.2.3. 規劃是要排期落地的

規劃需要落地執行,簡單來講就是排期,在某個時間節點完成某項功能。

2.4. 小結

  1. 無論大小系統都可以做技術規劃
  2. 做技術規劃不能脫離業務視角
  3. 規劃既是計劃,也是方案。從這兩點出發,那麼其實也就引出了規劃的方法論:
    1. 梳理過去/現狀
    2. 展望未來,提出理想態
    3. 基於過去/現狀和理想態的差距,自然就可以發現基本性問題
    4. 針對問題設計解決方案
    5. 排期時間,落地執行解決問題

3. 為什麼要做規劃

事事都離不開規劃,大到國家,有五年規劃,小到個人,有人生規劃和職業規劃等。做規劃在我理解最大的好處是,有了目標和方向感,有了目標和方向感就不會迷茫並且能正確發力,精力只有用到正確的地方才能起到事半功倍的作用。

具體到軟體系統技術規劃也是一樣的道理,有了規劃我們才能穩紮穩打的做出對使用者更友好的系統,甚至成為業界標杆;當然,還有一個更現實的原因,對於一個程式設計師而言,如果不掌握規劃能力的話,那麼是無法進一步往上發展的,它是我們邁向資深程式設計師的必備技能。

4. 如何對軟體系統做技術規劃

4.1. 收集資料

收集資料貫穿整個技術規劃的始終,只有足夠的輸入才能有輸出,資料包括但不限於程式碼、以前的規劃文件、技術方案、接入文件等等

4.2. 梳理現狀

從兩個方案入手梳理現狀:

  1. 業務功能
  2. 技術架構

4.2.1. 業務功能

我們可以實際從頭開始體驗系統,瞭解系統有哪些角色,代入這些角色實際操作一把系統,並最終沉澱一份接入文件。

4.2.2. 技術架構

體驗系統的過程中我們可以抓包、查日誌、看程式碼等方式梳理系統的架構和鏈路,最起碼總結出以下兩張圖:

  1. 分層架構圖
  2. 核心鏈路圖

4.3. 展望未來提出理想態

有兩種方法可以推測系統的未來:

  1. 歸納法
  2. 演繹法

4.3.1. 歸納法

我們可以去做競品調研,瞭解司內司外同類系統是怎麼做的,並整理歸納下,對比我們的系統就知道未來需要做什麼了。

4.3.2. 演繹法

但是如果競品系統沒有值得借鑑的地方怎麼辦呢?那我們可以從本質出發,思考系統的本質是什麼,為誰服務,基於此進行邏輯推理與演化思考,從而推匯出系統的未來理想態,就如同本文最開始從規劃是什麼的定義出發,帶出了怎麼做規劃的方法論。

4.4. 發現問題

什麼是問題呢?現實和理想的差距就是問題。前文梳理現狀和預測未來提出理想態如果已經搞清楚了,那麼發現問題自然不在話下,具體而言,可以從以下幾個方面總結問題

  1. 技術架構層面
  2. 接入效率層面
  3. 效能層面
  4. 穩定性層面
  5. 成本層面
  6. ...

4.5. 設計解決方案

針對一個問題,我們需要提出至少3個解決方案,並總結每個方案的優缺點,再進行對比選型,最後,針對選型出的方案總結出兩張圖:

  1. 分層架構圖
  2. 核心鏈路圖

4.6. 排期落地

方案出來了,剩下的就是排期落地,其實就是列出Todo項,根據優先順序排序,並一項項得完成之。

相關文章