從0到1設(shè)計后臺產(chǎn)品(三):產(chǎn)品功能解構(gòu)
物流運輸管理系統(tǒng)的流程是什么?如何設(shè)計這樣一款后臺產(chǎn)品,應(yīng)該從哪幾個方面去設(shè)計呢?以下,筆者將為大家分享自己在設(shè)計后臺產(chǎn)品中的一些想法。
在業(yè)務(wù)需求了解清楚后,就進入了產(chǎn)品設(shè)計的階段。那么如何設(shè)計一款后臺產(chǎn)品,應(yīng)該從哪幾個方面去設(shè)計呢?我們先看一下一個物流運輸管理系統(tǒng)大致的流程是什么。
功能域劃分
功能域,指的是在滿足某個業(yè)務(wù)流程時,將線上的操作流程拆分成不同的功能閉環(huán)。
劃分功能域是在產(chǎn)品設(shè)計的初期階段比較重要的一個工作。如果在產(chǎn)品設(shè)計的一開始就可以劃分一個比較合理的功能域,在后面產(chǎn)品設(shè)計的時候,就可以按照功能域進行拆分設(shè)計,不同功能域之間以接口的方式進行對接。這樣一來可以減少系統(tǒng)的復(fù)雜性,降低設(shè)計成本。二來可以減少不同功能之間的耦合性。防止一個功能進行迭代或者優(yōu)化就會牽一發(fā)而動全身。
產(chǎn)供銷模式
功能域劃分可按照經(jīng)典的供應(yīng)鏈產(chǎn)供銷的思路進行劃分;產(chǎn)供銷在供應(yīng)鏈中指的是生產(chǎn)、供應(yīng)、銷售;指的是某個貨物的完整的供應(yīng)鏈體系。這里供應(yīng)鏈體系不同的是所傳遞的不是貨物,而是數(shù)據(jù)或者某個流程的結(jié)果。這種模式比較適合操作性比較強的業(yè)務(wù)系統(tǒng)。
所以這里的產(chǎn)供銷引申為:數(shù)據(jù)的生成部分,數(shù)據(jù)的處理部分,數(shù)據(jù)的最后經(jīng)過系統(tǒng)系統(tǒng)流轉(zhuǎn)產(chǎn)生的結(jié)果,也是其價值所在。
比如要設(shè)計一個大件貨物的物流運輸管理系統(tǒng):
生產(chǎn):貨品/客戶數(shù)據(jù)錄入功能,車輛信息、司機信息的錄入,城市信息/點位倉庫的錄入,運輸計劃的生成,我們可以將其劃分為數(shù)據(jù)生成功能域;數(shù)據(jù)生成功能域一般來說屬于最上游的功能域,所以與系統(tǒng)內(nèi)的往復(fù)的交互不會太多,一般其他的操作流程都是從這里取數(shù),反而與一些承載其他的業(yè)務(wù)訴求的系統(tǒng)有所交互,比貨品/客戶的數(shù)據(jù)可能是從倉儲系統(tǒng)或者交易系統(tǒng)直接拿過來的數(shù)據(jù),車輛信息、司機信息時直接從供應(yīng)商系統(tǒng)拿過來的數(shù)據(jù)。但是理論上說,它所有的邏輯都是向上耦合而不會向下耦合的。
供應(yīng):為了達到最后的結(jié)果的流程業(yè)務(wù)功能。一般來說如果劃分供應(yīng)功能域的話,所劃分的領(lǐng)域都是比較核心的領(lǐng)域,是主要業(yè)務(wù)流程的承載。對于物流運輸系統(tǒng)來說,就是可以說是排線、裝車流程。以及整個的任務(wù)跟蹤流程,包括實時運力的報告預(yù)警,車輛調(diào)度,在途跟蹤,司機在此過程中的送貨、簽收、回款等一系列流程。
銷售:這塊一般是已經(jīng)完成了核心業(yè)務(wù)流程后所要拿到結(jié)果的部分,也是整套流程的價值所在。對于物流運輸系統(tǒng)來說,可以是整個費用結(jié)算模塊,根據(jù)之前的所有的流程或者內(nèi)容最終的一個產(chǎn)出。向下流程的內(nèi)容其實也屬于這塊的內(nèi)容,比如物流任務(wù)完成后最終給財務(wù)系統(tǒng),給交易系統(tǒng)的一個數(shù)據(jù)流轉(zhuǎn),也會放在這個功能域中。
進銷存模式
還有一種思路是按照供應(yīng)鏈的進銷存的思路進行劃分,這也是劃分子系統(tǒng)的另外一個角度。
進銷存指的是采購、入庫、銷售這樣的一個過程。這種模式比較適合邏輯復(fù)雜,中臺系統(tǒng),或者中間業(yè)務(wù)流轉(zhuǎn)系統(tǒng)。與產(chǎn)供銷模式不同的是,一個偏向于產(chǎn)出,通過某個方式生成數(shù)據(jù),完成業(yè)務(wù)流程。一個偏向流轉(zhuǎn),以自己本身的業(yè)務(wù)流程屬性進行承上啟下或者承接核心業(yè)務(wù)流程。
比如訂單交易系統(tǒng),可以采用進銷存的模式。
第一:訂單數(shù)據(jù)的產(chǎn)生來源是用戶下單,所以產(chǎn)生訂單的過程可以作為采購的流程;
第二:訂單數(shù)據(jù)產(chǎn)生后,整體的處理過程,比如訂單狀態(tài)根據(jù)不同操作的流轉(zhuǎn)、訂單的算價等;
第三:訂單處理完成后,對各個下游系統(tǒng)的分發(fā),可以作為銷售環(huán)節(jié);比如訂單在客服系統(tǒng)、CRM等系統(tǒng)中的下游邏輯處理;
這些是我在平時工作中的一些總結(jié),肯定還有許多業(yè)務(wù)流程沒有辦法按照這個思路去劃分功能域,總之可以按照一個思路:功能域之外盡量形成閉環(huán),通過盡量少的接口就可以滿足不同功能域之間的數(shù)據(jù)流轉(zhuǎn),協(xié)作完成各個功能域之間的工作就可以。
主線產(chǎn)品設(shè)計
在劃分功能域后,我們可以按照不同的功能域進行產(chǎn)品的設(shè)計,每一個功能域中都可以拆分為主線產(chǎn)品及非主線產(chǎn)品。
例如在物流運輸管理系統(tǒng)中,我們已經(jīng)按照產(chǎn)供銷的模式將系統(tǒng)拆分了不同的子功能域,第二個子功能域是業(yè)務(wù)流程的處理,數(shù)據(jù)的處理部分,那么針對這個環(huán)節(jié)中,其整個核心的流程就是從物流運輸管理系統(tǒng)中排線,裝車,在途運輸,簽收回款這樣一條業(yè)務(wù)流程的核心鏈路。
那么,應(yīng)該如何去判斷這條鏈路是核心鏈路呢?
可以秉承這一一句話:這條鏈路跑通后,可這個子功能域的基本業(yè)務(wù)流程可以跑通,沒有比較大的功能缺陷;
有時候,我們無法確認哪些是核心鏈路。接過來一堆的業(yè)務(wù)訴求,梳理了一個龐大而繁瑣的產(chǎn)品流程;
在這條流程里面,我們可以進行梳理和拆解,這個過程中,我們可以遵循以下幾個原則將核心鏈路梳理出來。
第一:業(yè)務(wù)閉環(huán)是什么
這個子功能域中,最開始的節(jié)點,和最后的節(jié)點分別是哪些;比如物流運輸管理系統(tǒng)中,第二個子功能域的第一個環(huán)節(jié)是排線,最后一個環(huán)節(jié)是簽收回款,或者司機返倉(有返倉環(huán)節(jié)的流程),那么可以確認的是,這兩個環(huán)節(jié)一定是主鏈路之內(nèi)的;
接著,通過這個鏈路往后推,往前推,直至將整條鏈路閉環(huán)。比如排線后接下來的環(huán)節(jié)是通知司機,則這個環(huán)節(jié)也是主鏈路之內(nèi)的;司機接單后進行裝車,這樣是從前往后推,直至最后的環(huán)節(jié);
另外,為了保證最終的結(jié)果正確,我們可以從后往前再推一遍,比如最后的節(jié)點是司機返倉,那前一個環(huán)節(jié)是司機接收到了貨款,再前一個環(huán)節(jié)是司機到達客戶現(xiàn)場進行送貨;
第二:如果沒有XX功能,該怎么辦
對于某個功能我們實在難以取舍的時候,我們可以考慮一下,如果上線的時候沒有這個功能,我們可以怎么做?比如如果沒有內(nèi)置導(dǎo)航的功能,司機可以通過高德、百度地圖的APP直接導(dǎo)航使用;如果沒有裝車后拍照留存功能,可以拉一個微信群,在微信群里面上傳照片;如果沒有排線功能,那業(yè)務(wù)數(shù)據(jù)將無法流轉(zhuǎn),無法給司機下發(fā)任務(wù);所以哪些功能是主線功能,哪些是非主線功能,就顯而易見了。
那么,為什么我們需要梳理出一個主線產(chǎn)品呢?
第一,后臺產(chǎn)品是復(fù)雜而龐大的,我們無法一口吃成一個胖子,就需要將功能拆解開來做,所以這個時候就必須梳理出一個主線產(chǎn)品;
第二,在產(chǎn)品線上跑起來之前,所有的設(shè)計都是空中閣樓,沒有經(jīng)過實際的驗證,如果這個時候我們將產(chǎn)品設(shè)計的特別復(fù)雜,一旦其中某個環(huán)節(jié)出現(xiàn)了問題,就會出現(xiàn)船大難調(diào)頭的尷尬局面;
第三:好多的功能,是業(yè)務(wù)沒想清楚,我們也沒想清楚的,只有產(chǎn)品真正用起來之后,才能之后這個產(chǎn)品需要什么,所以在產(chǎn)品最開始的階段,當務(wù)之急是讓產(chǎn)品先運作起來,然后再根據(jù)實際的情況決定后續(xù)的產(chǎn)品怎么去做;
非主線產(chǎn)品設(shè)計
非主線產(chǎn)品功能,即指的在某個功能域之內(nèi)主線產(chǎn)品之外的功能,這些功能不會影響到主鏈路,但是如果加上這些功能可以讓產(chǎn)品更加完善,更符合業(yè)務(wù)訴求。
比如我們在確定了物流運輸管理系統(tǒng)中如果沒有裝車后的拍照留存功能,可以讓司機通過微信群上傳照片的方式進行操作;但是在主線功能上線之后,針對于每一筆訂單都會用到的這個操作,這樣的操作無疑就相當?shù)姆爆嵙?。所以此時刻的功能線上化就十分有必要了。
在已經(jīng)將主線產(chǎn)品設(shè)計出后,非主線產(chǎn)品相對來說就會比較好設(shè)計一些。設(shè)計非主線產(chǎn)品時,可以參考以下幾個設(shè)計原則:
1. 主線產(chǎn)品每個環(huán)節(jié)的補充
在我們將主線功能中的排線環(huán)節(jié)設(shè)計完成后,排線所要涉及的其他點,比如運單生成后的打印,排線時需要先核對訂單各個SKU的數(shù)量以及倉儲數(shù)量,這些流程是依托于主線流程,或者主線流程的擴充的,完善主線功能的某個流程的。
2. 可以形成一個業(yè)務(wù)小閉環(huán)
某些功能可能根本就和主線流程關(guān)系不大, 但的確也屬于整個業(yè)務(wù)流程之內(nèi)的,比如在許多的物流運輸管理系統(tǒng)中會將與司機簽訂合同的功能與放到里面;這個流程可以說是完全在系統(tǒng)中開辟了一個新的獨立的業(yè)務(wù)小閉環(huán),我們在設(shè)計的時候,要注意做到最小可用即可,精力更多的還是需要放在主線流程及對應(yīng)的非主線流程上。
數(shù)據(jù)功能設(shè)計
數(shù)據(jù)產(chǎn)品的設(shè)計中包括報表設(shè)計,數(shù)據(jù)儀表盤等產(chǎn)品設(shè)計。
這個功能可以說是后臺產(chǎn)品的必備功能之一。在設(shè)計報表功能時,需要注意的設(shè)計內(nèi)容有:
一、自上而下的設(shè)計,即這個功能是以管理訴求出發(fā),基于不同的管理者希望看到什么樣的數(shù)據(jù)來確定報表設(shè)計的內(nèi)容。所以一般需求的來源大部分可能是管理者,較少部分的情況下才為操作者,比如CRM系統(tǒng)中某個人需要看自己今天拜訪了多少客戶。
二、不同行業(yè)的報表標準都有哪些,在不同的行業(yè)中可能會有一些固定衡量的指標來確定某一次業(yè)務(wù)流程的結(jié)果如何,比如在物流運輸管理系統(tǒng)中的提貨準時率 / 到貨準時率 / 貨損貨差率 /回單返回率 / 車輛裝載率?等等這些比較標準的數(shù)據(jù)做成線上報表。
三、在設(shè)計報表的時候,需要在一開始的時候就注意取數(shù)字段的設(shè)計,有時候在產(chǎn)品功能中可能不需要在數(shù)據(jù)庫中新增一個字段來存儲,但是為了后面報表取數(shù)比較容易,最好還是可以在數(shù)據(jù)庫中冗余一個字段。這樣在后期跑數(shù)據(jù)的時候一是可以減少開發(fā)的工作量,二來可以減少跑數(shù)的時間。
四、設(shè)計報表的時候,最好是帶入到不同的使用場景中去設(shè)計,不能為了設(shè)計報表而設(shè)計。所生成的數(shù)據(jù)一定要有意義,確切的用到某個地方才去取這個數(shù)據(jù)。
非功能性設(shè)計
非功能性產(chǎn)品主要包括兩個部分:
1. 滿足降本增效的目的,在現(xiàn)有功能產(chǎn)品之上確定的一些產(chǎn)品策略
這些策略是為了讓系統(tǒng)更加的堅實可用。這個我認為也是之所以我們要將某些業(yè)務(wù)流程線上化的原因,因為這些功能的存在,我們可以讓原來繁瑣的業(yè)務(wù)流程變得更加精簡高效;
比如在我們將tms的業(yè)務(wù)功能產(chǎn)品已經(jīng)做得足夠完善時,需要考慮的就是這個系統(tǒng)可以如何更好的服務(wù)于業(yè)務(wù),讓業(yè)務(wù)的操作可以更精簡,效率可以更高;這個時候我們就需要考慮一些人做不到的時候,比如排線策略,根據(jù)以往的排線數(shù)據(jù),可以推算出某個訂單的最優(yōu)線路,在給某個司機進行派單時自動將最佳的訂單進行聚合生成運單。在司機裝車時,根據(jù)貨物的擺放原則(密度大的放在下方,易損的放在上方),先到后裝(優(yōu)先派送的放在最后裝車),不超載等原則自動匹配配載的策略;
這些功能可能都是人為操作難以實現(xiàn)或者需要一個很復(fù)雜的計算的,但是這些我們通過產(chǎn)品本身不斷優(yōu)化的策略,可以讓產(chǎn)品變得更加完善和健壯。
2. 非功能性產(chǎn)品包括在業(yè)務(wù)流程之外的一些產(chǎn)品能力
比如一些管控訴求,關(guān)鍵節(jié)點需要某些職位的領(lǐng)導(dǎo)進行審批;如果是從0 到1在建設(shè)完成的系統(tǒng)時需要設(shè)計的權(quán)限系統(tǒng),賬戶系統(tǒng);等等這些內(nèi)容,需要滿足整體的產(chǎn)品閉環(huán)流程不可缺少的環(huán)節(jié)。
接口設(shè)計
對內(nèi)的接口
在上文中所述,設(shè)計產(chǎn)品的一開始需要劃分子功能域,那么不同的功能域之間的能力即通過接口進行連接。之所以通過接口進行對接,可以保證不同子功能域之間的耦合程度比較低,在進行功能迭代時,如果只涉及到某個功能域的改動,不需要整個鏈路都改造,只改造自己本身內(nèi)部即可,只要對其他功能域所輸出的接口沒有變動,則對其他功能域無感知。
在設(shè)計對內(nèi)的接口時,無需考慮到的點有如下:
1. 接口的調(diào)用頻率,調(diào)用次數(shù)。因為作為一個統(tǒng)一的系統(tǒng),所有系統(tǒng)的技術(shù)能力都是統(tǒng)一的,完備的,這些信息更多的應(yīng)該是技術(shù)去考慮的。
2. 同一個系統(tǒng)中,不同子功能域的主數(shù)據(jù)是一致的?;诖耍覀冊谠O(shè)計接口的時候,就不需要考慮接口中過多的參數(shù),如果一旦涉及到某個數(shù)據(jù),只需要將表中的主鍵作為參數(shù)進行傳遞即可。比如在物流運輸管理系統(tǒng)中,供應(yīng)子功能域需要生產(chǎn)子功能域提供被禁用的司機名單,以便勾選司機的時候?qū)⑵渲没?。那供?yīng)子功能域只需要將司機ID給到,由供應(yīng)子功能域直接去主數(shù)據(jù)中查詢即可。
對外的接口
對外的接口,既包括對功能內(nèi)部的不同系統(tǒng)的業(yè)務(wù)能力支持接口,也包括可能對外涉及的OpenAPI。相對于對內(nèi)的接口,由于這些接口是對外露出的,其他業(yè)務(wù)系統(tǒng)的能力不受本系統(tǒng)的控制。所以在設(shè)計的過程中會比對內(nèi)的接口復(fù)雜一些,設(shè)計時也需要更加的謹慎;
在設(shè)計對外接口的時候,需要考慮的點有以下:
1. 是主動調(diào)用接口還是推送接口。主動調(diào)用接口指的是調(diào)用方因為自己的需求調(diào)用我方系統(tǒng)的接口,然后我方進行一定的邏輯處理后返回給調(diào)用方。這種情況多見于調(diào)用方發(fā)起業(yè)務(wù)操作,比如TMS在于WMS進行交互時,如果TMS想要獲取WMS中的貨品數(shù)據(jù),則需要主動請求WMS,將一定的參數(shù)(一般包括必要的條件,比如哪個城市、哪個訂單,多少貨)等傳給WMS,然后WMS返回給對應(yīng)的數(shù)據(jù)。
如果是推送接口,即我方系統(tǒng)因為數(shù)據(jù)變化或其他原因,主動推送給調(diào)用方的方式。比如WMS中某個貨品因為不合格下架了,但是之前的數(shù)據(jù)已經(jīng)推送給TMS了,這個時候就需要WMS主動推送給TMS。
2. 同步接口還是異步接口。同步接口指的是進行數(shù)據(jù)傳遞時,接收方將結(jié)果實時返回給調(diào)用方,接口一直保持通信。同步接口的好處為:信息處理比較及時,各個系統(tǒng)之間的操作會比較平滑。缺點為一旦數(shù)據(jù)量大的時候,接口容易超時,導(dǎo)致數(shù)據(jù)傳輸失敗。這種情況下,整個系統(tǒng)的操作相當于都被中斷 。
異步接口指的是,我接收到調(diào)用方傳過來的數(shù)據(jù)后,先進行邏輯處理,處理成功后將結(jié)果再返回給調(diào)用方,這種方式的好處和同步接口相比針對大量數(shù)據(jù)的處理有了明顯的提升。但是有一點,因為調(diào)用方接收接口不及時,如果邏輯處理不好,很容易出現(xiàn)下游系統(tǒng)數(shù)據(jù)繼續(xù)進行,但是上游后面返回一個失敗的結(jié)果,這樣就會導(dǎo)致整個系統(tǒng)的邏輯錯亂。
3. 接口的調(diào)用頻次和量級。一個系統(tǒng)所能承受的壓力是有限的,在設(shè)計接口的時候,也一定要考慮到系統(tǒng)接口所能承受的壓力是多少。這一點其實技術(shù)考慮的可能更多一些,但是對于產(chǎn)品來說,可能不同的壓力承受值會對產(chǎn)品方案有所影響,比如某個HRM系統(tǒng)中,員工同步的借口一次最多允許傳10000個員工,則我們需要考慮正常的操作鏈路中比如Excel導(dǎo)入是否也需要將操作限制于10000。
兜底邏輯、熔斷機制
系統(tǒng)在運行的過程中,難免會因為并發(fā)量過大,系統(tǒng)bug產(chǎn)生一些問題,這些問題輕則影響業(yè)務(wù)的正常進行,重則直接宕機,丟失數(shù)據(jù)等嚴重的情況。所以在設(shè)計產(chǎn)品的時候,要考慮到如果一旦系統(tǒng)產(chǎn)生問題,怎么樣可以使產(chǎn)生的災(zāi)難降到最低;
兜底邏輯指的是因為某些不可預(yù)見性的問題,比如系統(tǒng)bug,產(chǎn)品邏輯沒有考慮到等因素,發(fā)生了異常情況或者數(shù)據(jù)的情況下,系統(tǒng)應(yīng)當進行的操作。設(shè)計一個產(chǎn)品的兜底邏輯需要對這個業(yè)務(wù)十分熟悉,并且有著自己比較精準的業(yè)務(wù)判斷,否則會導(dǎo)致一種十分可怕的情況是兜底錯誤,造成了比原本更可怕的錯誤。
比如在物流運輸管理系統(tǒng)中,因為司機早上需要發(fā)貨,需要將所有的排線任務(wù)在晚上十二點之前全部完成,否則就會影響后續(xù)的流程。正常情況下,規(guī)定排線人員必須在12點前完成,一旦因為排線員工自身原因,或者網(wǎng)絡(luò)異常,系統(tǒng)bug等無法完成排線任務(wù),兜底邏輯會使系統(tǒng)則會按照歷史排線規(guī)則自動分發(fā)任務(wù)。
熔斷機制指的是如果某個操作系統(tǒng)判定為異常業(yè)務(wù)流程了,那么立刻會進行系統(tǒng)流程的切斷,以免發(fā)生悲劇。比如說某一套物流運輸系統(tǒng),通過測算給某司機發(fā)放運輸任務(wù)工資時,由于系統(tǒng)問題或者操作失誤問題,本來運送5次應(yīng)該發(fā)放1000元,實際發(fā)放了10000元。這個時候,系統(tǒng)就應(yīng)該設(shè)置一套熔斷機制,設(shè)置某個操作的閾值。比如1單配送最高金額為300元,則司機運送5次最多發(fā)放1500元,該套熔斷機制檢測到金額超過閾值,則直接將流程切斷,并且將異常拋給系統(tǒng)管理員。
在設(shè)計一套復(fù)雜的后臺產(chǎn)品時,需要考慮的點可以說是方方面面。上面是我關(guān)于在設(shè)計后臺產(chǎn)品中設(shè)計產(chǎn)品方面的一些想法,接下來會介紹一下后臺產(chǎn)品的交互應(yīng)該如何設(shè)計。
相關(guān)閱讀:
從0到1設(shè)計后臺產(chǎn)品(一):給后臺產(chǎn)品分個類
從0到1設(shè)計后臺產(chǎn)品(二):如何定義業(yè)務(wù)需求?
#專欄作家#
執(zhí)迷,微信公眾號:執(zhí)迷有悟,人人都是產(chǎn)品經(jīng)理專欄作家,一個后臺產(chǎn)品經(jīng)理。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 unsplash,基于 CC0 協(xié)議
功能域可以解釋一下嗎?是理解為功能模塊好點、還是大的比如商城、管理后臺這種?
推薦書籍:
1.《軟件需求最佳實踐》強烈推薦。徐鋒老師的經(jīng)典巨作,由于當時出版時間為2008年,必看書籍;后續(xù)更新書籍《有效需求分析》,書中的知識框架相同,前一本比較詳細,后面一本內(nèi)容比較少,便于閱讀。
2.《軟件需求(第三版)》為BA而寫,而里面的內(nèi)容卻是后臺產(chǎn)品的知識寶典??梢哉f梳理出了后臺產(chǎn)品所有的知識體系和架構(gòu),必讀書籍;
另外還有《七步掌握業(yè)務(wù)分析》《掌握需求過程》等書都值得一讀!
關(guān)注我的公眾號“執(zhí)迷有悟”回復(fù)“后臺資料”獲取相關(guān)后臺產(chǎn)品相關(guān)資料哦~
學習了
寫的真好、期待下一篇、棒棒噠
感謝支持~
感覺作者應(yīng)該最少有個4年的產(chǎn)品工作經(jīng)驗了
三年哈
領(lǐng)域驅(qū)動設(shè)計
正在做著后臺產(chǎn)品設(shè)計,文章闡述得比較詳細、全面
已經(jīng)不想做這種業(yè)務(wù)系統(tǒng)了 ??
為什么?老鐵
感覺蠻有意思、哈哈