视而不见需求(By:高焕唐)
猛虎細嗅著薔薇
我一向主張軟件人員不要太偏向用戶,不要沉迷於需求之中。否則像戀愛中的人兒,一直想去問清楚對方愛不愛他,既不浪漫又沒效果。
許多人就因而批評我對需求視而不見,其實這個批評是挺貼切的,「視而不見」也有其正面的意義。舉世知名建築學家路康(Louis Khan)喜歡用“wink at”這個字,它也是視而不見的意思,其蘊含有「我在意,但我心照不宣」的意思,也如同猛虎細嗅著薔薇一般,用心呵護它(即需求)、心疼它,細細品味其完整之美。
反觀許多軟件人員,卻不太用心對待需求;經常如餓虎撲羊般切“分”和解“析”需求,好像以為把一朵薔薇分解成一堆花瓣,然後詳細紀錄之,就能產出“正確的”需求分析文檔了。
有情世界與無情世界
路康的建築之道是:
l 先將有情世界抽離開來,就分成有情世界與無情世界了。
l 然後求教於無情世界的物性(此時對有情世界視而不見),再融合有情世界的人為欲念,成就一項傑作。
將之對應到軟件產業上,用戶需求屬於有情世界,而系統本身是偏向無情世界。則軟件開發之道是:
l 先將有情世界的需求抽離開來。
l 然後求教於無情世界的軟件和諧關係(此時對需求視而不見),再融合有情世界的用戶欲為,成就一項傑出的軟件。
在金剛經裡也提到:若見諸相非相,即見如來。其中的“非相”也含有視而不見之意。當我們觀察一棵樹,看到茂密的樹葉,非相(對樹葉視而不見)之後,即能見到樹幹。同樣地,用戶需求是相,非相(對需求視而不見)之後,即能見到系統架構,然後再以美好架構支撐有情的用戶需求,融合成為傑出軟件,這就是新潮的「以架構為中心」(architecture-centric)軟件開發方法。例如,有個情境如下:
l 需求:七夕情人節快到了,需要建一座橋樑(即系統)給情人約會之用。
l 視而不見:對人們“約會”的需求細節視而不見。
l 求教於無情世界:專注於橋的形與本質,發揮美學想像力。
l 發現未知的需求:除了人所需的一般橋樑之外,更需要優先建造「喜鵲橋」給牛郎和織女相會。
l 調整專案(項目)管理:改變專案管理的優先次序,如何找到喜鵲? 如何搭成一條喜鵲橋? 這些跟原先從橋墩建起的工作程序及驗收計畫完全不一樣了。
因之,對需求視而不見只是過程,它讓人們真心善待需求,始能成就傑出的軟件。
視而不見目標,用心掌握全局
無論是體能運動或智能運動(如下棋),大家都知道唯有保持「平常心」,才能將潛能充分發揮出來。視而不見目標(即保持平常心),專注本身的潛能發揮,並兼顧全局,如此更容易達成目標。君不見,在荒野上的小獅子,肚子餓了就到處追捕兔子,愈追兔子肚子愈餓,兔子的聲音也愈來愈遠了。後來獅子媽媽就教牠:「肚子餓要躲起來,假裝睡大覺,對兔子視而不見。就會聽到兔子的聲音愈來愈近了,全局盡在掌控中,目標就在眼前。」
軟件需求是善變的目標,唯有從全局著手才能竟其功;欲掌握全局,則視而不見目標,可能是一條快捷之路。◆