2012年1月21日 星期六

商業操弄,軟體研發人員不喜歡做的事!

Standard
在國外,許多大型軟體公司林立,老牌軟體商建立了不少現今軟體業仍在使用的遊戲規則。而比較小的軟體外包商、工作室或是個人,也糊裡糊塗依照這些大公司使用的遊戲規則走,甚至是遵守不合時宜的淺規則。然後,軟體業進入了國內,又被代工思維牽著走,軟體業因此哀嚎聲不斷。軟體研發人才不喜歡去操弄商業,卻被商業操弄著。

身為軟體外包或是軟體客製化的外包商,你是否曾遇過,客戶有很多大大小小的鎖碎要求,不定期會交代過來? 這些修修改改,看似不癢的功能和需求,做起來毫不費功夫,三兩下順手就能完成,卻往往造成雙方驗收標地的分岐,此外,不知不覺中所累積的份量,也讓結案時間遙遙無期,甚至造成軟體產生更多的問題待解決。對於只想當水電工的研發人員,總是在客戶的要求下,修完馬桶順道通水管,又補個土、也打個臘。另外,如果馬桶旁邊剛好有漏水,那你要自認倒楣了,因為客戶也會請你幫忙『順手』解決一下,或認定是你在修馬桶時弄壞的。是吧,令人難過。

難道研發人員就要這麼可憐嗎?我們做錯了什麼,為何就要這樣被對待?明明是為了提供更好服務,卻累死三軍,又讓人有把柄指著鼻子唸。更慘的是,一旦這些看似不起眼的修修改改,累積成有影響力,讓專案與合約內的需求不完全相符。客戶就有機會利用『與合約不符』的矛盾點,再殺下一城。

筆者也同是天涯淪落人,曾經不斷思考這問題也同時咒罵著台灣的業界,咒罵他們總不給軟體商有活命的空間。尤其受了委屈後,更是一股惱自命不凡,認為自己無論做什麼樣的事,都應該比一般人收取更多費用,以平心頭之恨。但過些時日後,經過冷靜思考,發現是一開始雙方的互動模式就錯了,或許更仔細檢視這個行業,才能找到改變現況的辦法。

大多數軟體開發不是演藝事業

一直不認為『軟體程式設計師』是演藝事業,所謂『台上一分鐘,台下十年功』不能完全形容軟體開發的工作。雖然,越厲害的研發人員,越能設計好品質的軟體;越是名不經傳的軟體商,也越難生存於業界。許多面向與藝人生態有些相似,但其實完全不是這個樣子。

因為我們雖練功多年,在專案過程中,卻仍然做很多沒技術性又取代性高的工作,或是『順手工作』這類連項目都寫不出來的事。所以,與演藝事業最大的不同是,我們不是只做一件事:『像巨星一樣站上台吸引全場目光,解決觀眾們長達數十分鐘的無聊時間』,而是因應專案需求,巨星仍然要下海當工讀生或工作人員,甚至是清潔工。所以,大多數軟體研發人員,其實扮演的是『跨年晚會工程的承包商』,不是巨星。許多客戶的額外零碎需求,就像有人在會場中亂扔垃圾需要被收拾,或是突然有人身體不適昏倒需要救護車送醫,這些都無法預期也無法很容易的按工計酬。

這一切,除非你有將風險成本都算在專案內,更重要的是案子也要夠大,不然相當不容易去完成工作。這也是為什麼許多比較大的軟體商,比較不受影響,因為他們接的案子也夠大,風險成本都能很輕易的被安插進總報價裡面。

因此,除了這類大型軟體商,多數中小外包商和客戶的想法,其實一開始便有了分岐。很多研發人員真的分不太清楚,自己只是當個明星,還是承包整個工程的承包商。但無論如何,客戶的心中一直很清楚認定:『承接專案的人就是整場晚會的承包商,我們不管你是不是把巨星拿來當小弟用,我們要得到的就是一個成功又圓滿的晚會』。

一切的痛苦,已經不能責怪是不是當初定需求不夠明確,也不能怪研發人員利用太多『舉手之勞』提供給客戶額外的服務。最後你會發現,想再多的方法與客戶確認需求、利用商業手段與客戶定下契約,或是出動威脅利誘的業務手法與客戶協商,都是頭痛醫頭腳痛醫腳之舉。或許先認清楚自己想要做的角色和可以做的角色,再引入適當的制度,才是突破現況的第一要務。


我們只想當水電工

