從技術選擇到技術負債:選擇框架的隱藏成本

閱讀時間約 5 分鐘

「所以,你想要用A框架,但又覺得B框架也不錯?」David挑眉問道,一臉的疑惑和一絲不易察覺的笑意。

「呃…對啊,我知道我現在比較熟悉A框架,但我總覺得B也很有潛力,未來也許能更好。」Lisa有些無奈地說。她剛進公司沒多久,還在摸索各種技術選擇的路上。

「讓我猜猜,」David假裝思索了一下,「你是不是也有想過要不乾脆兩個都用?或是,呃...混搭一下?」

「其實…我真的有這麼想過。」Lisa尷尬地笑了笑。

「哈哈,不用太糾結,」David給了一個爽朗的笑容,語氣中帶著一點玩笑,「這些困惑啊,都是新手入職的必經之路。我當年還比你更糟呢,連三個框架都想一起用,結果搞得自己焦頭爛額。」

「所以你怎麼選的?」Lisa好奇地問。

David神秘地笑了笑,「技術選擇可不是簡單的喜好問題,它牽扯到技術轉移的成本、技術負債的累積,還有整個團隊的長期發展。先來聽聽我的想法吧。」後頓了頓,開始解釋起來。他的語氣逐漸變得正經,像是打算揭示某個深藏多年的秘密一樣。「技術的迭代,是讓系統更完善的過程。隨著技術的進步,新框架、新工具層出不窮,但選擇什麼技術,卻不是一件隨便的事。」


raw-image


技術的迭代往往被視為讓系統更完善的一個過程,這在開發者的職業生涯中屢見不鮮。隨著技術不斷更新,新的框架、工具和最佳實踐層出不窮。然而,在這一過程中,如何合理選擇技術,並考慮到「技術轉移與技術負債」所需的成本,成為了每個技術領導者和開發者必須面對的課題。這不僅影響到產品的最終交付,更關乎系統的長期可維護性和企業的競爭力。


技術轉移的成本與風險

技術轉移,無論是在一個新專案中導入新技術,還是將現有系統遷移至另一種技術堆棧,都存在著相當的風險和成本。這些風險和成本主要體現在以下幾個方面:

  1. 技術負債的累積:隨著技術的不斷更新,原本穩定運行的系統可能因為新技術的引入而變得不穩定。每次技術轉移都可能導致技術負債的累積,這些負債不僅體現在程式碼的複雜性增加,還包括對於舊系統的兼容性問題以及新技術的學習曲線。某位同事在公司內部曾經推動過一次從AngularJS到React的技術轉移,原本的系統在轉移過程中暴露出不少隱藏的技術負債,這些問題最終使得項目進度延遲了將近半年多,成本也比預期高出兩倍。
  2. 時間與人力成本的疊加:當一個團隊在面對技術轉移時,除了要理解新技術的結構和流程,還需要同時兼顧原有商業邏輯的實現。在這個過程中,學習曲線、維護成本以及系統中斷的風險都會成為需要重點考量的因素。如果我們將原有系統的重寫或大規模改動與新技術的學習成本疊加,實際上所需的時間和人力成本可能不止是「N倍」的簡單放大。這是一個非線性的增長過程,尤其是在一個持續營運的商業系統中,這種成本和風險是不可忽視的。


框架的選擇與技術的可持續性

選擇一個合適的技術框架是開發過程中的關鍵決策之一。當我們開始一個新專案時,必須要有一個長遠的眼光,從系統的持續運營和可擴展性的角度來評估技術的選擇。舉例來說,如果一開始用原生的JavaScript撰寫項目,後續要擴展到框架中進行開發,可能還有部分代碼可以沿用或改寫。但是,若是直接從一個框架跳到另一個框架,那麼這樣的轉移過程將會非常痛苦,因為這不僅僅是代碼重寫的問題,更涉及到團隊能力的再培養和商業邏輯的再實現。

某同事在前述的技術轉移中,也曾經探討過這樣的問題。在最初選擇框架時,他認為React相較於AngularJS有更好的發展前景和更活躍的社群支持,然而當時整個團隊已經對AngularJS的使用非常熟練,轉換至React意味著重新學習、重寫代碼、適應新的開發流程,這對於一個處於持續運營中的項目來說無疑是一個巨大的挑戰。最終,他們選擇保留現有框架,並逐步引入React的部分功能,從而減少了技術轉移的衝擊,維持了系統的…穩定性。但就結果來講,也只是引入了部分功能的「概念」…


技術選擇的策略:商業專案 vs. Side Project

技術選擇的策略應該根據項目的性質來做出不同的決策。在Side Project的情境下,選擇新技術進行嘗試往往是無可厚非的,這是一個鍛鍊技術能力並理解不同框架差異的好機會。然而

對於商業專案來說,技術選擇則需要更加謹慎和戰略性。商業專案的技術選擇往往不僅僅考慮技術本身的優劣,更重要的是要考慮技術的長期發展性、團隊的技術能力、以及最終對商業目標的達成度。

