避免被開發廠商或平台綁死:簽約前就該評估的供應商鎖定風險
「我們想換一家廠商維護,可是原本的廠商說原始碼不能給。」「主機帳號是工程師用他自己信箱開的,他離職後聯絡不上。」「系統裡十年的客戶資料,匯出來只有一份看不懂的檔案。」這些都是被開發廠商或平台綁死的典型場景,而且幾乎都是在想離開的時候才發現。
供應商鎖定不一定來自惡意。很多時候只是當初為了趕上線、為了方便,把帳號開在廠商名下、沒約定原始碼交付、沒要求文件。日積月累,系統的關鍵環節全都不在你手上,換人的代價高到只能繼續合作。
這篇談的是事前的風險評估:在簽約前、選擇平台前,就看清楚哪些地方可能讓你被綁住。如果你已經要換廠商、正在處理實際交接,可以直接看原始碼歸屬與專案交接。以下依序說明鎖定的形成方式、原始碼與帳號、雲端與第三方服務歸屬、專有技術與資料匯出、文件,以及退場條款。
鎖定是怎麼形成的
先釐清概念:供應商鎖定指的是更換供應商的代價高到不合理,以致你在價格、服務品質、發展方向上都失去談判空間。它通常來自以下幾種來源的疊加:
- 所有權鎖定:原始碼、帳號、網域不在你名下,你沒有法律或技術上的控制權。
- 技術鎖定:系統使用某家廠商的專有框架或特定平台的專屬功能,別人接不了手或搬不走。
- 資料鎖定:資料存在對方的系統裡,匯不出來,或匯出來的格式無法在別處使用。
- 知識鎖定:系統怎麼運作、怎麼部署、有哪些例外處理,全部只存在原廠商工程師的腦袋裡。
- 合約鎖定:合約沒有退場條款,或退場時要付出不明確的代價。
這幾種鎖定往往同時存在。單看任何一項都不嚴重,但疊在一起,就會讓「換一家試試」變成不可能的選項。
原始碼與帳號:最基本也最常出事
原始碼
客製開發的系統,原始碼是你最重要的資產。簽約前要確認:
- 著作權或使用權歸屬:合約要寫清楚原始碼的權利歸誰。即使廠商保留部分通用元件的權利,業主也應取得足以自行維護、修改、交由第三方維護的授權。
- 交付方式與頻率:不要等結案才交付。比較好的做法是原始碼放在公司名下的版本庫,廠商以協作者身分開發,這樣每一天的進度都在你手上。
- 開源元件的授權:系統中使用的開源套件各有授權條件,可能影響你日後的使用方式,細節可參考開源授權基礎。
帳號
帳號比原始碼更容易被忽略,卻更難補救。原則只有一條:所有帳號都用公司的信箱、以公司的名義開立,廠商只拿到協作權限。需要盤點的帳號包括:
- 網域註冊與網域名稱解析的管理帳號
- 雲端主機或虛擬主機帳號
- App 商店的開發者帳號與簽署憑證
- 版本庫帳號
- 郵件寄送、簡訊、推播服務帳號
- 金流、物流、電子發票等串接服務的帳號
- 數據分析、廣告追蹤、搜尋引擎管理工具
每個帳號至少要有兩位公司內部的管理者,避免單一個人離職就失去控制。
雲端與第三方服務:帳單寄給誰,就是誰的
現代系統大量使用雲端服務與第三方服務。這裡的鎖定風險有兩層:
第一層是歸屬。如果雲端主機是用廠商的帳號開的、帳單由廠商代付再向你請款,那麼技術上這台主機屬於廠商。合作結束時,搬遷不只是技術問題,還牽涉到對方是否配合。雲端主機方案的選擇與管理方式,可以參考中小企業雲端主機選擇。
第二層是專屬功能的依賴。各家雲端平台都提供方便的專屬服務,用了開發會比較快,但搬到其他平台時就要改寫。這不代表不能用,而是要有意識地選擇:
- 一般性的需求(主機、資料庫、檔案儲存)盡量選用有通用替代品的服務。
- 確實需要專屬服務時,在設計上把它包在一層介面後面,日後要替換只需改一個地方。
- 在技術文件中列出系統依賴了哪些專屬服務,讓日後評估搬遷時有依據。
專有技術與資料匯出
專有框架與平台
有些開發廠商會使用自家開發的框架或後台系統來加速開發。這對開發效率有幫助,但也意味著日後只有他們最懂。評估時可以問:
- 這套框架是否有公開文件?其他工程師能不能在合理時間內上手?
- 合約結束後,業主是否仍可繼續使用這套框架?是否需要另外授權?
- 系統是用業界常見的語言與框架開發,還是高度依賴廠商自有工具?
同樣的問題也適用於低程式碼平台與 SaaS。它們能快速做出東西,但流程設定、自動化規則與資料結構往往綁在平台上。這部分的取捨可以參考低程式碼與無程式碼平台指南,以及自建系統還是用現成 SaaS。
資料匯出
資料是最難重建的東西。簽約或選平台前,要具體確認:
- 能不能完整匯出:包含所有欄位、附件、歷史紀錄與關聯,而不只是一份簡化的清單。
- 格式是否通用:例如試算表格式、通用的資料交換格式或資料庫備份,而不是只有原系統讀得懂的專屬格式。
- 誰能操作匯出:業主自己能不能隨時匯出,還是必須請廠商處理?
- 匯出後能否還原:最好實際測試一次,把匯出的資料放進另一個環境,確認能讀、能用、關聯沒有斷掉。
- 合約結束後的資料處理:對方保留多久、何時刪除、刪除前是否提供最後一次完整匯出。
定期的資料匯出也是備份策略的一部分,可以搭配網站備份與災難復原一起規劃。
文件:把知識從人身上搬到紙上
知識鎖定最隱性,因為它不會出現在任何合約或帳號清單上。系統能不能被別人接手,很大程度取決於有沒有以下文件:
- 系統架構說明:系統由哪些部分組成、彼此怎麼溝通、用了哪些外部服務。
- 建置與部署說明:怎麼從原始碼建置出可執行的系統、怎麼部署到正式環境,參考開發環境與部署流程說明。
- 環境設定清單:各種設定值與金鑰放在哪裡、由誰管理(文件中只記錄位置與負責人,不要把金鑰本身寫進去)。
- 資料結構說明:主要的資料表與欄位意義。
- 已知問題與特殊處理:哪些地方有暫時性的做法、哪些例外情況需要人工處理。
文件不必寫得很厚,但要隨著系統更新而更新。可以在合約中約定每個里程碑驗收時一併交付對應的文件,而不是結案時才補一份。
退場條款:分手的方式要在交往前談好
合作關係開始時談分手很尷尬,但這正是最容易談的時候。退場條款至少應該包含:
- 終止的條件與通知期:雙方在什麼情況下可以終止合作、要提前多久通知。
- 交接義務:終止時廠商要交付哪些東西,例如最新原始碼、所有帳號的完整權限、文件、資料匯出。
- 交接協助期:終止後一段時間內,原廠商是否提供有限度的諮詢協助給接手者,以及協助的計算方式。
- 資料處理:原廠商手上保留的資料何時刪除、如何證明已刪除。
- 費用結算:已完成未付款、已付款未完成的部分如何處理。
簽約前的鎖定風險評估表
下面這張表可以在比較廠商或平台時直接使用,每一項依「低/中/高」評估風險:
| 評估項目 | 低風險的樣子 | 高風險的樣子 |
|---|---|---|
| 原始碼 | 放在公司版本庫,隨時可存取 | 結案才交付,或不交付 |
| 帳號 | 全部在公司名下,廠商為協作者 | 由廠商或個人開立 |
| 雲端與第三方服務 | 帳單直接寄給公司 | 廠商代付再請款 |
| 技術選擇 | 業界常見語言與框架 | 高度依賴廠商自有工具 |
| 資料匯出 | 業主可自行匯出通用格式 | 需透過廠商,格式專屬 |
| 文件 | 隨里程碑交付並更新 | 沒有約定 |
| 退場條款 | 有明確交接義務與協助期 | 合約完全沒提 |
高風險的項目不一定代表不能合作,但要在簽約前提出來談,或者清楚知道自己接受了什麼。挑選廠商時還有哪些面向要比較,可以參考如何挑選軟體開發公司。
不想事後才發現被綁住,最好的時機就是簽約或選平台之前。NETVANA 的做法是原始碼放在客戶的版本庫、帳號開在客戶名下,並在專案初期就和你一起確認資料匯出與交接方式;若你手上已有合約或系統,也可以先協助檢視目前的鎖定風險。軟體服務一律採詢問報價制,歡迎與我們聯繫;開發與維護的服務範圍可在軟體服務介紹查看。
延伸閱讀:已經要換廠商、需要實際交接,看原始碼歸屬與專案交接;用現成 SaaS 還是自建,看自建系統還是用現成 SaaS;低程式碼平台的取捨,看低程式碼與無程式碼平台指南;開源套件的授權怎麼看,看開源授權基礎;挑選廠商時該問什麼,看如何挑選軟體開發公司。