王浩成
開發(fā)一款適合好用的軟件就像是建造一座美麗舒適的房屋,這需要各種資源相互協(xié)調以滿足用戶的需求。印刷商對軟件開發(fā)過程越熟悉、了解,他們就越能在使用軟件開展內部項目時運籌帷幄或者更好地向軟件供應商提出要求。
在用戶的需求與軟件將會包括的特征之間,信息傳達主要由產(chǎn)品經(jīng)理完成,當然,軟件架構師也會參與到這一過程中來。產(chǎn)品經(jīng)理首先會傾聽用戶面臨的業(yè)務挑戰(zhàn)并將這些挑戰(zhàn)轉變成軟件所具備的特征和功能。軟件架構師隨后會大展拳腳,用他們的專業(yè)知識設計出軟件的結構方案(就像是建造房屋的結構工程師一樣)。軟件架構師會確保軟件的可用性并設計與用戶體驗、數(shù)據(jù)庫以及外部系統(tǒng)的交互。
專業(yè)人員包括用戶體驗(UX)/用戶界面(UI)設計師。用戶體驗指的就是軟件的用戶如何與軟件進行相互交流。這是一項非常專業(yè)的技能。我見過的軟件項目出現(xiàn)的最大的錯誤就是由軟件開發(fā)者來作出用戶界面和用戶體驗的決策。這就好比房屋的承包商告訴你說他可以處理所有的電氣工程和水管工程,不需要聘用專業(yè)人員。軟件的用戶體驗/用戶界面是最重要的部分。之所以出現(xiàn)那么多極其難以使用的軟件,就是因為軟件的開發(fā)人員作出了有關用戶體驗/用戶界面的決策。這也就是為什么大多數(shù)軟件都需要一個解碼環(huán)才能明白如何使用。解碼環(huán)是屏幕上顯示的信息與軟件的實際操作之間的翻譯器。你有多少次聽到別人抱怨“明明寫的是X,執(zhí)行的確實Y!”為什么不能直接進行命名從而省去我們通讀手冊、文件或者經(jīng)過大量培訓的時間呢?
軟件開發(fā)過程中的勞動力就是編程人員。軟件開發(fā)人員從產(chǎn)品經(jīng)理處接到指令,然后使用這些指令開發(fā)出能夠正常運行的軟件。他們就像是建造房屋的承包商一樣。他們的工作不應該由于需要作出大量決策而延遲,這些決策已經(jīng)在方案中提前載明。承包商不應該也不需要作出有關房屋地下室天花板高度的決策。同樣地,軟件開發(fā)人員也不需要決定如何命名一個按鍵或者是否將某項功能顯示在彈出模式窗口中,或者通過嵌入在屏幕中的錯誤信息展示。用戶界面/用戶體驗設計師應該作出這類決策,原因在于他們的思考方式與用戶相同,而不是與編程人員相同(編程人員通常不會是軟件的目標受眾/市場)。
這些新知識在你接手軟件開發(fā)項目或者向軟件產(chǎn)品供應商提供反饋的時候會如何影響你?
給印刷商的建議
1.描述你所面臨的挑戰(zhàn)或者存在的問題,而不是提出有關解決方案的建議
當你的房屋出現(xiàn)漏水,你應該打電話給水管工并說:“樓上的淋浴室的水漏到正下方的爐子上了,你能過來檢查一下嗎?”,而不是說:“我認為你應該重新設計樓下到樓上的給水總管的線路”或者提出另一個解決方案。你應該用你觀察到的癥狀來描述你所面臨的問題。你的目的應該明確:我們希望家里的墻壁和天花板保持干燥。
當軟件沒有按照要求運行的時候,我們通常不是對癥狀進行描述,而是轉向其他的解決方案建議。我曾經(jīng)聽到過印刷商說:“你能不能在這個屏幕上創(chuàng)建一個能夠下載所有數(shù)據(jù)的下載按鈕?”這是一個提議的解決方案。但是我不知道你要解決什么問題。這是一個真實的例子,我來告訴你我們是怎么做的。我們并沒有編寫程序在屏幕上添加下載按鈕,因為當我們詢問該印刷商要用這些數(shù)據(jù)做什么的時候,他回答說:“我要將數(shù)據(jù)與屏幕上所有項目的圖片整合在一起,做成電子表格然后發(fā)給客戶進行審核。”因此他們想要解決的問題其實是以多種方式查看一組數(shù)據(jù)的能力:一種是表格,另一種是與圖片共同構成的網(wǎng)格。我們在屏幕上添加了多種查看方式作為解決這一挑戰(zhàn)的解決方案。點擊一處可以查看表格,點擊另一處可以查看網(wǎng)格視圖(每個項目都帶有圖片的縮略圖)。如果我們沒有詢問他們要解決的問題是什么,很可能會浪費他們的資金和我們的時間來構建一個效率很低的解決方案。
2.理解編程只是軟件開發(fā)過程的大約1/3
當需要軟件的時候,許多印刷商認為他們只需要一個軟件開發(fā)者就足夠了。而軟件開發(fā)出來之后他們又會納悶為什么軟件不能解決他們面臨的問題、難以使用并且看上去很丑。這就是你想要讓編程人員完成所有工作的結果。對于小項目來說這是可以做到的,小規(guī)模項目不需要花費大價錢開發(fā)一款功能齊備的軟件。你只需要找一位比較全能的軟件開發(fā)者就基本上可以滿足你的要求。但是如果問題嚴重或者項目規(guī)模較大,你就必須聘請專業(yè)的人員來開發(fā)軟件(尤其是用戶界面/用戶體驗設計師)。你可以將你的需求轉化成對軟件的要求并在尋找軟件開發(fā)者之前請別人設計頁面。當你把所有的方面都考慮到,軟件開發(fā)者可以很容易地給出項目估算。你不是用戶體驗/用戶界面的專業(yè)人士,任何人似乎都認為他們能夠勝任,但是你可能不行。
3.軟件的開發(fā)需要的時間要比你想象的長得多,趕工加班開發(fā)出來的軟件效果不會好
每個人都處于嚴密監(jiān)視之下??蛻舨粩鄬δ闾岢鲆螅隳茏龅闹挥凶屇愕膱F隊加班或者增加班次。軟件的開發(fā)周期難以量化或者估算,尤其是大型項目。《The Mythical Man-Month(人月神話)》就是一本關于配備更多人員加速軟件開發(fā)過程來量化軟件開發(fā)周期卻以失敗告終的書。軟件項目需要對客戶業(yè)務要求的了解,當軟件開發(fā)團隊增加新成員的時候,該團隊的速度會被暫時拖慢,因為了解客戶業(yè)務要求的成員需要向新人進行講解和介紹。這就使得軟件的開發(fā)過程非常令人失望,似乎永遠都難以達到我們的交付預期。但是這并不是軟件本身的錯誤,交付預期是由銷售代表(當你購買軟件,他們獲得傭金)、季度收益(上市公司)以及非常想讓不滿的客戶滿意的支持團隊設定的。軟件交付預期是典型的承諾過多和交付不足。如果你現(xiàn)在開始討論今年貿(mào)易展覽中將發(fā)布的產(chǎn)品(實際需要等待12個月之后才能夠開發(fā)成功),這本身就已經(jīng)是一件令人失望的事。