深度長文(一):什么是產(chǎn)品架構(gòu)?

13 評論 41601 瀏覽 326 收藏 21 分鐘

一切脫離業(yè)務的架構(gòu)都是耍流氓,產(chǎn)品更是如此。本文主要先跟大家整體講一下產(chǎn)品架構(gòu)的基本概念和方法~enjoy。

我們常常會看到“產(chǎn)品架構(gòu)”這個詞,甚至能看到有些公司專門有一個叫做“產(chǎn)品架構(gòu)師”的崗位。

說起架構(gòu),很多人會覺得很虛,那么到底什么是產(chǎn)品架構(gòu)呢?

我們知道開發(fā)有專門的一個崗位叫技術(shù)架構(gòu)師,推己及人,我們先看下技術(shù)架構(gòu)師是干嘛的?

架構(gòu)師能對線上業(yè)務進行模塊劃分,系統(tǒng)拆分重構(gòu),并做好相關高可用的措施,以保證系統(tǒng)的穩(wěn)定,安全、高效地運行。簡單來說這是一個既需要掌控整體又需要洞悉局部瓶頸并依據(jù)具體的業(yè)務場景給出解決方案的團隊領導任務。

先來看下技術(shù)架構(gòu)師的幾個核心關鍵字:

  1. 權(quán)衡與平衡
  2. 抽象、建模與設計
  3. 預見性和前瞻性
  4. 簡化之美
  5. 模式與重用
  6. 質(zhì)量、效率與資源
  7. 敏捷、迭代與演進
  8. 前構(gòu)與重構(gòu)

本質(zhì)上,技術(shù)架構(gòu)的關鍵字同樣適用于產(chǎn)品架構(gòu)。

技術(shù)架構(gòu)中有一句比較流行的話:一切脫離業(yè)務的架構(gòu)都是耍流氓,產(chǎn)品更是如此。

我考慮把“產(chǎn)品架構(gòu)”寫成一個系列文章,這篇文章先會整體講一下產(chǎn)品架構(gòu)的基本概念和方法,對于上述關鍵字的深度解析。

一、什么是產(chǎn)品架構(gòu)?

1.?先來看看“人”的構(gòu)成

(1)從原子水平60多種重要的,如:氧占約65%、碳占約18%、氫占約10%、氮占約3%,(這四個元素約占人體96%)。其他元素較少,但也很重要。

(2)從分子水平上說,水約占人體約60%,碳水化合物和脂肪占人體約14%,蛋白質(zhì)占人體約17%,其它如維生素、礦物質(zhì)、纖維素等。這些是人體的七種營養(yǎng)素,這七種營養(yǎng)素在人體中每一個都扮有非常重要的作用,不可缺少,也不可過多。

(3)在細胞水平分析,人體由細胞、細胞外液及細胞外固體組成,細胞是組成人體的基本單位。

(4)在組織水平分析,人體是由四大組織組成,即上皮組織、結(jié)締組織、肌組織和神經(jīng)組織。

(5)在器官水平分析,多種組織以不同的編排形成器官。人體內(nèi)有很多器官,如胃、肺、心、腎、脾、胰、肝、膀胱、尿道、子宮等。

(6)在系統(tǒng)水平看,共有9大系統(tǒng)。如消化系統(tǒng)、呼吸系統(tǒng)、脈管系統(tǒng)、內(nèi)分泌系統(tǒng)、神經(jīng)系統(tǒng)等等。

我們以消化系統(tǒng)做一個比喻,就很清楚了。先來看下消化系統(tǒng)的示意圖:

深度長文說清楚產(chǎn)品架構(gòu)?(第一篇)

我們會發(fā)現(xiàn)人體消化系統(tǒng):

  1. 由很多器官組成:由消化道和消化腺兩大部分組成。
  2. 能形成一套自發(fā)的運作流程:食物進入口腔、咽、食道、胃、小腸(十二指腸、空腸、回腸)和大腸(盲腸、闌尾、結(jié)腸、直腸、肛門),最后排出肛門,流程結(jié)束。其中消化腺分布在消化道管壁附近,并將消化液排入消化管內(nèi)幫助消化食物。
  3. 有必要的功能作用:食物的消化和吸收,供機體所需的物質(zhì)和能量。