說明白了,我們只想當個『軟體水電工』,有工就有酬,沒經驗的小工拿一份酬,有經驗的工頭拿雙倍酬,立即解決問題就立即收錢,然後打道回府等下一個工。至於整體工程承包,我們其實一點興趣都沒有。

只是,當水電工似乎是遙不可及的夢,因為客戶就是自己不能解決或決定,才外包找人解決,他們想要得到的是整個解決方案,而不只是工人。更重要的是,在資訊科技業中,客戶無法看到漏水就能自行判斷要找水電工,而是要先找醫生診斷病情,然後才選擇治療方案和醫療團隊。

雖然很可惜的是,大多數情況下,軟體研發人員沒辦法只當個『水電工』,但肯定有不少需求,是可以規劃成專業服務,使用水電工的收費方式,若是多加思考,應該能有些斬穫。



我們也許可以當醫生

其實仔細省閱一下醫生的工作,除了要聽取問題、診斷病情、評估可行性和提出處方,必要時要進入手術室開刀和操作儀器去治療病人,就像軟體外包在做的一般,開玩笑的說,我們也許可以稱醫生為『人體工程師』。此外,而客戶基於安心考量,多少也會自行去尋找名醫。這些種種情況,個人認為軟體研發人員其實更像個醫生。

因為像醫生,所以在簽約進行手術或治療前,我們也必需要做許多評估。但不一樣的是,無論醫生是否有治療成功,醫院總是有錢領,但軟體業則是要摸著鼻子認了。許多軟體外包商,在談案子的階段,最怕的就是不清楚技術上可行與否,或是不知自己有沒有能力達成。所以,多數軟體研發人員在面對不同案子簽約之前,就算不確定是否會得到案子,也都會先做許多評估或提前研究,甚至,必需提前偷跑才能知道可行性。

不過,面對現在科技產業客戶都追求創新的情勢,這種不確定性的程度更甚也更常見,如果案子接到了還算好,如果沒接到,這種事前研究期的資源浪費,讓更多中小軟體商非常痛苦。更還沒提到,接到案子後如果有不可預期的技術瓶頸(像是配合的硬體平台有嚴重且之前未被發現的 Bug),造成手術失敗或時間拉長的情況。真正的醫療體系或許還有保險可以支付手術費用,但在軟體業,這意味著無法結案,收不到款。

因為這樣不易收到款的制度,軟體承包商為了結案,屢見不鮮地用盡『各種手段』處理和討好客戶的需求,包括了文章開頭提到的『舉手之勞』和隨之而來的各種問題。導致其開發出來的軟體品質不佳,客戶也得不到最好的成果,常有狗尾續貂的情況發生,講的更難聽些,虎頭蛇尾會更為貼切。

可憐的是,軟體研發不是人命關天,一切在商言商,客戶們通常不願只付『掛號費』,還可能貨比三家。哪一家能『價格殺的夠低』又拍胸脯『保證全部完成』,哪一家就能搶到案子。如此惡性競爭,更加深擴大了軟體研發人員被劃開的傷口。

軟體產業沒有軟體健康保險補助,不是所有人都能夠負擔起看醫生、身體檢查和評估的費用,所以在這產業中有錢人才能夠看醫生。不然就是醫生得扛起所有風險和責任,並吸收許多成本,才能去拓展市場。

或許,要求政府有相應的保險制度不太可能,但更細的分工整合和處方制度,可能是一個可行的思路。


試圖尋求保障雙方的軟體開發模式

客戶和軟體商雙方的拉距戰,就像一個很大的槓桿,一不小心另一邊就飛上了雲端。

我們可以理解,不能完全怪罪於客戶,畢竟所有人都總是希望得到完整的解決方案、降低風險,又盡可能支付最少的錢。小客戶是預算不高要緊扣,大客戶則是怕付了錢,卻達不到目的,或是得到一堆無法使用的 01 文字。

但對於軟體研發人員來說,卻也太過不公平,只能全賠和拼命乞討二選一。

現有的各種手段都無法幫助軟體商突破現況,太多的慣例也惡習累積已久。這也是為什麼,很多以接案起家的新創公司(Startup),到五、六個人之後,開始碰到瓶頸。因為小案子已經養不起公司,中間的案子不好做,再上去就要一股作氣引進人員到數十人才能做。但人數到這麼多時,大案子的獲利也只是勉勉強強。

所以,如何想出方法,雙方保障,是不可放棄的目標。


後記

本文只是先起了個開頭,省視當前情勢。雖然對於實際執行,已經有些初步方案,有空再記錄下來,期望大家共同尋找出一個可行的制度。