一次買好、未必挺好

ATI Rage Pro

時間拉回到1997年間。

3D加速卡這東西在那時候剛問世。

當時,我要買一台新電腦,在猶豫著是否該順便買張3D顯示卡。 猶豫的原因,在於當時手邊根本沒有能用到3D功能的遊戲。 甚至那時候根本連DirectX都還沒出現,OS是完全不支援3D顯卡的。 但另一方面呢,則又想說:之後這樣的遊戲一定會出現,3D顯示卡需求也一定會普及的! 既然要買新電腦了,怎麼能不順便考慮日後這些遊戲的支援呢?

想了半天,最後選擇買了一張ATI的顯示卡。 型號是甚麼我是有點不確定,隱約記得好像是Rage Pro。 ATI在網頁上宣稱這款顯示卡日後將可支援Direct X,而且2D功能也很強。 所以看來看去,似乎是完美選擇。 不過呢,在支援3D下,那張卡免不了比當時主流規格多了好些錢。 但當時我的想法是:「既然為了日後的支援性,那多花些錢應該也是值得的!」

十年後再來回顧,當時對於3D會成為主流的判斷是正確的,確實目前每一台電腦的顯示晶片應都能支援3D加速了。 不過很遺憾的是,當時前衛式的決定,最後卻沒讓我得到甚麼好下場就是。


因為當第一款支援DirectX的遊戲出現時,我發現一個殘酷的事實。 這款顯示卡雖然「號稱」支援,但畢竟是DirectX規格確定前的設計。 等實際規格確認且真有遊戲出來時,狀況已經有變化啦。 硬體加速其實不全面,遊戲雖是可以跑,但performance實在很差,幾乎等於是跳格在跑,完全無法玩。 後來Voodoo陣營的Glide規格反變成主流。 為了要「真正能」玩3D遊戲,我後來又多花了幾乎原本那張卡一半的錢再去買了張Voodoo卡。

後來算了算。 要是一開始我只買張主流的2D顯卡,之後再加買一張Voodoo,花的錢其實跟直接衝Rage Pro的總開支將是一樣的。

你說廠商騙我嗎? 其實ATI沒騙我,因為3D遊戲確實可跑,只是一開始DirectX不成熟,硬體加速後遊戲也跑不動。 加上市場後來並不看好微軟的DirectX,而是讓Voodoo竄紅,造成後續遊戲都先支援Voodoo。 不過這些都是後見之明,沒發生之前誰會知道呢? 所以恐怕也不能完全怪廠商;真要怪,也只能怪自己買得太急太早。


後來幾次經驗下,我開始在電腦採購上發現一件事情:「也就是硬體這類東西啊,其實只要買目前主流規格或最多比目前主流規格稍微好一點點就好」。 去想「之後或許會怎麼」、或是「將來搞不好需要甚麼功能」,其實全都是庸人自擾。

那些想法除了讓自己墊高採購成本外,幾乎沒有好處。 因為等好不容易熬到能用上那硬體時,往往會愕然發現當時的主流規格其實更便宜,支援的更完整。 在情勢未明前買的,常常最後都是浪費。 (若沒能跟上3D顯示卡剛發售時代的朋友,也可以想像一下如平板電腦VS iPad、電漿電視、或是3D電視都是上演著類似的情境。)

不過,我要談的倒不是電腦硬體採購。 而是類似心態與狀況在專案上也常常發生。 很多時候大家會認為:「既然我們現在要花錢,那若我們把日後可能的用途都考慮進去,一次到位才能避免浪費。」 但這心理其實不一定是對的。 很多時候,人們為了這樣的執著,常常會把一個小專案中加入過多的附加要素。 不可收拾下,最後可能花費更巨,甚至兩頭不著。

在情勢未明下的過度投資,不完全值得

天下沒有白吃的午餐,「順便」這檔事情很多時候是不成立的。 當需求(期望價值)越過某個「臨界點」之後,成本有時候將以指數性的狀態增加。 買還不是主流的電腦硬體就是很好的例子,當過某個臨界點後,效能的提升跟付出的成本將不成正比。 如果畫成圖形示意,很可能像這樣 :