2. B端業(yè)務體系的構(gòu)成

“人體的消化系統(tǒng)”非常像“B端的業(yè)務體系”,比如一個患者來診所看?。嚎蛻粜枰仍诰W(wǎng)上預約,然后在約定時間到診所登記、看診、付費、取藥,最后離開診所。

整個業(yè)務流程由很多”器官”組成:“軟性器官”比如預約、登記、看診、付費、取藥等模塊,“硬性器官”比如醫(yī)生、護士、藥師,以及對應的藥品、材料、叫號硬件、打印機等等。

這些軟性和硬性的“器官”在整個流程體系中相互協(xié)同發(fā)揮著不同作用,才能夠讓患者在流程中順利的往后推進,直至到達流程的終點。這套業(yè)務體系發(fā)揮的作用就是有序的讓患者得到診療。

說完了人的消化系統(tǒng),再反觀B端業(yè)務,我們會發(fā)現(xiàn)很多相似之處:

  1. 消化系統(tǒng)——業(yè)務流程體系
  2. 組織——底層基礎模塊
  3. 器官——一級業(yè)務模塊
  4. 細胞——二級業(yè)務模塊
  5. 分子——頁內(nèi)tab(三級業(yè)務模塊)
  6. 原子——字段

這里出現(xiàn)的“底層基礎模塊”、“一級業(yè)務模塊”、“二級業(yè)務模塊”等本質(zhì)上就是對業(yè)務的分層。

(1)定義層級

一般來說B端產(chǎn)品的分層基本就是按照上述(2)-(6)的維度進行劃分的,可視業(yè)務復雜程度適當增加或減少層級。

(2)完成分層

將同一平臺下、同一職能下、同一角色下具有高度關聯(lián)的子模塊分到同一層母模塊中,這就需要你作出判斷哪些模塊是業(yè)務相似度和關聯(lián)度都非常高的。

事實上(2)-(6)構(gòu)成了業(yè)務的結(jié)構(gòu),每個維度模塊們的任意一個模塊都是結(jié)構(gòu)中的節(jié)點,他們之間相互獨立,但又相互關聯(lián)、相互影響。

類似計算機網(wǎng)絡的結(jié)構(gòu):

深度長文說清楚產(chǎn)品架構(gòu)?(第一篇)

所以我們看到:B端業(yè)務的核心在于業(yè)務流程+結(jié)構(gòu),且業(yè)務塑造的結(jié)構(gòu)是為業(yè)務流程而服務,什么樣的業(yè)務流程決定什么樣的業(yè)務結(jié)構(gòu)。

3. B端產(chǎn)品架構(gòu)的構(gòu)成

產(chǎn)品架構(gòu)就是對業(yè)務的結(jié)構(gòu)化抽象!根據(jù)業(yè)務體系的分析,我們看到其實TO B產(chǎn)品最后就是要抽象出準確的流程+結(jié)構(gòu)。

我們常常說一個功能,或者一個業(yè)務場景的解決方案,本質(zhì)其實就是一個小系統(tǒng)。

在這個小系統(tǒng)中,上面那些“底層基礎模塊”、“一二三級業(yè)務模塊”、“字段”等各種節(jié)點支撐了這套業(yè)務流程,從而使得這個功能(解決方案)能夠形成閉環(huán),并順利的運轉(zhuǎn)起來。而眾多功能/解決方案又構(gòu)成了一個產(chǎn)品整體,就像這些眾多的相互獨立、相互作用、相互依賴的小系統(tǒng)組成了一個大系統(tǒng)。

再強調(diào)下:大家要記住TO B業(yè)務中,流程是核心,結(jié)構(gòu)都是圍繞業(yè)務流程進行劃分和設計的。所以流程的優(yōu)先級是大于結(jié)構(gòu)的。

二、如何繪制業(yè)務流程圖?

