后臺產品設計系列:產品設計方式(二)

29 評論 50081 瀏覽 391 收藏 16 分鐘

上篇《后臺產品設計系列:認識后臺》,筆者對后臺(系統)產品做了簡單的介紹,讓大家有一個初步認識。本篇文章,將以視頻產品后臺為例,介紹簡單系統和復雜系統的不同需求設計方式。

產品舉例:如果我們要做一個芒果TV后臺管理系統,簡單的方式和復雜的方式分別怎么來做呢?

一、簡單系統設計方式——需求驅動設計

針對簡單的后臺產品,我們通常采用需求驅動設計(Request-driven design,以下簡稱RDD)。

1、概念

所謂需求驅動設計,是指我們在設計后臺時,根據上級、運營、市場、客服、前端產品等需求方所提的具體需求,直接進行產品架構、功能設計。這種設計方式簡單快捷,與我們做前端產品思路、方式相同,對于很多做前端產品的同學而言,這種方式是最容易理解和掌握。

2、設計流程

3、流程拆解

(1)明確目標

任何一個產品的萌芽,往往是因為一句話,一個問題,或領導的一個idea,而這些起因,就是我們的產品目標,這些目標有時很模糊,但對于系統產品,這個目標都是很明確的,明確的業務場景下,XX用戶產生的明確需求。例如我們要做芒果TV,分別有APP、web、PC、TV四個端,就需要有一個統一的管理后臺,對前端進行支撐,運營人員能夠對內容進行維護。

(2)需求分析

明確了方向,接下來就需要做需求調研。

第一步:窮舉用戶角色

進行需求調研時,需要先找用戶角色,再找需求。

清晰地列出使用此系統的用戶角色,以用戶角色為劃分維度進行調研。因為后臺產品不同于前端,不同的用戶角色需求差異很大,甚至風馬牛不相及,而每種角色對應的用戶都是這個系統的目標用戶,并不存在所謂的核心用戶和潛在用戶一說,這些用戶都是重要的,都需要滿足他們的需求。例如,使用芒果TV后臺管理系統角色包括運營、產品經理、公司管理者、審核員。

第二步:需求調研

調研方式——深度訪談

與前端產品不同,后臺產品的用戶在現實生活中離我們很近,很容易就能接觸到,這個時候就不要用調查問卷這種大覆蓋面的方式了,一是用戶基數沒有那么大,二是后臺需求基本不需要做定量分析,無需通過這種方式去挖掘需求。所以直接與用戶交流、訪談是最快速有效的方式;

調研對象——關鍵人

我們的訪談對象,需要盡可能滿足資深、直接使用、有話語權三個條件,因為這種關鍵人所提出的需求會更加全面、具體且有深度,能夠清楚的解釋為什么要有這個功能,如果沒有會出現什么后果,還能巴拉巴拉一堆歷史故事,這種用戶就是完美的訪談對象。這些被傷害過的人,知道心痛的滋味;

第三步:建立需求池

根據訪談內容,建立需求池。例如,在對運營、產品經理、公司管理者、審核員訪談后,建立了以下表格

(3)結構設計

將調研后的需求進行初步篩選過濾后,需要根據確定、高優先級的需求,歸納這一期后臺所需實現的功能模塊。

做功能模塊劃分,需要秉持一個重要原則:一個角色,一個模塊,完成一件事。也就是一個具體的角色,能夠在一個功能模塊中完成他想完成的任務。原因主要是以下兩點:

  1. 降低用戶記憶成本,提升操作體驗。你絕對不想為了做一件事,要在多個模塊跳轉、多個頁面點擊吧,這個看起來對前端產品再正常不過的要求,后臺經常沒有達到;
  2. 便于權限區分。做系統產品,權限劃分永遠是重點關心的,將一個角色要進行的操作單獨作為一個模塊或模塊下的子欄目,方便做權限設置;