在這種情況下,技術的更新和轉移不僅僅是一個技術問題,更是一個商業決策問題。技術的選擇必須要服務於商業目標,如果一個框架或技術的轉換不能顯著提高系統的穩定性、可擴展性或開發效率,那麼這樣的轉換可能並不值得。除非現有的技術框架已經遇到瓶頸,無法有效擴展,否則技術轉移往往是一個風險極高的決策。


案例分析:某同事的經驗教訓

某同事曾經面對過一個類似的技術選擇困境。當時,他所在的團隊已經基於一個特定的框架(AngularJS)構建了大量的業務邏輯和前端頁面。隨著React在業界的崛起,他們也考慮過是否應該轉移到React,以期望在未來的開發中獲得更多的靈活性和更強的社群支持。然而,在評估了技術轉移的成本、學習曲線、現有系統的技術負債以及商業邏輯的兼容性後,他們最終決定保持現有的技術框架,同時在新功能的開發中引入React 部分的開發概念,以逐步過渡,這樣既保持了系統的穩定性,又在技術層面上獲得了創新。

這個案例說明了技術選擇與技術轉移的複雜性。在商業專案中,選擇一個框架或技術堆棧不僅僅是因為它『更好』或『更流行』,而是要考慮它是否適合當前的商業需求和技術能力,是否能夠在合理的成本和風險下達成既定的商業目標。


技術選擇的平衡藝術

技術選擇和技術轉移是一門需要平衡的藝術。它涉及到對技術本身的理解、對商業目標的清晰認知以及對團隊能力和長期維護性的深刻思考。無論是面對新技術的引入,還是考慮現有系統的技術轉移,都需要在短期效益和長期影響之間找到最佳的平衡點。

對於商業專案來說,技術選擇必須考慮技術轉移的成本、學習曲線、系統穩定性和長期維護性。在技術轉移的過程中,應該做好充分的準備,包括系統的評估、技術可行性分析以及對轉移過程中可能遇到的風險的預估。只有這樣,才能確保技術轉移不會成為技術負債的來源,反而能夠為系統的長期發展注入新的活力。

最終,技術的迭代應該是為了讓系統更加完善,而非累積新的問題。因此,在技術選擇的過程中,時刻保持對長期可維護性和系統穩定性的關注,是每一個技術領導者和開發者應該具備的基本素質。希望這樣的經驗能夠為我們在未來的技術選擇中提供一些參考和啟發。

技術負債是可以接受的,但你必須要還清它,否則它會積累並最終拖垮你的專案。 Martin Fowler - 重構|改善既有程式的設計




後記:

故事中的某同事,最後真的使用React 已經是在另外一個專案上面了…