一款產(chǎn)品的主要核心業(yè)務流程的脈絡一定是非常清晰的。比如:這是一款自助開票軟件,那么核心流程一定是用戶掃碼自助填寫開票信息,并由系統(tǒng)完成開票,并發(fā)送到用戶手機/郵箱。比如:這是一個電商平臺,那么核心流程一定是選購商品,添加購物車,下單完成支付。

當然B端復雜的業(yè)務場景往往會有多條主業(yè)務流程,并且附帶了很多分支流程。

我們在畫流程的時候,首先要定義橫縱向維度,其次就是劃分模塊。

一般來說,流程圖的縱向維度可以做成職能部門/角色/平臺層;流程的橫向維度可以進行平臺層/模塊層的劃分。

以下圖“拼團功能”為例,橫向是平臺層,縱向是模塊層,這是一個跨平臺跨模塊的產(chǎn)品需求??梢钥吹皆谶@個業(yè)務流中,一級模塊劃分出了營銷、商品、訂單、統(tǒng)計模塊。本質(zhì)上劃分模塊就是對業(yè)務流的解耦。

深度長文說清楚產(chǎn)品架構(gòu)?(第一篇)

三、模塊劃分的基本原則?

根據(jù)上述流程構(gòu)建的一個非常簡單的產(chǎn)品結(jié)構(gòu)圖:

(這個結(jié)構(gòu)圖略去了很多,只是想做個示意)

深度長文說清楚產(chǎn)品架構(gòu)?(第一篇)

這其中我們看到劃分出來了“商品”、“活動”、‘訂單“、”統(tǒng)計“,加上“商家管理”、“消息推送模塊”共6個模塊。

那么在劃分模塊的時候我們要關注哪些原則呢?

1. 關注低耦合

(1)什么叫解耦?

藕斷絲連,這個詞語非常形象,業(yè)務體系就像一個藕,業(yè)務內(nèi)部的模塊之間的相互關系就像藕絲一樣錯綜復雜,又互相依賴、聯(lián)系緊密(耦合),解耦就是把藕折斷,分成獨立的兩部分。

本質(zhì)上它是把場景不同、業(yè)務屬性不同的模塊進行拆分,歸為不同的兩類,但是因為兩者都為業(yè)務流程服務,這其中難免會有相互協(xié)同的地方,于是就會有絲連的情況,這種絲連體現(xiàn)在流程中。

(2)解耦的作用?

解耦能夠讓場景更聚焦,讓功能模塊更聚焦垂直業(yè)務。比如積分模塊,凡是跟積分相關的一切業(yè)務需求,如無特殊情況,都可以被歸集到積分模塊中。對于需要用到積分的其他業(yè)務,則可以通過開放一些標準接口供其他業(yè)務調(diào)用。

最忌諱的是把另一個業(yè)務(隨便舉個例子比如活動模塊:抽獎活動,抽中就送積分)和積分模塊聚合在一起,這會導致,任何一個模塊要做修改和迭代時,都會最大程度的影響另一個模塊,導致無論產(chǎn)品還是技術(shù)的迭代成本都異常之高。

2. 關注角色場景

對于不同職能/角色不同的使用者,他們的業(yè)務場景,工作內(nèi)容必然會有區(qū)別,我們不能把他們各自使用的功能權(quán)限放在一個模塊內(nèi),這會帶來很多問題:

  1. A和B的模塊發(fā)展方向完全不同,導致模塊的發(fā)展南轅北轍;
  2. A和B的模塊關聯(lián)度很低,產(chǎn)品功能上兩者聚合在一起顯得毫無意義;
  3. 用戶不希望A的模塊可以被B看到和使用,兩者的權(quán)限不同,但是由于同屬一個模塊而導致權(quán)限非常難劃清邊界。

所以對于不同職能/角色的使用者,盡量將他們各自所要用到的產(chǎn)品模塊拆分開來,保持各自的獨立性,是模塊劃分的一個重要依據(jù)。

3. 關注數(shù)據(jù)流

業(yè)務流程可能會以一個人、或一個主體為中心進行流轉(zhuǎn)。而數(shù)據(jù)流是隱藏在表象之下的另一個流程,他是以數(shù)據(jù)為中心進行流轉(zhuǎn)的。