同樣,劃分模塊后進行欄目劃分,然后按照操作流程,從上至下排列,就能得到以下產品結構圖:

至此,簡單系統的產品需求設計階段就告一段落了,后續步驟,且看下回分解。但既然說這種方式只適用于Easy模式,那一定是有原因的。

4、不足

這種設計方式,用開發的行話說,是一種面向過程的設計方式。這種方式有一個專有名詞——貧血模型。

貧血模型有以下幾大致命缺點:

  1. 創建的對象不準確,直接影響產品和開發對業務的正確把握和擴展;
  2. 業務邏輯分散,業務難以復用;
  3. 業務間耦合度高,迭代及維護成本極高;
  4. 名詞定義不一致,開發與業務出現溝通問題。

二、復雜系統設計方式——領域驅動設計

為了解決上述問題,同時應對復雜的系統產品,就需采用領域驅動設計(Domain-driven design,以下簡稱DDD)模式。

1、概念

領域驅動設計,是指在一個具體的領域中,一種面向對象的設計方式。例如,我們要做一個更大的芒果TV后臺管理系統,以滿足更多角色的更多需求,那么這個系統就屬于一個具體的領域——視頻娛樂領域。在這個領域中,包含影片、演員、訂單等對象,這些對象就是我們要面向的設計目標,而非直接根據需求做設計。

2、流程

3、流程拆解

在這種方式的流程中,增加了“建立領域模型”和“系統劃分”兩個環節,其他環節與RDD相同,就不再贅述,現針對新增的兩個環節做說明。

(1)建立領域模型

此處的領域模型,是一種簡化后的E-R圖。E-R圖是后臺開發在數據庫設計中通常會用到的一種模型,用來表示實際業務中各個實體及其關聯關系,核心三要素是實體、聯系、屬性。如下圖中,長方形體現的就是實體,也就是實際業務中的各個概念;橢圓形體現的是實體包含的屬性,類似概念下的各個字段,菱形體現的是實體間的關系。


當在需求設計階段時,并不需要像做數據庫設計那么復雜的模型,我們需要創建的領域模型,就是要根據實際業務,展現全部的實體及其關聯關系,無需屬性,避免在規劃階段陷入過深的細節。

第一步:與領域專家一起,梳理實體

領域專家,是指對這個領域非常熟悉的人,可以是業務人員、老板、產品經理等任何角色。這個專家對領域內的各種業務場景和各種業務規則非常清楚,有能力表達出系統該做成什么樣子,有哪些核心業務關注點。

在本文的例子中,我們梳理的實體包括用戶、影片、欄目、推薦位、演員、導演、訂單、運營活動等,在這些實體概念里,就是一個個的具體對象,例如演員里有劉亦菲、劉德華。每個實體要求能用文字精確的、沒有歧義的描述其涵義以及包含的主要信息,同時每個實體定義要完全獨立,概念上不能有交叉或模糊的界線。

第二步:梳理關聯關系

確定了實體,就需要建立實體的聯系,標識實體間的對應關系。

實體聯系:

  • 直接關聯:實體間直接關聯,在系統中需手動建立聯系的實體;
  • 間接關聯:根據實體圖,能夠通過間接關系找到唯一對應實體。通過間接關聯關系,往往可以通過多條路徑找到同一具體實體,如果出現不同路徑找到不同目標,那就需要重新檢查關聯關系是否正確;

對應關系:

  • 1對1(1:1):1對1關系是指對于實體A與實體B,A中對象至多與B中一個對象有關系;反之,在實體B中的每個對象至多與實體A中一個對象有關系;
  • 1對多(1:N):1對多關系是指實體A與實體B中至少有N(N>0)個對象有關系;并且實體B中每一個對象至多與實體A中一個對象有關系;
  • 多對多(M:N):多對多關系是指實體A中的每一個對象與實體B中至少有M(M>0)個對象有關系,并且實體B中的每一個對象與實體A中的至少N(N>0)個對象有關系。

