TLDR
先說結論,解決這個問題的難度很高,因為這跟軟體開發的流程與成本結構有關係,不是需求方可以輕易左右的,不過如果不能改,那寫這篇文章就沒用了,雖然不修改的可能性很低,但是我們可以談談怎麼降低風險。
身為軟體開發顧問,經常遇到客戶已經花了大筆預算找外包團隊開發系統,卻在專案進行到一半時陷入需求變更的泥沼。每次改動都需要追加預算,時程也一再延宕,但開發團隊和客戶雙方都覺得自己有理:客戶認為這些都是「小改動」,開發團隊則說每個變更都會影響既有架構。
究竟問題出在哪裡?
經過多年輔導經驗,我發現癥結往往不在於溝通技巧或專案管理方法,而是在需求訂定階段就缺乏結構化的思考。許多公司在委外開發前,並不清楚自己的需求中,哪些是核心且不能輕易改動的,哪些則是可以保持彈性的。這導致在合約和規格訂定時,無法做出合理的安排。
以下我想一個實際輔導過的案例出發,說明如何透過需求結構的分析,幫助企業在系統委外時做好風險控管。
某製造業公司要開發一套生產排程系統,需求看似簡單:主要是安排生產線的工單順序,考慮交期、原料備料時間等因素。公司從過去的 Excel 表單擷取了基本規則,外包團隊也依此完成了第一版系統。
但系統上線後不到一個月,業務部門就提出了新需求:希望能在排程時多考慮「急單插單」的彈性。這個看似合理的「小改動」,實際上卻觸及了系統的核心邏輯。因為原本的排程規則是建立在固定產能規劃的基礎上,一旦要支援動態調整,不只要改變資料結構,連帶也要修改產能計算、物料需求計算等多個模組。
這個案例反映出一個常見問題:業務需求往往有其「延展性」。今天提出的需求背後,往往隱含著未來可能的變化。在這個案例中,「急單插單」背後其實反映了更根本的問題:企業需要在「生產效率」和「訂單彈性」之間取得平衡。這個平衡點會隨著市場狀況不斷調整,因此系統架構一開始就應該要能支援這種調整的可能。
這就是為什麼我總是建議客戶,在定義需求時要做「結構化」的分析。
要進行需求的結構化分析,我們需要從三個維度來思考:
業務核心原則
- 這是最底層且最穩定的部分,通常與企業營運的基本邏輯有關
- 變動這一層的成本最高,因為會影響整個系統架構
- 必須在系統設計初期就確定下來
運作規則
- 這一層定義了業務原則如何被執行
- 有一定的調整空間,但變動範圍要在合理限度內
- 需要在系統設計時預留彈性
執行中的變數
- 這是最表層且最容易變動的部分
- 通常可以通過設定或簡單的程式修改來調整
- 系統應該要提供完整的設定介面
讓我們用剛才的生產排程系統來分析:
業務核心原則:
- 產能是有限的資源,需要合理分配
- 訂單必須在交期前完成
- 物料需求必須能準確計算
運作規則:
- 排程的優先順序規則
- 產能計算的方式
- 物料需求的計算邏輯
執行參數:
- 各產線的標準產能
- 各工序的標準工時
- 安全庫存水位
從這個角度來看,「急單插單」的需求實際上不僅是增加一個功能那麼簡單。它挑戰了原本「產能是固定資源」的核心原則,改為「產能是可動態調整的資源」。這種核心原則的改變,自然會連帶影響到運作規則層的各種計算邏輯。
那麼,要如何及早發現這類可能帶來巨大影響的需求呢?在多年顧問經驗中,我觀察到一個普遍現象:企業往往認為自己的作業方式就是「產業標準做法」。當公司提出「要支援急單」這樣的需求時,也常常認為這是「業界都會這樣做」的標準功能。
但實際上,每家公司對「急單」的定義和處理方式都不盡相同:
- 有的公司是透過預留產能來處理
- 有的是透過調整其他訂單的交期
- 有的則是運用加班或外包來補足
要在專案初期就識別出這些特殊需求,我建議從三個面向來檢視:
從現成解決方案檢視
- 市面上的套裝軟體是否能完全滿足需求?
- 需要修改的部分是否過於龐大?
- 如果發現需要大量客製,那麼這些需求很可能就是公司特有的作業方式
從問題描述檢視
- 需求是否能被清楚描述出完整流程?
- 不同部門對同一流程的理解是否一致?
- 如果連需求方都很難說明白,或各部門有不同解讀,這些地方就需要更仔細的釐清
從例外處理檢視
- 正常流程之外有哪些特殊狀況?
- 這些特殊狀況發生的頻率如何?
- 例外處理往往反映了公司的特殊需求
以某電商系統為例,客戶說:「這個報價功能很簡單,就是根據數量計算單價。」但深入了解才發現:
- 不同客戶等級有不同的折扣方式
- 部分商品可以有特殊促銷規則
- 業務可以在特定條件下調整價格
- 某些商品要依據即時匯率計算
表面上是個簡單的報價功能,實際上卻包含了許多公司特有的商業邏輯。這些邏輯必須在系統設計初期就被識別出來,才能規劃適當的架構。
透過以上的分析方法,我們可以在專案初期就更清楚地分辨出:什麼是系統必須支援的核心需求,什麼是可能需要調整的彈性需求。這個認知讓我們能夠:
- 在一開始就規劃好系統的彈性邊界
- 區分出哪些是真正需要客製的部分
- 避免過度設計而增加不必要的成本
最後要強調的是:系統開發的成本,往往不在於初期開發,而在於後續的修改調整。透過更好的需求分析,我們能確保花費的每一分錢,都用在真正需要客製化的功能上,而不是反覆修改那些原本就應該要有彈性的部分。