不呈線性的成本與價值關係圖

專案也是如此,「未來擴充性」若想得太過頭,很容易會掉入這陷阱。 就如前面我買3D顯示卡的例子一樣,很可能將來情勢變動下,多做(多買)的東西根本用不到。 卻可能因為這些增加,立刻得面對案子執行上技術難度增加、風險提高、成本爆量、與時間拉長等議題。

最常碰到的,是軟體開發的案子。 平常不太會未雨綢繆的人,在軟體開發時突然都會變得想的超遠。 比方說:「雖然某某事情目前我們是這樣做的,但是總覺得之後很可能會有這一百種變形。 所以,這些是否能都保留進去呢? 讓系統彈性大一些吧!」

我手邊一下找不到因為「彈性考量」造成成本增加的真實數據,但根據「人月神話」這本書的描述:一個用來解決單一問題的程式若成本是1,一旦要把它變成富有彈性的軟體產品時(由左上角往下移動)時,成本很可能將是原本的3倍。

人月神話 程式系統產品的演進

(上圖,人月神話第一章。 Sorry手邊一下只有簡體版的圖)

為何會有這麼大的差異呢? 單純加些彈性,成本不是只該多個5%-10%吧?怎麼會直接爆量3倍呢? 這是因為一個解決單純問題的程式可以把參數寫死,可以不考慮不同硬體或是User習慣的支援。 可是若要考慮「未來擴張」或「未來彈性」時,要考慮的變數就多、文件多、測試也繁瑣、考慮與其他系統橋接、可能還要考慮相容性以及使用者介面的設計。 最後將不是只多做一點點事情,而是要做很多事情。

如果日後真的確定要擴充或是大量使用(甚至販賣),那一次多投3倍或許還無可厚非。 但很多時候「未來」其實跟我當年買電腦的狀況一樣,只是個模糊的期待,那這投資通常就是該好好斟酌的了。 甚至有時候呢,若等到日後需求明確時整個重寫,成本搞不好都還比一次到位低得多。


前段時間,剛好有個朋友跟我聊他案子上的困境,也是一樣的故事。 他目前要做個POC (Proof of Concept)的案子。 可是他老闆卻交代說:「既然我們都花錢做POC了,那最好要讓結果能直接用在後面階段上」。 這不也明擺著是個表面上是從想節省成本,但最後卻必然增加成本的矛盾需求嗎?

為何我會說矛盾?

因為既然要做POC,表示目前方案的可行性是大有疑問的,有很高的可能性最後根本不實用或不能用。 就是因為有這樣的風險,所以「才要在最小成本下先測試一次。」 這是POC的原意,不是嗎?

但若又要POC,卻又堅持POC的結果得在後面能直接套用,可不就表示POC不但非成不可,而且還要讓結果夠成熟。 多了這「附帶要求」後,原本簡單的方法恐怕就將不能用了,因為簡單證明方法,通常無法把結果直接拿來後面使用。 於是呢,要不是POC的時間會拉很長,要不是投入的工作會增加很多。

但最後真的會用上嗎? 這就又是弔詭的問題了。 因為後面有太高的不確定性,之後真開案時搞不好規格又改,這些也根本用不上。 那這投資不是很不合算嗎? 徒然只是增加POC的複雜度,提升出錯的機率,造成團隊混亂,並肯定的墊高整個開發成本。


所以我這篇是要告訴大家不要未雨綢繆嗎? 那倒也不是。 做事情都不未雨綢繆,這絕對是不對的;但想太遠、過分在意「能重複使用」、「充滿彈性」、「支援未來」、「順便多加這個那個」、「甚至要百年可用」也未必就一定健康。

對未來不確定時,比目標稍微多一點點的彈性,很可能是成本最穩當的解答。

找到下圖的平衡點才是真正有價值的:

臨界點

超過這個點的彈性,常常是不具意義的。 這不管是在買電腦,或是做專案都是一樣的。 除非我們很確定目標,不然在太多不確定下想一次衝到好、可未必真的是好事喔。

 

本站所有文章未經事先書面授權,請勿任意利用、引用、轉載。