關聯建立原則:

  1. 關聯盡量少。實體間的復雜的關聯容易形成實體關系網,這樣對于我們理解和維護單個實體很不利,同時也很難劃分實體與實體之間的邊界;
  2. 化繁為簡。在建立關聯時,需要挖掘關聯關系的限制條件,如果存在,那么最好把這個限制條件加到這個關聯上,往往這樣的限制條件能將關聯化繁為簡,即可以將多對多簡化為1對多,或將1對多簡化為1對1;

第三步:走查場景,修改領域模型

  1. 關聯關系、對應關系是否正確?
  2. 分析關聯,通過對業務的更深入分析,明確關聯的方向或者去掉一些不需要的關聯;
  3. 這些實體及關聯關系能否全部覆蓋這些業務場景?

(2)系統劃分

為了解決在方法一中遇到的問題,需要采用微服務的思想,根據實體間的聯系強弱,以實體為對象,劃分到不同系統中。

將每個系統獨立開(解耦),系統與系統間通過接口調用數據,公共模塊單獨作為一個系統(如此處用戶管理系統),每個系統都有各自的三層結構(詳見上篇)。

三、兩種設計方式總結

介紹完兩種不同的需求設計方式,再來看這兩種方式的聯系。

1、如何選取

這個圖表示隨著系統復雜程度增加,兩種設計方式開發時間的變化趨勢。可以看出,但產品復雜度低時,RDD的模式會很快捷,這個就非常適合初創型、小型的系統設計,當產品復雜到一定程度時,RDD的開發時間會指數上升,而DDD的模式則始終比較平穩,所以DDD會適合復雜的系統設計。

2、兩種方式中的實體

上篇說到,后臺三層結構中,業務層也叫領域層,其實和領域模型中的領域是一樣的。RDD在數據庫設計時依然需要有E-R圖和實體,但產品經理做需求設計時可以不用考慮(當然有資源這樣做更好),因為對于簡單的后臺產品而言,無需在初期理解的那么復雜,同時對很多從前端做到后臺的產品而言,不用學習領域模型相關的內容。

那么在DDD中,對于一個已經對業務非常熟悉的產品經理,可以直接跳過實體,進行系統的微服務設計。但需要注意一個實體在多個系統都存在的情況,這個時候就會導致同一實體的數據,存儲在多個系統中,無論是數據管理還是調用,都會存在問題。所以老司機們還是要劃分清實體,只是不用那么細致。

3、兩者關系

寫到這里,大家其實就會發現,這兩種方式其實是一種包含關系。對于復雜系統而言,需要先采用DDD模式進行前期需求設計及系統劃分,當微服務化后,每個子系統也就變成了簡單系統,也就可以采用RDD的模式了。

相關閱讀

后臺產品設計系列:認識后臺(一)

 

