一場家庭口角引起的系統重構分析
本文作者以一次家庭口角為切入點,將一家三口比喻為不同的系統,把家庭吵架的場景抽象到系統設計領域,對系統重構進行了分析,一起來看一下吧。
家里儲物柜有個空間,里面放個藥箱,藥箱里有創可貼云南白藥消毒水藥棉紗布之類的東西。家里的每個人都知道這個柜門打開可以找到藥,相信大多數人家都是這樣的。
隊友不小心割破了手,嬌弱不勝,癱倒沙發大聲呼救:“兒子快來,給爸爸找點藥!”
Simon聞言趕來,拉開柜門就問:“爸爸,拿啥藥?”
“問你媽!”
“媽媽!媽媽!媽媽!爸爸要拿啥藥?”
我本來在陽臺收衣服,聽到“問你媽”以及“媽媽(重復若干遍)”正沒好氣,進了房門,把干衣服一摔,叉腰就問:“你們倆大老爺們兒連個藥都拿不出來了?你難道就不能把藥箱拿出來給爸爸看看,讓他選一種?非要等我?”
隊友見我橫眉怒目,放棄嬌弱,小聲嘟囔:“這也不是兒子的錯……”
不過,鋼鐵直男Simon已經委屈得抽泣起來。
讓我們先把哭鼻子的Simon放在一邊,把這個場景抽象到系統設計領域來分析一下。
01 傳統理念:孩子是父母系統的執行模塊
假設爸爸系統為一業務核心系統,Simon系統為其子系統,功能為執行爸爸核心的業務指令,無法執行時,向媽媽系統通訊,由媽媽系統代為執行。
Simon系統小傳:我是一個使用中心化邏輯的子系統。
我的處理邏輯是:爸爸給我輸入了指令由我來執行,第一個指令是拿藥。由于指令不清,我無法執行,于是我發出了疑問:“拿啥藥?”接著,爸爸給我下達了第二個指令“問媽媽”,我也執行了第二個指令,但是執行失敗,還被媽媽罵,我沒有做錯,我很委屈。
Simon的自然邏輯處理方式,在我們的很多業務系統設計上都有應用。即Simon子系統是爸爸系統的執行模塊。input和output非常分明。但是問題出現在Simon模塊在與媽媽系統交互時,媽媽系統報錯,也就是俗稱的“接口規范沒定義好”。媽媽系統拒絕處理爸爸系統交代的事務。
不難看出,Simon子模塊在此語境下,是爸爸系統中一個無法單獨抽提出來的功能模塊,因為他只執行。
一個只做執行工作的業務模塊,永遠無法成長為另一套核心系統,人也一樣。而目前這個模塊之所以這樣,完全是由于爸媽系統之間的交互定義已經這樣規定了,所以,我們必須進行重構。
02 去父母中心化的新系統:內生判斷力
如果要重構Simon模塊,提高內聚并降低耦合,就不得不考慮Simon模塊與媽媽系統之間的交互規范。
畢竟,在Simon模塊還是幼年的時候,媽媽系統是接受Simon模塊的指令,并給予執行的。但隨著Simon模塊所配置的硬件越來越強,并且正在積累日益龐大的知識庫,該模塊應承擔更多更復雜的功能并盡可能地減少將任務傳導給媽媽系統。因此,爸媽系統之間的接口定義發生改變,將出現更大灰度,允許Simon模塊在灰度間做更多事情。
首先,需要重新定義的是Simon模塊的業務目標(注意,這是需求文檔的第一章,很多人認為不重要,其實很重要)。
這個業務目標應該是,可以使用知識庫獨立處理較為模糊的業務指令,并對爸爸系統輸入的指令進行修正和補充,盡量少地將無法處理的任務輸出給媽媽系統。
不難看出,Simon模塊正從一個簡單的執行模塊進行智能化升級。
其次,擁有了知識庫的Simon模塊,需要認識到自己正在向一個獨立的業務系統迭代,而不再是爸爸系統的子模塊,在這個過程中,會出現一些混亂,這是正?,F象。例如:接收爸爸系統的指令之后,通過知識庫分析后決定不執行,并在挨揍之后修正知識庫;接收爸爸系統的指令之后,通過知識庫分析后執行,其執行結果爸爸系統給予報錯后,如何處理,等等。
有了這個基本思路之后,我們返回業務場景進行重構。
03 重構的本質也許是視角的改變
讓我們再回到“拿藥”這個場景中,升級視角來處理這個問題。
余不贅述,當Simon接收到“問你媽”這個指令時,需要動用知識庫來分析這個指令。
第一步:偵測媽媽系統是否可用。偵測結果是,媽媽系統正忙,無法實時返回結果。
第二步:重新定義指令目標“拿藥”,發現可通過“把藥箱拿出來給爸爸選”這個方式達成業務目標,于是執行該決策。
顯然,在這種處理方式中,Simon模塊已經能夠分辨出當前最主要的業務目標是”拿藥”,“拿藥”與“問你媽”是存在邏輯關系的,即“問你媽”只是爸爸系統對于“拿藥”這個目標提出的一種解決方案,而不是與“拿藥”相并列的另一個業務指令。能夠分辨最高業務目標,與為完成目標而提出的解決方案,這是AI至今為止都很難企及的智能高度。
04 尾聲&實操:人應該這樣長大
如果我們要重構系統,那么必然系統在本次重構后,能執行一些和重構前不同的功能。給系統加功能不難,難的是這些功能加在哪個模塊,為什么需要這個模塊來執行而不是別的。
唯物辯證法講物質決定意識。因此系統設計也類似人與人之間的關系變化,或人體內部的關系變化。當一個模塊被賦予更多功能,或與其他系統的交互方式變得灰度更大時,我們要關注,這個模塊的智能化升級,會造成外系統的一些錯亂,要重構,就要把與之關聯的外系統通通檢查一遍,是否可適應這種變化,否則,重構是不可能取得成功的。
對于孩子其實是相同的道理,他們需要知道自己已被賦予更多自由度,也應該了解這些自由度代表著他們將對結果承擔更多的責任。
本文由@echo回聲 原創發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自Unsplash,基于CC0協議
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
爸爸說得對,確實不是兒子的錯。人類語言的缺陷。后天訓練不當,習慣性把指令和需求混為一談。指令和需求明明是兩個概念,非要變得模糊,容易產生誤解。系統設計原則越簡單越不容易出錯。這種場景下,兒子只是爸爸的手,手只能等爸爸的大腦把藥品信息傳過來,此時又傳來另一個指令,只是執行“問媽媽”指令,讓媽媽系統拋出異常了。要優化的是大人,把問題描述清楚,讓孩子獨立思考解決問題。
提煉為一句話:發現用戶真實的需求,以最小代價執行。