從軟件開發的“業務負債”,聊到“身體負債”

0 評論 1570 瀏覽 7 收藏 27 分鐘

對于業務同學,不管是從0到1完成一個項目,還是從1到2 迭代或者維護老系統,多多少少會因為客觀或非客觀因素,產生一些當時可控的“負債”,隨著時間的積累,那些當時以為可控的“負債”,慢慢“長大”,使得在項目隨后發展的過程中,復雜度越來越高、潛在的風險越來越大。本文將闡述我對于業務負債以及身體負債的一些思考。

一、負債的合理性與必然性

這個標題乍一看,會讓人感覺有點奇怪,“負債”合理且必然?這里先拋出一個觀點:解決負債的前提是“認可”負債,看見“不合理”事物的合理性是解決負債的前提,下來我依次談談關于負債的合理性和必然性。

1.1 熵增定律引起的必然性趨勢

首先熵增定律的定義是:在孤立系統中總是趨向熵增狀態,最終達到熵的最大狀態,也就是系統的最混亂無序狀態。例如房間很久不打掃,就會布滿灰塵;長久不騎的單車會生銹;交通系統臨時癱瘓,車輛很快就會堵死等等。熵增定律同時適用于一個系統的演化規律。我們為了對抗“系統”的混亂,為此做出的努力,可以看成了“逆熵”的過程。

想想我們為什么需要練習“正念”、“冥想”?,本質也是一種逆熵的行為,如果不加控制,“精神熵”會增大,我們會成為“思維”的奴隸,被思維反噬,我們希望思維是有序的,因此我們去正念、去看書,去整理我們的思緒。(思考:想想如何控制自己不去想一些糟糕的事?)

為什么我們要去健身?,本質上也是逆熵的過程,身體隨著時間慢慢衰老、身體激素水平、代謝水平開始慢慢降低、會對新鮮事情失去興趣,會覺得沒意思,這不是你的問題,因為我們的身體同樣也遵循熵增定律。去正念是對抗“精神熵”、去健身是對抗“身體熵”。

從熵增定律看軟件系統,我們會得到一個結論:系統的復雜度(混亂程度)隨著時間的推移,必然越來越高,復雜度導致了業務的開發、測試、運維各個階段負債增多,對于軟件設計的目的,可以總結為“逆熵的過程”。

1.2 因果律引起的合理性結果

因果率是事物發展的基本規律之一,在分析論中,有一個很知名的方法,叫5why分析法,意思是要看清楚一件事的本質,可以問自己五個為什么。我們舉幾個栗子:

問題:我最近狀態很不好。

第一個為什么:為什么我狀態不好?

答:因為我睡得太晚了,睡覺前老是看手機?

第二個為什么:為什么我老是看手機,到很晚才睡覺?

答:因為我工作了一天,辛苦了一天,還沒有一些自己的娛樂,我想晚上的時間才是真正屬于自己的。(在潛意識里,你不想結束這一天)

第三個為什么:為什么我不想結束這一天,直接去睡覺?

答:原因是:我的生活被各種事情“打擾”,我一直處于一個”中斷”的狀態,到了夜晚,我才可以專心做自己的事。

第四個為什么:為什么我的生活總是很凌亂,被很多人牽著走?因為我對于一天的要做的事和時間分配沒有一個清晰的計劃,換句話說,我也不知道今天要做什么,別人讓你做什么做什么。

第五個為什么:為什么我沒有一個很強的時間管理,總是被事拉著走?

答:…

看看這個demo,對于第一個why,大部分人都會告訴自己,早早睡覺就好啦,少看手機,到這里問題已經結束。事實證明,這很難做到,因為第一個why并沒有找到問題核心的原因。到第五個為什么,我們想到了時間管理。

當然這只是一種路徑,大家可以運用這種方法,不妨問自己幾個問題,逼迫自己去想一下問題的根源在哪里。在這里我想分享一下我的心得:對于大多數的問題的解決方案,最后的最后可能都會集中在三個問題上:如何做時間管理、如何做精力管理、如何做情緒管理。

1.2.1. 從具體到抽象

我們現在把上述的例子抽象化,從個性中找共性,嘗試得到一般性規律。

如下圖所示,我們可以把因果邏輯抽象成最基本的單元,事件A導致事件B,通俗的講,事件A就是時間B的第一個為什么。

如果我們再次追問原因,就可以把這個過程抽象成下圖,我們把它稱為一條因果邏輯鏈,或者思維深度,當一件事發生,往前追溯的事件數量越大,說明思維邏輯越深。

當然,實際的情況可能復雜的多,因為一件事情的發生,不能完全歸結于之前的一件事,而是之前所有事件的加權和,找到問題本質的難點其實是:找到影響因素最大的那個事件,如果判斷失誤,在錯誤的結論上,越跑越遠,結果往往會更加糟糕,這就是,方向錯了,越努力,死得越快。