本文由 @Z. Fly 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 有個疑問,系統劃分時,能不能把每一個實體作為一個系統。這么做有什么不好的地方?

    回復
  2. 建議:如果是復雜業務在梳理結構前先進行業務建模。產品設計以終為始

    回復
  3. 這里要糾正一下,第一種方法應該不叫需求驅動設計,而應該叫流程驅動設計,叫FDD比較好 ?

    來自廣東 回復
    1. 最近正在和技術總監爭論這個問題,正好是本文中說的,耦合度高了,需要模塊化

      回復
    2. 請問作者,我一直苦惱自己沒有開發基礎和經驗,覺得做的設計,開發那邊很多時候說,不專業,不合理,不是最好的,自己很受打擊。雖然大家都說產品不需要懂技術,但明顯感覺產品懂技術可以節省評審時間,否則可能評審時大改。請問作者怎么看我這個問題。我感覺很多產品看不懂這篇文章,我感覺這篇文章更偏向技術人員一些,但是產品最好是懂這些。備注,本人現在做ERP

      回復
  4. 我理解文中定義的實體其實是對應了系統內的Class(類)對嗎?我剛剛一直在想定義實體的標準是什么?

    來自廣東 回復
    1. 實體和類還是不一樣

      來自廣東 回復
  5. 看第一遍的時候云里霧里看不懂,看第二遍的時候大概能看懂,但是沒有做過領域復雜系統的設計,做的都是按需求功能的簡單系統,所有還不能很好地理解和使用第二種設計方法,下次有接觸了再看一遍應該能有更好的領悟吧!謝謝分享 ??

    來自湖北 回復
  6. 最近在做用戶端/企業端/后臺這三塊的,用戶端做的還挺順,到企業端后就混亂了,領導只說要做什么!但是具體的功能點啥的 都沒說,一直說細化,但不知道怎么細化了,沒方向 了

    來自上海 回復
    1. 那是當然,都跟你說明白了,不就是做原型仔了嗎。你可以先進性業務建模,然后反復溝通協調,因為業務閉環或者業務可持續拓展性,你領導也可能沒想明白。

      回復
  7. 學習了學習了~

    來自北京 回復
  8. 講的真仔細,必須打賞一個

    回復
    1. 謝謝 ?? ??

      來自廣東 回復
  9. 感謝分享

    來自河南 回復
  10. 后臺產品設計系列:認識后臺(一)http://www.aharts.cn/pd/1053728.html
    后臺產品設計系列:流程設計(三)http://www.aharts.cn/pd/1329615.html
    后臺產品設計系列:原型設計五大要點(四)http://www.aharts.cn/pd/1547652.html
    前往主頁,查看更多

    來自廣東 回復
  11. 我先給你打賞個紅包了來,感謝你的分享! ?

    來自重慶 回復
    1. 謝謝 ??

      來自廣東 回復
  12. DDD領域模型中的關聯關系對最終系統的劃分的核心依據是什么?是1:M和1:N的關聯關系的劃分在一個系統里?1:1關聯關系劃分在一個系統?是這樣劃分的嗎?

    來自重慶 回復
    1. 系統的劃分是將實體劃分到不同系統中,這個劃分依據是根據需求和實體來定的,跟關聯關系無關。這種劃分需要站在需求和用戶的角度,按功能的遠近、邏輯上的先后順序、實體概念聯系強度這些來劃分

      來自廣東 回復
  13. 是我太笨了嗎?有點糊涂。

    回復
    1. 額,你是指那一塊?

      來自廣東 回復
    2. 是你沒遇到,或者你們的團隊還沒到那個層次

      回復
  14. 偏項目一些

    回復
    1. 無論是做To B的產品還是做公司系統,其實都要掌握

      回復
  15. 按角色劃分和按領域劃分的道理我都明白,可是實體和屬性那里不太懂,為什么要梳理實體并建立關聯關系?

    來自北京 回復
    1. “Java語言是一種面向對象的開發語言”,這句話不知道你有沒有聽說,這個可以跟你們后臺小哥聊聊。理解面向對象,就好理解實體了。這個其實就是用開發的思想來做系統,很多沒有后臺開發背景的產品經理做后臺、To B產品之所以很困難,第一個難點其實就是這里

      來自廣東 回復
    2. 第二種方法中,最關鍵的是第二步,即【根據實體間的聯系強弱,以實體為對象,劃分到不同系統中】。那么梳理【實體之間的聯系】確實是有用的,可以確定兩個實體之間是強相關還是弱相關,根據相關度劃分領域。

      那么列舉【屬性】又有什么用呢?只要梳理實體聯系就好了吧~~~ ??

      來自北京 回復
    3. 對于產品經理梳理需求來說,不需要列舉屬性的,這個文中已經提到了。這里梳理實體間的聯系對后面做詳細需求設計和原型設計有很大作用,后面文章會講 ??

      來自廣東 回復
    4. 建議學個簡單的程序語言,程序設計的思路都是互通的。將復雜的業務抽象成方法或類甚至服務

      回復