如何寫出受技術歡迎的需求文件
正如我們做出來的產品都希望受使用者歡迎,開發和測試是需求文件的使用者,產品經理也應該重視他們的想法和要求才能寫得令人滿意。
“寫需求文件”說專業點是把使用者(或運營、客服等)的需求轉化成技術部門的話語,因此瞭解技術術語是產品經理的基本素質。要做到需求文件受歡迎,瞭解術語是不夠的。雖然不可能寫得像開發人員寫設計文件的一樣專業,但產品經理如果能運用技術人員的思維多做些考慮,就能減少評審過程的反覆溝通,那必然能收到大量好評。
技術人員的思維同樣是被工作環境和內容訓練形成的,程式語言、架構設計、測試方法是最主要的因素。其中,開發人員會有這些思維:
- 元件與模組。
- 流程與聯絡。
- 條件與時機。
- 型別與精度。
測試也會有獨特的思維:
- 極端。
- 因果。
- 場景:一系列的組合條件。
另外,使用者體驗思維中的“層次分明、重點突出”,也非常有助於優化需求文件的視覺效果以提高閱讀效率。
我們以每種思維作為章節來回答本文的問題。
開發思維:元件與模組
我們寫文章都不是從頭到尾就一段話的,會分段落、章節,這樣能幫助做到條理清晰。程式碼的本質也是“文章”,元件和模組就像是段落和章節,他們會對應一個功能、介面或規則。為此,需求本身也應有拆分:產品有結構,功能有細分,介面分割槽塊等。
產品結構圖就像文章的目錄,在做新專案的時候應該附上。它不僅幫助產品經理自己梳理子需求,也讓整個專案組都清晰知道產品的構成,對開發、測試、UI設計師後續的工作都有指導作用。現在多數人會用思維導圖來畫,原因就是它的最大作用是理順思路。
功能細分可以用“評論”功能來舉例,它可分為:
- 前置的登入註冊等條件
- 介面上評論區的功能(比如@他人,回覆某樓層,引用回覆,表情輸入等)
- 提交前的限制條件校驗(比如字數、特殊字元)
- 提交評論的過程
- 評論的內容檢驗(比如涉黃、敏感資訊)
- 評論後的展示(比如引用回覆、互相@)
- 使用者資訊裡的評論資訊更新
如何做需求拆解是沒有固定模式的,跟業務有緊密關係,一般的兩個思路是流程和規則。
下圖是介面分割槽塊的示例(示例的意思是在原型和文件上這樣命名,這不是原型圖)