如果以上叫做追憶往昔,那么下來我們想說說展望未來, 如果我們把視野看向未來,會得到以下的圖,事件B會對未來的事件產生加權后的影響。如果把5why分析法泛化一下,我們可以這樣問自己,今天做的事,會對明天產生什么樣的影響,它會產生什么連鎖反應。

現在我們把過去的因果和未來的因果放在一起看看就得到了如下圖。

因果邏輯鏈是一個很好的工具,它逼迫我們去思考從前,也思考未來,找到事情的本源,分析未來的趨勢。

面對軟件工程中的種種負債,需要用一種辯證且開放的心態看待,看到負債發生的必然性,通過深度思考,找到邏輯鏈條上那個最大的影響因素,肯定“負債”的合理性,是有效解決負債的前提。

1.3 康威定律帶來的溝通負債

康威定律揭示了組織架構溝通方式和系統設計之間的密切聯系,對于復雜的系統,系統設計離不開人與人之間的溝通,解決好了人與人的溝通問題,很大程度上就解決了系統設計問題。下面我們來論述溝通帶來的負債。

1.3.1 一對一溝通

針對一對一的溝通模式,我們可以借助通信系統中的通信模型很好地抽象這個過程。

從這個圖中,我們可以看到,如果想讓信息100%的無損傳遞,需要控制二件事:

  1. 編碼系統和解碼系統需要用一套。這就可以解釋不同背景和成長環境下的人對于同一句話有著不同的理解,因為他們有著不同的編碼和解碼系統!
  2. 信息在傳遞過程中,需要有一種對抗噪聲的算法,防止”壞人”篡改信息。

以上兩點,在通信工程實踐中是有最優解的,但是把信息源和接收源換成人,這件事就變得異常的困難,我們沒法用一套標準的“規則”要求人。從中我們可以得到一個結論:溝通是有損的,這是業務負債的一大來源。

1.3.2 多對多溝通

多對多溝通是一個更加復雜的場景,在多系統中如何讓信息有效的傳遞?(這像不像分布式一致性問題,推薦閱讀paxos、raft算法),大家都經歷過這種場景:開會中,我們希望對一個問題的答案或者解法得到一個共識,如下圖所示:

  • 當開會人數是3時,溝通次數最少是3*(3-1)/2=3
  • 當開會人數是4時,溝通次數最少是4*(4-1)/2=6
  • 當開會人數是5時,溝通次數最少是5*(5-1)/2=15

當開會人數是n時,溝通次數最少是n*(n-1)/2,這是可以得到一個炸裂的結論:溝通的復雜度是O(n2),也就是溝通的復雜度會隨著人數的增加,呈現指數增長趨勢。這個結論是悲傷的,悲傷的點在于:

  • 當你試圖通過人員增多解決問題時,你可能會把問題更加復雜化!
  • 項目的復雜度比項目的體量增長要快!

如上圖所示:直線代表著通過增加人數而帶來的勞動力,曲線代表著增加人數帶來的復雜度,在[0,臨界點]區間內,問題整體可控,在[臨界點,+∞]區間內,復雜度變高,債務出現。(問題:如何找到臨界點呢?)

以上的情況還是在信息可靠傳輸的情況下進行,如果加上損耗因子,我們會得到溝通帶來的損耗也是指數級的:如果損耗因子為k(0<k<1),損耗量:k*n*(n-1)/2,為了彌補這種損耗,往往還有加入更多的溝通才可以解決。這個案例很好地解釋了,小團隊相比大團隊的優勢。

