定義好「規格」,是成功的先決條件/Seth Godin
不管是什麼工作,強迫自己或團隊寫出好的規格需求,都可以讓溝通更順暢、問題提早浮現,免得日後要花極高的成本去挽回錯誤。這一點對於複雜的系統特別重要,但只要是任何需要由人提供需求、讓系統幫你提供解決方案的工作,道理都是一樣的。
舉例來說,如果你提供給室內設計師、或是程式設計師的,是一份清晰明瞭的需求規格,回到你手上的成果符合預期的機率,就會提高很多很多。
對於室內裝修來說,最基本的規格就是一份建築圖或施工圖;雖然我們大部分人都不是這方面的專業人士,但如果能在裝修前,就盡可能將需求清楚表達給設計師,就可以減少很多溝通上的問題、讓他更容易設計出你心目中的住家。
雖然這一點對於資訊系統、或是其他複雜的系統特別重要,但只要是任何需要由你提供需求、由某個系統幫你提供解決方案的工作,道理應該都是一樣的。
而資訊系統跟室內設計不一樣的地方,在於前者的狀態是會一直變動的;無論是前一秒發生什麼事、或是下一秒想做什麼事,都會讓系統的運作難以精準預期。
扭蛋的的輸入與輸出
一般來說,規格上會定義「放什麼東西進系統」、以及「系統會產出什麼東西」;所以要定義這些,看起來並不困難:
把五個10元硬幣放進扭蛋機,然後轉動旋鈕;
然後扭蛋就會掉出來。
但如果往上一層觀察,我們要看的並不一定是「輸入」和「輸出」,而是「問題」與「解答」。
在上面的簡單例子之中,「我想要一個扭蛋」是個「問題」,「丟錢進去讓機器裡的幾十個扭蛋掉一個出來」是「解答」。
然而,如果系統的狀態會隨著上一個動作而有所改變,狀況就會變得比較複雜。
再用上面的例子來說:假設錢丟進去之後,機器裡面已經沒有扭蛋了,那麼設計者就必須創造一個機制,讓錢可以在這個狀況下退出來。
為了做到這一點,規格中還可以加上「隨時監測目前扭蛋存量」、以及「平均售出時間間隔與頻率」的功能;所以如果系統發現扭蛋快賣完了,就可以送出訊息通知公司補貨。
而這些資訊和產品,都是「輸入」和「輸出」的一部分。
你或許會注意到,這邊所說的規格並不包含「扭蛋是做什麼用的」、「一個成本多少錢」,只定義了系統的輸入和輸出內容。
作者註:當然,扭蛋是「做什麼用的」、「如何達成設計目標」、「目標顧客是誰」、「可以幫顧客解決什麼問題」都很重要。在設計一個系統時,如果讓設計者瞭解想達成的目標是什麼,成功率會更高;不過這一點讓我們留到其他文章中再討論。
使用方式不在規格中
如果能在一開始時就精確定義系統的輸出入內容,當然是最好的事情;我們甚至有時候會有意無意把「使用系統的方式/情境」都定義在規格之中。
然而這是錯的:系統存在的目的,純粹在於「解決問題」,而無論是使用方式或情境,都必須以達成這個目標為首要目的,而不是反過來,讓系統去配合我們想要的方式與情境。
有時候,甚至連「用什麼設備」來解決問題,都不是那麼急的事情;重點是要先精確定義好要解決的問題所在、開出規格,然後再操心如何設計出符合規格的系統。
來場系統模擬實驗
有機會的話,我們可以來做一個這樣的實驗。
請扮演「使用者」的小組成員一人拿一張卡片,寫下希望系統產出的結果,然後交給扮演「系統」的人;「系統」則根據卡片上的需求,來判斷該產出什麼「結果」,然後將結果寫下來、交回給使用者。
如果規格開得不好,系統就可能吐出天差地遠、無法預期、或是完全不符需求的結果。
記得,在進行實驗的前後,都必須先將「系統」的狀態歸零,手上不要有任何處理中的東西、或是對實驗內容的過多瞭解。
在這個實驗中,產生出來的所有互動內容,就是這個系統的規格。而在真實世界中,只要把規格再綁上時間、預算、績效要求等種種限制條件,然後整理出來,你就已經完成最困難的部分了。