[心得] 線上系統再更新

作者: TonyQ (自立而後立人。)   2020-09-25 22:23:39
剛好今天朋友聊到老系統怎麼翻新,
大家手上的系統有一天都會變老系統,
如果維護的不夠,可能就會變成被討厭的系統。
做人可以有被討厭的勇氣,系統被討厭就會被換新。
很多人說老系統換新很難,但我覺得還是有一些方法論的。
幾個我自己會處理的做法:
1. 找出最小故障單位
被稱之為系統的東西通常是多元件的,每個元件有各自的職責,
所以通常不可能是一次全部都有問題。
一般來說,一個老系統首先需要的是體檢,把常失火的地方找出來。
可能是一或多個。
2. 開始切出問題的邊界,凡是系統一定是有 input 跟 output 。
再來,仔細讀懂這一段的程式碼或行為,如果沒有程式碼,
那就記錄這一段足夠的input 跟 output 確認邏輯。
3. 建立測試環境
4. 拉出隔離層(中間疊 proxy 或改成透過網路存取等)
5. 局部替換邏輯(由 proxy 導部分流量檢查有無異常)。
6. 上線
7. 如果出問題,必須可還原回修改前的模式
=======
其實會難,通常是沒有切對結構,
或是沒找到 core issue 。
另外多數情況下未必是整個重寫,通常是局部的調整可以解決問題。
有一種情況是需要向舊相容,
這種時候介面會同時支援舊的,直到確定不再呼叫。
很多人會認為寫新的就不用管舊的介面,
結果上線一測東漏西漏死的亂七八糟。
總之,改老系統時,
保守的多做事多買多層保險才是先進。
改老系統的心法叫做移花接木,
強調的是模仿,與原本的功能行為越像越容易嫁接。
很多人總覺得重做功能就要東加西加,
功能連對照組都沒有,當然就會越做越難。
如果是為了加新功能,所以要重寫,
這其實不叫重寫,這叫槓上開花。
重寫是跟系統槓上,加新功能是讓腦袋開花。
一般調整系統都會需要明確目的,也能結構化確認問題,
往往是非常多細碎單元的組合,而不是一次萬里長征。
拍片也講求分段拍攝再後製剪接到位,
但重寫系統想要長鏡頭一鏡到底,這是高難度技巧。
總之系統重整,單純就是技能問題跟心態問題。
撇開耍屌、自以為是,認真的面對既有的程式跟需求。
尊重團隊已經做到的事情,
想著怎麼用新的方法完成,這些才是真正的目標。
多數的失敗,肇因於不尊重既有的邏輯,
貿然躁進調整,自然出事。
最可怕的是單行道的改版,
無法還原,一旦出事就大地震。
爬山要確保,寫程式也得有備案。
總之,尊敬既有的程式碼,與之共存,
並比既有的程式碼更理解既有的程式碼的目的。
這樣要重寫程式,很難失敗。
而且減少失敗次數,就是加速成功。
作者: superpandal   2020-09-25 23:09:00
我不看做法 我看的是要我做到底合不合理基本上找人進去不給高薪 不熟業務又要叫人短時間做出來本身就不合理合理的化技術層面好解決合理的話
作者: x246libra (楓)   2020-09-26 02:51:00
給高薪,短時間,不熟業務,可以做出來嗎?不確定樓上是薪水還是時間來判定是否合理
作者: ldkrsi (衰神)   2020-09-26 05:29:00
老系統更新最難的不是上面覺得還能用就不要改嗎還有就是改到一半人手被源源不絕的急件借走然後就變成一個更難維護的樣子放在那邊
作者: shooter555 (shooter)   2020-09-26 08:59:00
最可怕的是各元件之間互相依賴太深 牽一髮動全身 改一個全部死然後就要排定一堆時間 來先把依賴的問題解決 再來改進其中一個元件 然後上層老闆就會失去耐心
作者: WaterLengend (Leeeeeeeeooooooo)   2020-09-26 10:00:00
可以請問對於這種結構性的問題,平常除了專案實戰或開源專案能夠接觸之外,有其他的練習方法嗎?
作者: nini200 (200妮妮)   2020-09-26 11:10:00
謝謝分享
作者: WaterLengend (Leeeeeeeeooooooo)   2020-09-26 12:54:00
瞭解,感謝大大。不過根據您的經驗分享跟之前的經驗比較後,感覺起來都是將問題切分明確、最小化問題、以及挑選風險最低的方法實行將問題解決,而不是動不動就要炸掉重來,把時間跟資源花在刀口上
作者: superpandal   2020-09-26 13:30:00
不給高薪只是其中一個原因重申一次 在台灣好工作真的不多年薪百萬 沒過到一年自然沒百萬 多方考量意義在這
作者: benqm300 (人生苦短)   2020-09-26 18:34:00
對阿要你翻新,但是原本的工作還是一樣要照進度完成,然後薪水不變,歡迎來到寶島台灣。
作者: neo5277 (I am an agent of chaos)   2020-09-26 18:35:00
通常是沒有邊界,因為以前沒有切得很乾淨要換一個小東西就要整個全部拆了
作者: michael0728n (蒜˙遠古)   2020-09-26 23:42:00
可以很快rollback就沒啥大問題,最慘就浪費時間而已
作者: viper9709 (阿達)   2020-09-27 00:47:00
推分享~以為這是基本+1

Links booklink

Contact Us: admin [ a t ] ucptt.com