如果把人換成系統,這不就是微服務分布式系統的通信問題,在中臺設計思路上,偏向于使用領域建模的方式把微服務拆分成邊界明確的小模塊,提高服用能力,但是這也帶來了服務數量爆炸、運維困難的問題。(這真是一種trade off?。?/p>

總結:溝通有損和組織成員溝通帶來的復雜度,是引起業務負債的另一大原因。

二、如何有序地消除負債 – 結構化思考

當我們需要解決一個復雜問題時,不妨從一個具體且相似的問題回答,找找相似點。

比如:如何減脂?說實話,這個問題也困擾了我很久,在減脂的路上反反復復,相愛相殺??偨Y一下,有這么幾點困難:

減脂的流派很多,網上的知識很零碎,對于小白來說,壓根不知道聽誰的,很難找到適合自己的方法(結構化思考)

減脂并非一朝一夕,你找不到一種固定的方法,一招吃遍天。不同的階段需要使用不同的方法。

大部分同學減脂,是為了瘦,但是瘦不是目的,健康才是。(目標一開始就錯了,一開始就背道而馳)

對于以上三個問題,不難聯想到:結構化思考,系統化思考。

問題會變化,解決問題的方式也需要變化,需要建立一個良好的反饋機制。

搞清楚為什么做,比怎么做更重要。

2.1. 結構化思考

2.1.1 結構化表達

結構化思考最重要的就是:把問題、知識、方法、靈感、或者步驟 …結構化的表達出來、變成你心中的一棵樹。

比如針對業務開發流程中可能引起的負債這一問題,可以把問題聚攏在下圖中:

針對不同時期,不同階段的問題,進行分類!進行分類!進行分類!重要的事說三遍,如果把不同的問題,看成是一類問題,會出事!

當歸類完成后,就需要針對性的,有主次地解決。在“資源”一定的情況下,需要先抓住主要矛盾,抓大放小,比如現網安全問題要比代碼規范問題優先級更高。

2.1.2 透過現象看本質

在思考《思考,快與慢》一書中,作者清晰的描述了,人的兩套系統,即系統1、和系統2,系統1的運作是無意識且快速的,不需要去消耗注意力,如判斷兩個蘋果的大?。炕卮?+1=幾?回家的路該怎么走?而系統2則是高度多樣化的,并且需要消耗大量的注意力,如,判斷股票的買賣時機、在嘈雜的環境中聽清某個人說了什么、一篇文章作者的意圖……

作者還提到了幾個比較有意思的點:

  • 系統1是不善于質疑的,人們會更傾向于憑借直覺解決生活中的問題(非理性思考)
  • 人們更愿意用一個簡單易懂的道理來解釋一個復雜問題。
  • 當系統1遇到困難時,才會激活系統2運行。

結合書中作者提到的點,針對解決業務負債的問題,我們需要摒棄系統1的常態化、慣性化思維模式、激發系統2的思維模式,這需要克服自身的惰性,并需要大量的時間進行深度思考,找到事情的“真相”。

2.2. 學習生物的智慧

人的一生的三分之一都用在睡眠上,有很長一段時間我在想人為什么要睡覺呢?不睡覺是不是就可以做更多的事,是不是就可以跑在前頭,直到一個無意的機會讀完了《睡眠革命》,才理解了睡眠的意義。

人的身體很像一個計算機系統,每個器官各司其職,協同完成一天的工作。日常生活中,大腦是一個極其活躍的器官,在運行期間,會產生大量的垃圾:淀粉樣β蛋白,在大腦緊張工作時,大腦會將清理工作推遲,只有到了睡眠時,尤其是深度睡眠時,大腦才會切換到清理模式。

換句話說:睡眠實際上是大腦的一種消除“負債”的有效手段(身體對抗熵的過程),這里還隱含了一個很重要的點:定期清理。身體不會一直累積負債,而是在合適的周期內定期處理。這也可以回答如何長期睡眠不足,身體沒辦法消除負債,時間久了,人會生病,系統也會“生病”。

下圖左邊是抽象了身體通過睡眠對抗負債的一個過程,右圖是業務償還負債的一個對應過程,這對于我們的啟發是:定期對業務進行復盤,找到負債,在可控的情況下解決負債,是一個不錯的選擇。(在問題沒有發生的時候,解決問題,代價最小)

2.3. 先扛住,再優化,抗住了,優化呢?

你有沒有遇到過這種場景:

產品側同學:業務同學緊急提出了一個需求,需要馬上支持,在下周三前上線。

技術側同學:按常規的做法需要a 、b、c,但是時間可能來不及,有一個快速的短期方案可以支持,但這種方案會產生a、b、c目前可以”容忍”的問題。經過了一番討論,決定先采取短期快速的方案優支持業務,等支持完業務后,再優化解決。

問題往往就出現在業務成功支持以后,我們還能不能想起當時“妥協”而產生的負債?及時優化,而不是讓“負債”長大。

這是困難的,在基因里,人們會對“壞”的事情,更加敏感,需要活下去,經歷了“事故”、經歷了“失敗”,人們往往更愿意去復盤,去優化。但是面對“成功”,人們往往會沉靜在喜悅中,這個時候“劈”你的雷可能已經上路了。面對成功的項目,需要慶幸,需要感謝,感謝供電局沒有停電。

三、從業務負債看身體負債

如果說業務負債,帶來的“痛苦”還可以“容忍”,那身體上的負債呢?系統掛了,可以修復bug、重新上線,身體掛了,什么都沒了。這一章我會闡述對于身體負債的一些思考。

3.1 身體系統與計算機系統的相似性

身體和系統有很多的相似性,每個人的身體好似一個分布式系統,每個器官各司其職,大腦類似cpu、眼睛、耳朵就像是io設備、食物類似于電…所以我在思考,能不能使用管理計算機的方式管理我們自己的身體,使身體也“高可靠”、“高可用”。

3.1.1 從運維方法看身體管理

在我看來:如何讓身體保持良好的“狀態”和如何運維好一個系統?是同一個問題。身體這個“系統”,在我們出生的時候就已經被創造,在出生到死亡之間,可以說一直處于一個運行維護的狀態。

有的人維護的好,可以和所處的環境達到一個“和”的狀態,愉快且充實的生活著,相反有的人維護的不好,生活質量變差,“精神熵”增大,負面情緒將控制你的生活。基于系統的相似性,那我們能不能借鑒常用的運維手段管理身體這個大系統?答案是:完全可以!

3.1.2. 身體也需要一個監控系統

對于運維,要去了解一個系統的好壞,最直接的就是看整個系統的關鍵監控曲線,比如整體服務的 SLA、關鍵接口的成功率、超時率等等,身體也是如此,我們去判斷自己的身體狀態不應該是靠感覺,而是靠數據、對比一個周期與上個周期的數據、才可以說,ok我身體變好了、我身體不如以前了。

之前有一則新聞:Kernel和OS Fund的CEO,布萊恩現在每年至少花費200萬美元,聘請30多名醫生和健康專家監測他身體的每一個機能,對于普通人,我們不可能做到這種地步,但是還是有很多可以操作的方法,比如以下三點即使每個人都可以輕松做到的。

定期體檢:

使用睡眠監測軟件,監控心率、血氧、睡眠周期(這里推薦autosleep)

定期記錄體脂和體重:

定期通過監控的數據去review,你會發現很多神奇的事情,這讓你會更加了解你的身體?;跀祿皇腔诟杏X。

3.1.3. 身體也需要一個日志系統

日志系統會幫助收集系統的運作過程,方便我們去定問和排查問題,身體也一樣!

小的時候應該都有寫日記的習慣,在一個風和日麗的下午….,ok,這里當然說的不是這種日記,而是記錄你身體狀態的日記。我們每天可以自己去記錄一些身體的關鍵數據,用來定期的復盤。我打個樣,如下圖:

剛開始我們可以降低難度,每天就記錄睡眠的時間和體重,主要是培養一個記錄的習慣,可能一天兩天你感覺不到變化,但是一個月兩個月,你就可以在一個長時間維度上,感受到你身體的變化。你會感受到,因為你每天健康飲食,給你自己帶來的好處。

3.2 如何有序的消除身體負債?

這里我分兩個方面去回答這個問題。

3.2.1 反饋機制

每個人的身體狀態和精神狀態是不同的,沒有一個固定的公式告訴你應該怎么去做,你需要自己去優化、去迭代,沒有只要做了什么就成功的案例,網上的方法也是零碎的,有的人講你要有氧、有的人講你要吃水煮、有的人說是你“濕氣”大….這些都是在一個小范圍內去討論問題,身體是一個系統工程,需要系統的方法論解決。

解決的前提是建立良好的反饋機制,良好的反饋機制又建立在數據和復盤上,我們需要通過數據,而非感覺去判斷一個身體的健康走向。數據又建立在一個習慣上,記錄身體在某個點的狀態,如,睡眠、體重、飲食等等等…

如果你是小白,你可以把記錄的數據定期拿給醫生,或者專業的運動營養師看,讓他們給你一些專業的意見、計劃上的調整。當你了解自己以后,你就可以自己去微調你的計劃。切記不要走極端,類似不吃飯了、突然去運動..物極必反,每個人自己最佳的平衡點需要自己去找,沒人可以幫助你。

3.2.2 心理健康更加重要

情緒對人的影響非常大,中醫上講大喜、大悲都是有害的,情緒化很容易讓人的心被困住,沒有強大的能量很難走出來,原生家庭可能會是人的情緒的很大的一個影響因素、這里推薦大家閱讀《被討厭的勇氣》、《當下的力量》,里面有一些可操作的方法去加強你的心理建設。

優化心態是一個很難的課題,這里我的一些建議是去看書,尤其是心理學和歷史學,世上都是重復的事,你的問題,別人已經總結好了方法,你拿來用就好。在一個長時間維度下,你去看事件,可能會給你一些不同的感受。

去正念,和鍛煉身體一樣,正念是鍛煉思維,人是很難控制自己的思維的,人創造了思維,又被思維困在其中。

總結

負債不可怕、擁抱負債吧,積極的解決可能是唯一的方法,最后希望大家都可以有序的、有節奏的解決自己的身體負債,業務負債。

作者:blithelv,騰訊后臺開發工程師

來源公眾號:騰訊大講堂(ID:TX_DJT ),聚焦前沿,打造互聯網人的高光時刻

本文由人人都是產品經理合作媒體 @騰訊大講堂 授權發布,未經許可,禁止轉載。

題圖來自 Unsplash,基于 CC0 協議

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!