分割槽塊並進行命名的好處:
- 利於文件描述,減少說明字數,加速閱讀
- 利於溝通。大家只要說一個名字,就知道是說哪個部分,不用對著介面說。如果整個產品每個區域的名字是唯一的,那麼報bug的時候可能連操作路徑和截圖都不需要了。
- 一般來說,開發寫程式碼時也會用這些命名的(翻譯成英語),他們會很感激產品經理幫他們想好了名字。
開發思維:流程與聯絡
需求是一個整體,拆分後的各部分必然仍有聯絡,他們的協作步驟即是流程。產品的互動設計在程式碼流程上是大致對應的,所以如果產品經理能把流程描述詳盡的話,開發的工作差不多等於把這堆“中文”用程式語言翻譯一遍而已。
如果流程足夠複雜,就需要用圖來表達。畫圖是描述複雜事物的基本技巧,不僅僅是需求文件的寫作要求了,這裡不展開講。那麼怎麼才算複雜呢?一般簡單的判斷是:以最長的步驟路徑為基準,如果超過30%的步驟有分支就應該畫流程圖。例如如果有7個步驟,有3個步驟是“是非選擇”或“迴圈指向”,那就該畫;只有2個步驟有分支就不用畫,用文字說明白。延伸地講,如果分支太多,需求本身可能就有問題了,應該從互動設計上去簡化它,不應該給使用者這麼多可選擇的東西而造成困擾。
一個實際的文字描述步驟例子:
- 進入“我”頁面
- 是否已登入,是則繼續,否則進入“登入”流程
- 點選“評論”區,進入評論頁
- 如果評論數為空,顯示佔位圖,否則顯示評論列表
- 點選評論列表中的一條,進入帖子詳情頁,並且頁面自動滾動到那條評論的位置
- 使用者點右上角的“關閉”,跳回第4步,否則按“帖子詳情頁”的流程繼續
在上面的例子裡,我們也看到,流程之間會產生聯絡。一個流程中的某些步驟可以關聯到另一個流程。這些流程之間的聯絡,在開發設計中會體現為“模組間的依賴或呼叫關係”。作為產品經理無需理解前面雙引號內詞語的技術意義,但有一個很典型的場景能幫助大家認識它的作用:開發解決了一個bug後導致了別的bug;更經典的是,開發抱怨說這是因為產品的新需求沒考慮到對原有功能的影響。
無論最終是否開發的責任,產品經理也應該去梳理各個需求之間的聯絡,包括介面、互動、功能的相互影響。最好是文件中有獨立的章節列出需求間的關聯。這不僅是幫助開發測試做好設計,也是為自己檢查疏漏。拿一個普遍的需求“登入”來舉例,產品經理應該列一下所有“不登入就不能訪問的頁面”。以後改動登入功能的時候,自己也可以一下子看清所有的影響範圍。這個習慣最能防止“狀態多層次級聯”(如A影響B,B影響C)的情況下考慮不周。
開發思維:條件與時機
計算機是不會執行沒描述過的操作的,即使是火熱的人工智慧,也是要經過訓練才知道什麼條件做什麼操作。所以開發需要在程式碼中精確描述:
- 流程的入口場景,即這種“可能性”的觸發時機。
- 流程內每個步驟的執行條件。
不同的條件會導致不同的結果,這對使用者使用有重大影響,所以一定把所有的條件和可能性都列出來。一般來說,產品經理最大的疏漏是沒考慮異常情況。其實無論過程怎樣,最終反映在介面上只有4種結果:
- 載入中
- 資料正常,正常顯示
- 無資料,資料為空
- 出錯,包括超時
產品經理把這4種結果的介面都定義清楚,就能覆蓋所有中間過程的情況。當然,最好還是能把中間過程的可能性都考慮周全,並針對不同的狀況有更精細化的結果展示。
開發思維:型別與精度
這是程式語言(更確切來說是CPU計算原理)帶來的思維。我們不去深究計算機知識,只需知道對我們的影響:要用資料來描述一個事物以便計算機能理解。這些資料分兩大型別:數字與文字。其中數字還有這些考慮:
- 整數還是浮點數,即是否帶有小數部分
- 浮點數保留多少位小數部分
- 是否可能是負數
- 最大絕對值是多少(數字越大,可能會需要更多記憶體和計算時間。做適當限制有利於提高效能)
這個思維(或者說限制)會影響所有需要使用者輸入互動的地方。如果原型圖上不能明顯看出以上的資訊,產品經理應該有意識地在文件中補充。
測試思維:極端
極端的情況下容易出bug,這是最基本的測試思路。如果介面上有一個輸入框,以下幾個測試用例肯定會有:
- 輸入非常多的字元,看是否允許、是否合理顯示
- 輸入不應該允許的數值,比如超出最大最小值,看能否允許、能否繼續下一步
- 輸入不應該允許的文字型別,比如身份證號欄填入中文,看是否允許、能否繼續下一步
下面幾種測試手段,都會用到極端的思維:
- 最低配置的裝置上能否流暢執行
- 在裝置資源緊張(例如記憶體不足)的時候,程式還能否正常工作
- 在最老舊的系統、瀏覽器版本上能否正常執行
- 非常頻繁地進行操作,程式還能否正常響應
依據這個思維,產品經理應該把這些東西都定義清楚:
- 可互動介面的輸入型別與範圍
- 目標執行環境的最低配置
- 相容性:系統版本、瀏覽器品牌與版本
- 需要支撐多少使用者同時線上、多少同時發生的流量
- 要能應對什麼程度的故障
測試思維:因果
開發思維中“條件與時機”注重的是“前提”,測試還會做反向思考和補充。除了關心“什麼條件導致了這個結果”,還要思考“這個條件會導致哪些結果”,這也是開發寫程式碼容易疏忽的。兩個典型的問題是:登入後可以做什麼,介面上有哪些變化。這種思維在所有崗位都是適用的,也很容易理解,對產品經理的意義就不細說了。
測試人員不僅用它來評審需求,找bug時要考慮是什麼操作、事項、需求導致了bug以及這些東西的關聯關係、影響範圍等,從而進一步發現更多問題。
而且作為需求的實現者,技術人員都會有這個問題:為什麼要這樣做,做成了會有什麼結果。產品經理是有責任回答這個問題的。其中,“為什麼要這樣做”要心裡有數,在需求評審時被問到就要能回答。不能靠想,要有根據:
- 使用者調研
- 統計資料分析
- 市場調查
- 競品分析
- 成功經驗
還有“做成了的結果”應該把它以“目標”為第一章標題寫到需求文件的前面。目標示例:
- 解決使用者購物流程中的不便
- 給佔比有27%的喜歡xxx使用者增加一種選擇,可以對xxx進行操作
- 轉化率至少有12%
- 提升月活躍度10%(或到30%)
- 提高廣告月收入至300萬
產品經理做需求時,應該先想好這些目標,需求是圍繞這些目標來制定的。大家理解這個目標後,還能幫助產品經理想出更多更好的方案來達成。
測試思維:場景
“場景”在本文中意為多個條件共同作用的情況。下表表示的是兩個條件(行為、身份)下的結果(許可權)。
行為-身份-許可權表 | 遊客 | 普通會員 | VIP會員 |
---|---|---|---|
購物 | 不可以 | 可以 | 可以 |
看視訊 | 可以 | 可以 | 可以 |
評論中發表情 | 不可以 | 不可以 | 可以 |
設想增加一個情況:已繫結微信的會員可以檢視“朋友積分榜”。這就需要一個“行為-身份-微信繫結-許可權表”。如果有更多條件,就不是一個表格能說明的了。合格的測試人員會把這些條件的所有交叉情況都測一遍,甚至在需求評審後就要做用例設計,把需求文件沒覆蓋的情況立刻指出來。
場景的本質是條件的排列組合,可以用數學公式計算出有多少可能性。產品經理不應該把這些情況推託給技術人員去想,因為最極端的情況是可能會發現某些場景無解,以致要推翻整個需求。到評審完才發現這些問題就晚了,耽誤了太多人的時間。
當場景過於複雜,除了要說清楚規則外,還應該寫出示例來幫助理解。
使用者體驗思維:層次分明、重點突出
產品經理或設計師做網頁設計時通常會有這些原則:
- 方便從上到下閱讀,頁面不會產生橫向滾動條。
- 描述一個巨集觀事物的圖不會跨越兩屏才看完整
- 層次分明:標題比正文的顏色更深、字號更大、字形更粗。
- 段落內部的重點詞句(一般是超連結)要使用更顯眼的顏色,字形可以使用粗體、斜體、下劃線等。
無論需求文件是寫Word還是用Axure匯出網頁給技術同事看,以上原則都是適用的:幫助提升閱讀效率。
還有一個問題是表格的運用。表格能讓人一下看到哪裡有填東西哪裡是空白,但並不方便人仔細閱讀所有的內容。什麼時候用表格或列表,這裡總結兩個簡單規則:
- 表格除表頭外至少有3行3列,否則用列表。
- 如果表格寫不出精確的表頭來,也就是每行是不同意義的,用列表。
最後就是,寫需求用Word還是Axure或兩者結合,都無所謂,關鍵是要把事項描述清楚並且方便查閱。
思維應用
上述思維的運用,最終是為了提高需求的完善程度,避免需求本身有bug。產品經理要去學習技術知識的話,應該是要總結出更多的思維,而不是真的要會寫程式碼。以下按照介面和互動來總結一下技術思維的關注點。
介面元件上的應用:
- 文字框
- 過長如何顯示:換行、顯示省略號
- 如果換行和省略號都不要,就要確定文案最大字數
- 數字保留多少位小數,四捨五入還是去尾或進1
- 數字的顯示格式,例如加逗號或加單位
- 時間的顯示格式,例如是否顯示分秒,日期間用中文還是橫線連線
- 輸入框
- 預設值
- 佔位符
- 按下回車的行為
- 自動補全的規則
- 可輸入型別:純數字、文字(中文、外文、特殊字元),是否密碼
- 輸入限制:文字長度、小數位數、取值範圍、最大最小值、是否必填
- 選擇框
- 預設狀態
- 單選還是多選
- 下拉列表
- 預設值
- 實際值與顯示值的對應關係:例如介面上顯示100+,實際值是135
- 按鈕:點選後的行為
- 彈框
- 位置:螢幕中間或中下
- 顯隱動畫:時長、方式
- 表格
- 排序規則
- 開關
- 預設狀態
- 輪播
- 是否自動換頁,間隔時間
- 是否顯示分頁器(“點點”或頁碼),是否可點選分頁器來換頁
- 是否可迴圈
- 是否顯示進度條
- 是否增加每頁邊距,邊距是多少
- 圖片
- 縮放規則,例如固定寬度、高度隨原比例
- 層級:誰可以遮蓋誰
互動上的應用:
- 點選:反饋形式(例如變色)
- 手勢(例如右滑後退)
- 距離
- 速度
- 方向
- 介面切換
- 動效:時長
- 視窗、螢幕改變大小(橫豎屏切換)的佈局規則
- 已輸入的資料是否保留
- 關聯關係。例如選中後會立刻改變其它控制元件的狀態