GPS與軟體流程
如果我們把做專案想做是自己開車出去走走,那麼GPS路徑導航就是我們的軟體流程。GPS 可以確保我們不迷路,但我若永遠照著GPS的指示來走,每天晚上七點鐘,鐵定會塞在高架上動彈不得。
兩年前,我買了輛新車。買車之後,全家人多開心哪!可以上山下海到處玩了!但沒想到,才交車第一次出門,就發現一個我不願承認的事實:我竟然是個路痴!
原來,我當捷運族的時間太久,對於台北市道路的認識僅停留在忠孝仁愛那幾條大馬路;可是這幾年下來,台北少了幾座橋,卻多了一堆快速道路,都是我沒走過、不認識的路!所以我開著新車第一次上路,就花了一堆時間在找路、迷路、繞遠路…
很多男人都無法忍受被人笑是路痴,包括我也是。於是,我就去敗了台GPS回來。有GPS實在太方便了!只要輸入我要去的地點,按下路徑導航,它就會隨時提醒我,哪裡要轉彎,哪裡要上高架橋,真是太棒了,我又認識路了!
當然,用GPS還是會遇到麻煩。我那台GPS,就只有一般的路徑導航,它不會告訴我,哪裡有交通管制,哪裡車多路難走,更不會告訴我哪個路段在哪個時間根本是個不該進入的災區。
怎麼辦呢?
就問問同事:「你上班都怎麼走?」
也問問鄰居:「回家除了╳╳路還可以怎麼走?」
更可以問問計程車司機:「先生先生,請問到○○有什麼路比較好走呀?」
於是乎,靠著GPS以及一次次的練習,沒多久,常去的地方像是公司、大賣場,我都摸清楚平常可以怎麼走,遇到路況又可以怎麼走,不用靠GPS我也能在台北存活了。
如果我們把做專案想做是自己開車出去走走,那麼GPS路徑導航就是我們的軟體流程。GPS一面告訴你:你在什麼位置,又一面告訴你:你該往哪兒去。軟體流程也是這樣,流程它就像GPS事先規劃好的路線,告訴你可以怎麼走,以確保你在軟體開發的旅途上,不會迷了路。
「喲哪桑,既然軟體流程是這麼好的東西,那麼我們把它訂為標準,全部的人都要照著做,是不是專案的風險就可以降低了呢?」
我無法保證,標準的軟體開發流程是否必能降低風險,但我卻可以告訴你,宣布一個流程做為共同標準就產生了另一個風險:不准走捷徑的風險。
軟體流程的確是個立意良善的好東西,它是教我們把軟體開發工作做好的方法,而能夠流傳到今天的這些方法論,也都是經過許多軟體業的先賢先烈們,拋頭顱灑熱血,用許多成功與失敗的專案來證明,這些方法過去的成就。
不過,軟體流程的問題也出在這兒。我們今天所見的各式方法論,都是些「一般來說」不讓我們迷路的好方法,卻未必能百分之百地切合我們的專案、我們所在的軟體組織,尤其我們也都知道,每個專案都有其獨特的地方,一套大師推薦的軟體流程,或許NASA設計太空梭時它成功過,也許IBM設計Mainframe作業系統時它成功過,我們拿來奉為圭臬,強迫大家使用,就一定合適、一定保證成功嗎?
也許,專案還是做的完。雖說殺雞焉用牛刀,但小雞還是會死,只是死的很難看。標準流程最大的風險,還是讓我們失去了思考新方法的機會;不思考新方法,也就不會找到更適合我們的方法 – 也就是我們自己的「捷徑」。也就好比我若永遠照著GPS的指示來走,每天晚上七點鐘,我鐵定會塞在建國高架上動彈不得。
「喲哪桑,所以你的意思,就是那些軟體流程,不管是Waterfall、Spiral、又或者ISO、SW-CMM還是CMMI,那些規矩或公司政策,我們都一概不理,只走自己的『捷徑』,是不是呢?」
總有天生不愛受約束的工程師會這樣問我。但我的答案是:錯!
捷徑在字面上的意思,是比較快的路,絕對不會是讓你到不了目的地的路。如果我們不熟悉自己的工作與現有的流程,就一昧地亂嘗試想抄近路,付出的代價可能是專案的成本、產品的品質,自以為省下了眼前的時間,你的軟體專案卻可能永遠到不了目的地。
因此,我想給所有不愛遵循流程的程式設計者們一個建議:先試著執行你組織中的軟體流程以完成幾項工作,在執行流程時別忘了問自己:
「為什麼這流程要這樣走?」
「這樣走適合這個產品、這個專案嗎?」
「如果我重新來過,怎麼走可以讓我做的更快更好呢?」
將這些想法付諸實現,把自己的軟體流程愈修愈好,這才是優秀的軟體開發者會做的事。