產品經理在規劃功能時,不時會遇到「這個需求在技術上是否可行」、「產品現況的技術架構跟客戶期望的修改方式好像無法符合」等技術相關問題,但哪些是技術債要大改、哪些是技術限制只要微調,往往需要工程師協助盤點,這篇想記錄在面對技術債(Legacy Code,Technical debt)時,身為產品經理會遇到的狀況。
⠀⠀
在討論技術債時,要先將「技術債」和「技術限制」拆開說明,因為各代表著不同層級的工程問題。
技術債通常指的是「系統架構」層面的問題,例如:
相比之下,技術限制多半是「程式實作」層面的問題。例如:
⠀⠀
⠀⠀
⠀⠀
理解了上述差異後,可以再探討為什麼會產生技術債,通常來自於各種「妥協」,像是:
工程師面對產品經理的需求,為了快速開發完畢,可能會在架構上做出妥協,架構就像是房子的地基,雖然住戶(使用者)看不見、也不會影響使用者流程,但未來要考慮加功能時,終究會影響房子(系統)的擴充性。
呈上,時間壓力下,又要開發多種功能,這時可能會在某些功能的元件上進行取捨,用最快速的方式交付,讓時間投入在更關鍵的功能。
產品經理在描述功能時,可能只講了「當下」使用者的操作方式,沒有預告未來要怎麼迭代,而工程師也用可滿足現況的做法,導致未來要迭代加上新功能時,發現無法直接加上去,需要再大改架構。
產品經理在描述需求時,針對要支援、或不支援的使用情境不夠明確,為了避免過度開發,工程師可能會選擇較為寬鬆的寫法,但隨著使用者樣貌越來越多,一些特殊的操作方式就會讓程式出現異常。
⠀⠀
⠀⠀
⠀⠀
技術債通常不是任何人刻意為之,而是在各方情境下的妥協,有可能當時的時空背景完全沒問題,但過了幾年,商業場景、使用者操作模式更換後,就會讓原本正常可運作的程式變成「技術債」。
⠀⠀
作為產品經理,在軟體開發一定會遇到技術債,而我們只能選擇如何有效管理,像是:
通常技術債發現的時機,是在原有功能迭加新的機制時才會發現,因此產品經理需要與技術團隊建立有效的溝通機制,共同避免技術債:
⠀⠀
產生技術債的原因,通常是在做產品決策時,對於產品現況和未來考慮的不夠全面,因此若要避免,可以透過:
⠀⠀
上述提到的都是開發前,但有些情況是已經開發中,工程師為了加快開發速度,提出是否可用繞道(workaround)的方式進行,這時要確保:
⠀⠀
技術債大部分情況不會安排一個完整時間去進行,通常是要加新功能時,陸續修補一點,因此還會需要:
⠀⠀
⠀⠀
⠀⠀
根據我目前待過 B 端和 C 端的產品團隊,技術債是軟體開發一定會遇到的困境,通常 80% 的經驗都是發生在「早期的時空背景,原本寫法已可滿足需求;在現在新需求要加上去,就無法滿足」。
因此技術債往往需要產品經理、技術團隊共同承擔的策略議題。好的技術債管理應該:
處理技術債不是一次性的工作,而是當用戶需求越來越多變,系統就必然會經歷升級或打掉重練的過程,「拆解技術債」、「新功能開發」和「提升用戶體驗」都是軟體開發重要的一環。
市面上也有滿多文章和社群在討論「無瑕的程式碼 Clean Code」、「遺留程式 Legacy Code」、「重構 Refactoring」,這篇僅單純以產品經理的角度來分享,未來如有其他議題再陸續記錄成文章!
⠀⠀
如對這系列文章有興趣可以再觀看: