除非對專案已經有非常深入的了解,否則重構、重寫通常是搞垮專案的開始。
之前曾與同事討論過 ByteByteGo,一方面對於 ByteByteGo 深入淺出的系統設計科普感到佩服;一方面覺得只把最後系統設計的架構拋出來,忽略系統設計是一步步演進的結果,以及系統的演進、背景因素,導致很多工程師只要看到架構中有不符最佳實踐的地方,就想整個砍掉重練。在不了解歷史背景的狀況下,很容易翻車。
那麼既然重構不行,那該怎麼下手才好呢?在開發過多個專案後我有一套流程分享:
主要原因是直接重構而不考慮現有規格的情況下,重構往往是邁向地獄的開始。開發者想要寫出「好看」的程式碼,可能忽略掉歷史背景的程式碼。而撰寫文件、釐清現有邏輯、導入測試正是確保規格的關鍵,把這些基底都鋪好之後,重構起來才會事半功倍。
在實務上比較困難的是,如何說服上層重構是一個具有商業價值策略。就如同之前的文章提到的,大家看到的風景不一樣,而重構往往是上層無法理解且常被認為很花時間的改善。
可以從幾個方向下手:
如果第一個想法是重寫、重構,可能只是想得還不夠多而已