這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,作者都用幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
發表第一個留言支持創作者!
追求乾淨的程式碼是好的開始,但不要陷入過度設計的陷阱,導致程式難以維護。實際上,考慮團隊狀況和專注於解決真正的問題更為重要。了解公司的規模和現實情況,適時調整工作重心。技術不斷進步,使得寫程式變得更加容易,但這並不意味著工程師的角色會消失。在選擇技術時,也要考慮隱形成本有時簡單的解決方案反而更有效。
追求乾淨的程式碼是好的開始,但不要陷入過度設計的陷阱,導致程式難以維護。實際上,考慮團隊狀況和專注於解決真正的問題更為重要。了解公司的規模和現實情況,適時調整工作重心。技術不斷進步,使得寫程式變得更加容易,但這並不意味著工程師的角色會消失。在選擇技術時,也要考慮隱形成本有時簡單的解決方案反而更有效。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在今日這個變動快速的時代,似乎每個人都有學習焦慮。許多人加入了大量的線下、線上課程,買了不同領域的書籍,但學習到的知識到底怎樣能為人生加成?我們又到底要怎樣學到知識的內涵,進而內化成我們的工具與服務產品,讓我們為自己創造更多價值呢?
將創新融入至網站用戶體驗上 隨着AI技術的不斷成熟,其在網頁設計領域的應用日益廣泛。設計師可以藉助AI生成的圖像快速搭建網頁框架,這不僅極大地縮短設計周期,還提供前所未有的創意靈感。 透過AI技術不僅能對色彩、字體進行智能優化,還能對文案進行潤色,使設計作品更加完善。更重要的是,AI能夠根據用戶
Thumbnail
最近觀察到許多網站有一個特性,就是有些網站會使用不同的模板做同一個關鍵字。 很多開發者在做產品的時候會有一個特性,就是會使用相同的模板。使用相同模板的好處不外乎是減少重複開發的時間、快速上站。 因為其實在程式開發中有很多功能可能是相似甚至是重複的。在這種情況下我們不應該重複去開發相同功能,而
Thumbnail
親愛的讀者 感謝你提出這個富有挑戰性且極具時代感的問題。程式設計,這門技術宛如一把打開數位世界的鑰匙,讓人得以探索無限的可能性。在這個科技日新月異的時代,程式設計的魅力不僅僅在於其實用性,還在於它能夠改變我們看待問題和解決問題的方式。 然而,你提問的核心不僅是程式設計本身,而是它是否能成為你
Thumbnail
今天接觸到兩個重點方向,我覺得每個人都可以去嘗試思考,也是我最近在試著去了解更深的主軸: ①提升思維、善用AI工具。 包括接觸商業和產品知識,再用工具加速、更有效達標。 ②自媒體——讓人認識你。 如果要做自媒體,可以先思考目的,比如我的目標是寫作出書,就不需要花太多時間分享生活娛
建構在我的突破上面 即將轉職的下一份工作 是我以前不想做的 一直拒絕的類型 以前的我認為我不適合
有時候 即使知道有更好的做法 我也不一定會第一時間說出來 反而會先選擇陪伴 那不是種冷漠 是尊重 每個人都應該獲得 充分探索自己周遭世界的權利跟時間 都只有一次的人生 為什麼要剝奪別人的體驗感 有些人只是喜歡花多一點時間慢慢走 走自己的路 只為了行事方便 把本來可以有的自由
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 八、軟體公司的前端工程師之路 新公司不是做網頁專案的,而是自己研發資安軟體的公司,主要只有一個大專案,跟很多客製化的需求。 我在這次轉職時有考慮到,我其實不太喜歡一個案子做完就結束的感覺,因為那會讓我覺得這些作品做完好像也不是我的東西..
Thumbnail
最近加入了這個有趣的地方 ,收到了系統關切 ,怎麼還沒看到你的創作 文字,是人們用來溝通交流的工具。 常常會很佩服能把文字依照自己想法,打成一大串文章的創作者。 總是想像,能一直不斷的創作文章,以此維生的人,到底是如何文思泉湧的。 也許真的需要不斷的大量閱讀,才能有更多的文字素材可以隨時讓大
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在今日這個變動快速的時代,似乎每個人都有學習焦慮。許多人加入了大量的線下、線上課程,買了不同領域的書籍,但學習到的知識到底怎樣能為人生加成?我們又到底要怎樣學到知識的內涵,進而內化成我們的工具與服務產品,讓我們為自己創造更多價值呢?
將創新融入至網站用戶體驗上 隨着AI技術的不斷成熟,其在網頁設計領域的應用日益廣泛。設計師可以藉助AI生成的圖像快速搭建網頁框架,這不僅極大地縮短設計周期,還提供前所未有的創意靈感。 透過AI技術不僅能對色彩、字體進行智能優化,還能對文案進行潤色,使設計作品更加完善。更重要的是,AI能夠根據用戶
Thumbnail
最近觀察到許多網站有一個特性,就是有些網站會使用不同的模板做同一個關鍵字。 很多開發者在做產品的時候會有一個特性,就是會使用相同的模板。使用相同模板的好處不外乎是減少重複開發的時間、快速上站。 因為其實在程式開發中有很多功能可能是相似甚至是重複的。在這種情況下我們不應該重複去開發相同功能,而
Thumbnail
親愛的讀者 感謝你提出這個富有挑戰性且極具時代感的問題。程式設計,這門技術宛如一把打開數位世界的鑰匙,讓人得以探索無限的可能性。在這個科技日新月異的時代,程式設計的魅力不僅僅在於其實用性,還在於它能夠改變我們看待問題和解決問題的方式。 然而,你提問的核心不僅是程式設計本身,而是它是否能成為你
Thumbnail
今天接觸到兩個重點方向,我覺得每個人都可以去嘗試思考,也是我最近在試著去了解更深的主軸: ①提升思維、善用AI工具。 包括接觸商業和產品知識,再用工具加速、更有效達標。 ②自媒體——讓人認識你。 如果要做自媒體,可以先思考目的,比如我的目標是寫作出書,就不需要花太多時間分享生活娛
建構在我的突破上面 即將轉職的下一份工作 是我以前不想做的 一直拒絕的類型 以前的我認為我不適合
有時候 即使知道有更好的做法 我也不一定會第一時間說出來 反而會先選擇陪伴 那不是種冷漠 是尊重 每個人都應該獲得 充分探索自己周遭世界的權利跟時間 都只有一次的人生 為什麼要剝奪別人的體驗感 有些人只是喜歡花多一點時間慢慢走 走自己的路 只為了行事方便 把本來可以有的自由
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 八、軟體公司的前端工程師之路 新公司不是做網頁專案的,而是自己研發資安軟體的公司,主要只有一個大專案,跟很多客製化的需求。 我在這次轉職時有考慮到,我其實不太喜歡一個案子做完就結束的感覺,因為那會讓我覺得這些作品做完好像也不是我的東西..
Thumbnail
最近加入了這個有趣的地方 ,收到了系統關切 ,怎麼還沒看到你的創作 文字,是人們用來溝通交流的工具。 常常會很佩服能把文字依照自己想法,打成一大串文章的創作者。 總是想像,能一直不斷的創作文章,以此維生的人,到底是如何文思泉湧的。 也許真的需要不斷的大量閱讀,才能有更多的文字素材可以隨時讓大