一般來說,C端產(chǎn)品的數(shù)據(jù)流,基本只需要考慮前后臺的數(shù)據(jù)流轉(zhuǎn)情況即可。但是B端就會復雜一些,B端saas產(chǎn)品數(shù)據(jù)往往貫穿C端功能,還會出現(xiàn)跨平臺、跨模塊的數(shù)據(jù)流傳。

數(shù)據(jù)流的作用,能幫助你更清晰的劃分模塊。

四、如何設計產(chǎn)品結(jié)構(gòu)?

1. 產(chǎn)品結(jié)構(gòu)設計的范圍

產(chǎn)品結(jié)構(gòu)設計包含多層維度的設計,主要有如下5層維度:

  1. 系統(tǒng)層面的結(jié)構(gòu)——如何分平臺/系統(tǒng);
  2. 版本層面的結(jié)構(gòu)——如何分版本/權(quán)限;
  3. 模塊層面的結(jié)構(gòu)——如何分模塊/二、三、四、五級模塊;
  4. 頁面層面的結(jié)構(gòu)——如何分頁面/頁面信息;
  5. 產(chǎn)品內(nèi)在邏輯結(jié)構(gòu)——如何用邏輯串聯(lián)。

產(chǎn)品結(jié)構(gòu)的在用戶端的展現(xiàn)就是信息結(jié)構(gòu)。這點相信大家都懂,無非是頁面層級、頁面內(nèi)部信息層級的劃分、信息內(nèi)容的分類和展示。

其次就是產(chǎn)品內(nèi)在的邏輯結(jié)構(gòu)

  • 比如某個配置項應該放在功能模塊內(nèi)還是基礎模塊內(nèi)?
  • 比如在連鎖系統(tǒng)中,會員是放在連鎖維度還是單店維度?
  • 比如直接在營銷活動中創(chuàng)建電子券,還是先在電子券模塊中創(chuàng)建,然后營銷活動進行引用?

這些其實都屬于產(chǎn)品功能層面的架構(gòu)。

2. 產(chǎn)品內(nèi)在邏輯架構(gòu)設計的7個核心原則及10個案例

  1. 易用性——從用戶使用體驗層面考慮;
  2. 可擴展性——迭代、修改的成本最小化;
  3. 技術(shù)實現(xiàn)性價比——技術(shù)實現(xiàn)成本是否過高不匹配功能價值,按性價比高的去設計;
  4. 普適性——每個單元模塊是否可以被其他單元無限重用;
  5. 熟悉業(yè)務——違反業(yè)務習慣的邏輯設計不能出現(xiàn);
  6. 掌握產(chǎn)品發(fā)展方向——預見產(chǎn)品在中短期內(nèi)的發(fā)展方向,提前考慮進去;
  7. 從簡單到復雜——任何一個產(chǎn)品都是從最小MVP開始的,千萬不要在開始就架構(gòu)一套復雜的系統(tǒng)。

關于一些結(jié)構(gòu)設計上,我給大家列一些比較高頻出現(xiàn),比較常見的B端產(chǎn)品(不同緯度的產(chǎn)品架構(gòu)思路)小例子:

(1)比如我們有一套面向商家的門店經(jīng)營管理系統(tǒng),這時需要一個有一個卡券平臺,跟門店管理系統(tǒng)中的業(yè)務有著密切的關系,這個時候你該定義這是一套系統(tǒng)還是兩套系統(tǒng)?他們的關系是什么?邊界在哪里?

(2)比如我們做了一套診所管理系統(tǒng),后續(xù)要垂直化??剖桨l(fā)展,那么到底是通過拆分版本,完全一個科室一個獨立的版本?還是做在一套系統(tǒng)里,然后通過權(quán)限劃分 更合理呢?這其實就是產(chǎn)品架構(gòu)的一部分

(3)比如對于電商類的saas,很多是非協(xié)作型的,也就是說模塊之間并沒有嚴格的強聯(lián)系,相對比較獨立,獨立作為一個B端業(yè)務閉環(huán),可單獨使用。但是像診所saas,則是協(xié)作型的,即業(yè)務流程涉及到多模塊多角色,每個角色都需要在流程中承擔一部分工作職能。非協(xié)作型和協(xié)作型的系統(tǒng)設計的思路也是不同的

