假如現在你有一些不錯的想法,雇用了一個工程師把想法實體化,
隨著時間過去,你發現有一些項目需要調整、功能範圍慢慢擴大,
最後這個專案一發不可收拾,一步步吞噬你的生活。
為什麼會這樣?
不一定是因為工程師不夠專業、也不一定是因為你對專案管理一竅不通、亦或是這個想法就是糟糕 ;
其實都是因為一些小小的誤會,讓專案在一開始就注定了最終的毀滅:
我們會以為產品是由一些功能所組成,
這些功能中有一些被否決,或是有其他功能加入,
所有的功能在白紙上清清楚楚 ;
其實這樣的想法是錯誤的,
你的專案不是一張白紙就能一目瞭然,它是有深度的。
線上圖書館終結實體圖書館
來看一些具體的例子,
這是一個新的專案想法:
很多人常常需要圖書館中沒有的書籍,當有人可能擁有這本書時,
需求者透過 app 發出請求,對方就會回應,而我們從每筆交易中抽取一些利潤。
功能列表非常簡單:
把產品規格傳給工程師後,幫這個 app 想一些殺手級的名字。
kaBooki?lib.rari.ly?hubsoda?
已經有人用了 hubsoda 這個名字了。
那我們可以思考一些需要解決的問題...
Q:
用戶要怎麼付款?
直接面交付現嗎?還是通過 app 付款?
A: 他們應該透過 app 信用卡付款,這樣我們才能從中收取費用。
Q:
用戶如何找書?
他們在 app 上需要做什麼樣的動作找書?
填寫書名和作者的表格嗎?
A: 他們應該用搜尋的方式找到書籍。
...所以我們需要一個書籍數據庫。
Q:
書籍的需求有哪一些?書商看得到所有書籍的列表嗎?
或者,我們和 Uber or Thumbtack 一樣向賣家發送通知呢?
A: 我們向有這本書的人發出請求
Q:
那麼,賣家需要把所有的書籍都放到 app 上嗎?
A: 嗯,沒錯。
Q:
怎麼運送這本書?用戶自己寄出,還是我們來處理?
A: 我們來處理。
Q:
所以你需要一個系統,告訴你需要拿取的書籍和目的地?
A: 不要好了,讓用戶將書寄給對方。
Q:
我們傳送收件人的地址給送件人嗎?如何處理運費?
A: 這些用戶必須住得很近。拿到書後,順便交一個新朋友?
Q:
所以,我們需要配對附近的用戶。
他們如何找到對方?app 上有即時的地圖可以安排見面嗎?
我們設定書的價格?還是他們自己討論價格?
A: 他們自己決定價格。
Q:
他們怎麼決定?app 上需要有聊天室嗎?
A: 他們可以打電話聯絡。
Q:
我們需要用簡訊驗證該號碼嗎?
這些問題會無限的延伸下去...
讓我們來看看功能列表現在的樣子:
列表中的每一個功能都可以再繼續延伸。
讓我們來釐清功能爆炸的原因...
這不是一般我們稱的特徵蔓延(feature creep)
最終功能列表裡的每個項目都是為了支持一開始的想法,
而不是將新功能不斷添加到產品之中。
跟技術上的考量無關。
這跟哪一些付款平台可以簡單融入 app 中沒有關係。
工程師可以建議你該用哪些技術,但是他無法決定你需要什麼功能。
也和市場上的考量無關。
你還在想會有人要用這個產品嗎?
實際上這些問題都只是用來驗證你的想法、
確定產品適不適合市場、還有了解定價策略,
沒辦法告訴你功能列表為什麼會多到爆炸。
我們都誤解了複雜性該怎麼運作。
我們以為每個功能和一開始描述的 “線上圖書館範例” 一樣複雜,
但這個觀點是錯誤的。
App 裡的功能就像地圖
越近看,就發現越多細節。
當我們建立或是在使用一個 app 時,規模還很小 ;
一個完整的 app 是需要經過一步步的試驗,
每一個階段你會發現一些問題,
接著你必須重新設計、加入新的步驟,或是加入新的功能。
就像你在規劃路線,在地圖上看起來是一條直線,
如果考慮到細小的部分,你會發現這條直線上還有幾個轉彎的街區和紅綠燈 ;
不同的通勤方式,路線又會不同。
建構一個軟體的時候也是一樣,
放大看後,你才會知道解決的方法。
那這樣我的產品會不會沒有完成的一天?
我們的目標是敘述功能,它通常都很複雜。
為了這個目標我們仔細看過每一個步驟,
越仔細看就會發現更多的問題。
複雜不是主要的問題,問題是我們要怎麼發現這些功能上的問題,
我們把產品規格交給工程師,一週後我們拿到初版的成果。
第一次使用的時候,我們一步步走過整個程序,發現了巨大的漏洞、
紀錄需要修改的地方,接著給工程師建構第二個版本。
經過幾次這樣的過程後,我們有了很好的解決辦法 ;
麻煩的地方在於往返的週期太長,每一個循環都為期數週或好幾個月。
這種複雜的流程是有必要的,
但是不停在工程師身邊周旋很耗時、成本又相當昂貴。
我們應該這麼做:
在我們編寫一長串的程式之前就要盡可能發現 app 中更多複雜的地方。
我希望利用最快又低成本的方式,一步一步建立更強大的功能列表,
我們寧願在規格上反覆修改,也不要在整個 app 的修改上花太多時間。
千萬不要走以下的流程:
而是走這樣的流程:
要有效的走過整個流程,我們需要兩件事。
第一,呈現功能列表,才可以重複過程。
第二,有效審問已建立的功能列表。
那麼我們怎麼做到呢?
將功能繪製出來
不要用商業的角度思考,以使用者的角度去思考。
1
首先,列出用戶目標,使用者在使用這個 app 的目的是什麼?
2
接下來,繪製出使用者的流程。
走過使用者達到這個目標前的每一個步驟,將它記錄下來。
3
你可以繪製 mockups ,紀錄使用者瀏覽的每一個介面,
也可以用一張紙或軟體繪製流程圖。
不管用哪一種方式,記得你的速度一定要快!
每一個介面都要在大綱上。
假如有一個步驟會出現在不同的介面上,就要據實的將它們一一分散畫出來,
我們需要更多細節!
光是這個過程就可以把 app 上零碎複雜的小東西都浮出檯面。
接下來我們來深入了解一些問題:
質疑所有的東西
像上面提到的問題比較偏向開放式的結果,我們很難知道要從哪裡開始。
這裡列出了適用於大多數軟體的常見問題列表 ;
問題分為四大類,讓你從大綱裡挑出問題。
看大綱中每一個步驟,套用列表中的問題,
如果這些問題可以延伸出新的步驟,把它添加在大綱上。
列表如下:
1. 用戶輸入
這些問題涉及範圍從用戶到產品。
開放式例子:自由輸入文字的形式、選擇要上傳的圖片、錄製影片。
互動式例子:將文字輸入到搜尋欄、顯示可以選擇的結果、在地圖上選擇地址、從預定選項中挑選。
2. 呈現給用戶的訊息
3. 使用體驗之間的交流
這些問題是關於用戶、產品、其他服務之間如何互相交流。
4. 企業所有者需要的功能
企業主需要從產品中獲得什麼。
全部整合在一起
建構大綱和審問的過程讓你知道 app 中少了什麼東西。
重複這個過程幾次,你就會有信心可以獲得一個非常穩定的功能列表。
聽起來很複雜吧?但你在某個工作階段上一定會碰到這些問題。
軟體的功能隱藏著很多複雜性,找出來,然後解決它們!
你現在有兩個選擇:
第一、發現用戶目標,建構模型或流程圖、質疑自己的假設,一步步揭開所有的問題。
第二、讓工程師開始建構你的app,每一個問題都花費一週的時間。
幾個月後,你會發現你可以用鉛筆和紙在一周內發現完全相同的東西。
找出每一個功能、建立大綱、並質疑你的假設。
快速的發現大部分問題,節省自己的壓力和痛苦,
將你的產品公諸於世,期待美麗的收穫吧!