? ? ? ? ?軟件的實現,是一個從抽象到具體的過程。在開發的過程中,經常出現這樣情況,軟件從需求到實現的過程中,中間會有多次轉述,而不同人的表達能力和理解能力是不同的,最終導致結果往往是客戶說:我要一個梯子,最后客戶得到的可能是一個秋千。
? ? ? ? 而在這個場景中,我們面對的主要困難就是沒有理解客戶的真實需求,即沒有明白客戶真正要解決的問題。在識別問題的時候,我們非常容易犯兩個錯誤:
? ? ? ?被告知要處理一個問題,結果得到一個解決方案,而不是問題本身
? ? ? 被告知要處理一個問題,直覺上就得出一個或幾個解決方案,然后考慮方案落地
? ? ? 有這么一個笑話,妻子對丈夫說:老公,把袋子里的土豆切一半下鍋。然后,男主人就把袋子里面的土豆每一個都削了一半下鍋。女主人真正的是想要做飯,給了男主人一個實現方案,男主人按照自己的理解努力執行了妻子交代的任務,結果,這可能是又一個爭吵的開端。
? ? ? ?如果相同情景發生在具體項目中的話,得到的結果可能是,每個人都做了大量的工作,每個人都認為自己做的是對的,客戶也付出了時間和精力,但是,最后的結果卻不盡人意。那當我們面對問題時,該如何識別呢:
? ? ?識別問題的主語,這是誰的問題
? ? ?識別這個一個什么樣的問題
? ? ? 實際工作中,我們需要解決的大多是別人的問題,因此,識別是誰的問題是第一步也是最重要的一步,這就相當于給問題定義了一個邊界和方向,之后我們才能識別這是一個什么樣的問題。因為方向錯了,很可能不管你花多大的精力去做,最終卻是徒勞。
? ? ? ? 那什么是問題的主體呢,如果你是一個建筑師,有個客戶找你說要建一個雞窩,首先你要理解雞窩是給誰用的??蛻粽f我:的雞窩要三層的,帶電梯,飲水池,廁所,飲水池要自動判斷水位供水,電梯要可以同時乘坐10只雞。。。滔滔不絕不覺講了一大堆,客戶要表達的意思其實是,這個雞窩是客戶用來自己住的。那既然是客戶用來自己住的,怎么會沒有臥室呢,這個就是客戶潛在需要表達的需求,就像之前的例子女主人最后做出來的菜是需要給家里人吃的。
? ? ? ?明白了問題的主體,相當于給問題添加了許多的邊界和約束,比如雞窩是要住的,土豆是要吃的。然雞窩是要住的,就少不了臥室,既然土豆是要吃的,就需要清洗和削皮。
? ? ? ? 這時候,我們才能理解真正的問題是什么,再去針對性的思考解決方案。這就帶來了其它的問題,很可能客戶提供的方案就是有問題或者有缺陷的!對于有些無法解決的問題,我們需要盡快識別,通過其他的解決方案替代或者規避,比如客戶說:我們那里有黃鼠狼,一樓就不用蓋了,之間蓋二樓和三樓。你一合計,這個方案實現不了啊,然后你給客戶建議:一樓給客戶用堅固的鋼筋架子支撐,客戶一聽,這個也比較合理。
? ? ? ?最后,我們再總結一下,識別問題,最重要的是理解兩件事情:這是誰的問題,這是什么問題。如果我們對其中任何一個問題不夠理解的時候,就需要警覺了,我們對問題的理解到位么?
文章想法的出處,推薦你也看看:http://www.infoq.com/cn/talk-arch