(4)比如我們在設計電子券的時候,我們是通過一個步驟完成創(chuàng)建+投放,還是通過創(chuàng)建一個步驟+投放一個步驟完成流程?背后的考慮因素是什么?

(5)對于一些業(yè)務流程的設置項,是放在后臺該業(yè)務模塊維度,還是基礎設置模塊的維度?

(6)比如原先要設計商品管理模塊,考慮的主要是單店模式,跨店的商品管理是隔離的,但是當跨店客戶提出想要統(tǒng)一管理商品,并可以支持總分店和分店之間的商品調(diào)撥的時候,單店商品管理的設計方案就無法支撐這樣的業(yè)務模式,需要做大規(guī)模的底層改動

(7)確定維度,比如哪些指標是單店維度,哪些是機構(gòu)維度,比如預約是放在后臺“診所管理”里面,還是單獨放在后臺“預約管理”中?放在哪個維度又是基于哪些原因考慮的?

(8)業(yè)務的不滿足性,比如我們在做一款電子券的時候,考慮了線上場景,但是還要考慮線下場景,這就需要電子券模塊下需要投放到線上(多個渠道)、線下(二維碼、短信等),那么渠道后續(xù)可能會進行變更,那么假如我們把創(chuàng)建+投放一步完成,那么未來我們要改動渠道,就會影響整個卡券流程,如果我們能分2步,那么只需要對第二步投放進行修改就行,這樣系統(tǒng)的可擴展性就會強很多

(9)比如對于訂單模塊的架構(gòu)設計,是否能夠支持各種營銷活動:滿減、卡券、積分抵扣等,具備足夠強的業(yè)務包容性

(10)重復被使用的模塊,如何避免重復造輪子!比如電子券模塊,在很多營銷活動中都會用到,比如短信消息模塊,在很多業(yè)務中都會用到,那么這些被高頻用到模塊就應該抽離出來,而不是每個業(yè)務環(huán)節(jié)中都去做一遍。

3. 產(chǎn)品架構(gòu)必備能力

當然作為一個產(chǎn)品架構(gòu)師,要完成這些事情,對于能力的要求也是非常高的,最主要的4點:

  1. 懂業(yè)務;
  2. 預見能力,預見未來業(yè)務流程、業(yè)務模式的變化趨勢;
  3. 成熟的B端產(chǎn)品結(jié)構(gòu)化思維;
  4. 懂技術(shù)原理,懂技術(shù)原理最大的好處就是能大概評估這個設計方案的技術(shù)成本,并推動自己選擇更合適,投入產(chǎn)出比更低的設計方案。

總結(jié)

產(chǎn)品架構(gòu)其實是一個非常復雜而宏大的話題,這篇將近5000字的文章也只是起了個頭。

我想說的是,產(chǎn)品架構(gòu)不只是給產(chǎn)品搭個框架,他出現(xiàn)在產(chǎn)品設計的方方面面中。

通過這樣的架構(gòu)思維幫助產(chǎn)品最均衡的匹配用戶的多樣性需求,匹配公司的大研發(fā)資源,匹配合適的時機把產(chǎn)品做到合適的程度等等。

這是一個系統(tǒng)性的工程,好的架構(gòu)能夠支撐業(yè)務發(fā)展多年而不重構(gòu),更能讓用戶嘖嘖稱贊。

我想這就是產(chǎn)品架構(gòu)的魅力吧!

 

作者:司馬特小隊,丁香園高級產(chǎn)品經(jīng)理。微信公眾號:司馬特小分隊

本文由 @司馬特小隊 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議。

更多精彩內(nèi)容,請關注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 通俗易懂的好文,受益匪淺,公眾號關注一波

    來自浙江 回復
  2. 平臺-系統(tǒng)-一級模塊-二級模塊-三級模塊
    模塊復用性高可抽離

    回復
  3. (1)比如我們有一套面向商家的門店經(jīng)營管理系統(tǒng),這時需要一個有一個卡券平臺,跟門店管理系統(tǒng)中的業(yè)務有著密切的關系,這個時候你該定義這是一套系統(tǒng)還是兩套系統(tǒng)?他們的關系是什么?邊界在哪里?
    (2)比如我們做了一套診所管理系統(tǒng),后續(xù)要垂直化專科式發(fā)展,那么到底是通過拆分版本,完全一個科室一個獨立的版本?還是做在一套系統(tǒng)里,然后通過權(quán)限劃分 更合理呢?這其實就是產(chǎn)品架構(gòu)的一部分
    (3)比如對于電商類的saas,很多是非協(xié)作型的,也就是說模塊之間并沒有嚴格的強聯(lián)系,相對比較獨立,獨立作為一個B端業(yè)務閉環(huán),可單獨使用。但是像診所saas,則是協(xié)作型的,即業(yè)務流程涉及到多模塊多角色,每個角色都需要在流程中承擔一部分工作職能。非協(xié)作型和協(xié)作型的系統(tǒng)設計的思路也是不同的
    (4)比如我們在設計電子券的時候,我們是通過一個步驟完成創(chuàng)建+投放,還是通過創(chuàng)建一個步驟+投放一個步驟完成流程?背后的考慮因素是什么?
    (5)對于一些業(yè)務流程的設置項,是放在后臺該業(yè)務模塊維度,還是基礎設置模塊的維度?
    (6)比如原先要設計商品管理模塊,考慮的主要是單店模式,跨店的商品管理是隔離的,但是當跨店客戶提出想要統(tǒng)一管理商品,并可以支持總分店和分店之間的商品調(diào)撥的時候,單店商品管理的設計方案就無法支撐這樣的業(yè)務模式,需要做大規(guī)模的底層改動
    (7)確定維度,比如哪些指標是單店維度,哪些是機構(gòu)維度,比如預約是放在后臺“診所管理”里面,還是單獨放在后臺“預約管理”中?放在哪個維度又是基于哪些原因考慮的?
    (8)業(yè)務的不滿足性,比如我們在做一款電子券的時候,考慮了線上場景,但是還要考慮線下場景,這就需要電子券模塊下需要投放到線上(多個渠道)、線下(二維碼、短信等),那么渠道后續(xù)可能會進行變更,那么假如我們把創(chuàng)建+投放一步完成,那么未來我們要改動渠道,就會影響整個卡券流程,如果我們能分2步,那么只需要對第二步投放進行修改就行,這樣系統(tǒng)的可擴展性就會強很多
    (9)比如對于訂單模塊的架構(gòu)設計,是否能夠支持各種營銷活動:滿減、卡券、積分抵扣等,具備足夠強的業(yè)務包容性
    (10)重復被使用的模塊,如何避免重復造輪子!比如電子券模塊,在很多營銷活動中都會用到,比如短信消息模塊,在很多業(yè)務中都會用到,那么這些被高頻用到模塊就應該抽離出來,而不是每個業(yè)務環(huán)節(jié)中都去做一遍。
    ——————————————————————————————————
    這些問題的答案是?

    來自廣東 回復
  4. 系統(tǒng)之美

    來自廣東 回復
  5. 寫得真棒?? 一邊看,一邊回想這兩年遇到的問題,收獲太多。

    來自上海 回復
  6. 求深度長文二~~

    來自浙江 回復
  7. 深度長文二啥時候出啊

    回復
  8. 流程+結(jié)構(gòu),說的很受用

    來自北京 回復
  9. 感受了,我發(fā)現(xiàn)很多開發(fā)人員在設計數(shù)據(jù)庫結(jié)構(gòu)的時候,是根據(jù)設計UI來的,一個頁面一張表,頁面上有什么就加相應的字段進這張表里。最后看有些實在不好處理的邏輯再建一張表補充

    回復
  10. 說出了我的心聲!

    來自廣東 回復
  11. 寫的太好了!越來越發(fā)生上帝是最有能力的產(chǎn)品架構(gòu)師

    回復
  12. 額 不愧是丁香園的PM,作者是醫(yī)科生出身么

    來自北京 回復
  13. 期待后邊的分享

    來自四川 回復