如何停止在技術債上浪費時間?

2021-09-29 09:29:08 字數 1993 閱讀 7891

我經歷過太多的會議在這個話題上浪費大量時間。房間裡的每個人都情緒高漲,紛紛拿出各種傳聞軼事當作證據,最後往往是聲音最響亮的那個人的意見佔據上風。

然而,難題在於:如果業務上的壓力過大,那麼公司就會積攢過多的技術債務,從而導致工程師們失去動力,公司在技術上破產,最後獲勝的是你的競爭對手。如果工程上的壓力過大,那麼公司承擔的技術債務可能會太少,結果是你的競爭對手會以更快地速度推出新產品和功能、占領市場,然後用賺來的錢償還技術債務。這種局面下,你依然是輸家。

傳統觀點認為,工程團隊應該讓公司明白**庫中存在技術債務,以及技術債務對公司的影響,這樣才能獲得組織的信任。如果創立公司的首席架構師告訴你立即重構核心**,那麼你也應該照做。

為了留住人才,我們需要建立知識、分享和信任的文化。但這種文化的構建需要長期的努力,而另一方面我們在努力重構的時候,無法確定自己花出去的時間是否值得。我們的努力可以為將來節約時間嗎?或者,我們是否可以再等一段時間,先做新功能,然後再來償還技術債務?這個問題我們永遠都沒有答案,我們認為產品開發是個藝術行為而不是科學。

那麼,下面就讓我們從科學的角度看一看這個問題。

**的可靠性和技術債務預算的共同點有哪些?

妥善管理技術債務並認真做好技術債務計畫是乙個良好的開端。與金融債務一樣,如果我們能夠很好地掌控的話,就可以把債務當作槓桿撬起更多資金。但是,如果我們承擔了過多債務卻不自知,例如,沒有真正理解交易的條款,即對我們的**庫、客戶、團隊和業務的影響,那麼就可能將公司引向滅亡。

優秀的**可靠性維護工程團隊需要根據管理的技術債務,考慮**的可靠性預算。**可靠性是乙個由谷歌推廣的概念,旨在負責保持軟體產品的正常執行,然而有趣的是,即使谷歌這樣的公司也沒有以100%的正常執行作為目標。這是因為對谷歌的產品來說,99.99%的正常執行就足以讓現實世界的使用者覺得谷歌極其可靠了。最後的0.01%是乙個非常難以達成的指標,因此根本不值得為之奮鬥。

因此,只要某個方案能夠實現每年52分鐘的停機時間,谷歌就會全力以赴盡可能實現這個方案。他們會放棄任何能將停機時間減少到52分鐘以下的方案,選擇接受風險以便為客戶提供更巨集大的功能。

如上圖所示,當技術預算呈現紅色時,則應該支付部分負債。如果處於綠色狀態,則表明可以承擔更多風險並承擔更多債務。你的目標是盡可能地保持技術負債接近理想的水平。換句話說,如果你的技術負債呈現上圖紅色部分的頂峰,那麼理想的技術債務預算應該是a⇒b。如果你處於綠色部分的頂峰,則應該是b⇒c。請記住a ⇒c的預算太大了。

因為技術債務可以衡量(請參照我們的另一篇文章:所以這不僅僅只是個概念,而是切實可行的方法。

如何充分利用你的技術債務預算

技術債務預算的目標應該是讓債務下降或上公升到你可以容忍的最大技術債務。為了定義這個預算,你應該確認**庫中哪些區域的技術債務值得立即償還,即那些有礙於公司達成當前目標的技術債務。你償還的債務不能太少,但也不必償還太多債務。

並非一切都需要重構。如果不是關鍵性的功能,或者在未來幾個月內沒有人需要改進這個功能,或者這個功能太複雜,那麼就考慮作為技術債務。

簡而言之,你的目標是找到與當前sprint、當月或當季度**庫有交集的技術債務。償還這些有交集的技術債務,其餘的債務都可以放一放。

在這個過程中科學與藝術相輔相成。你可以通過資料來確定需要盡快償還的技術債務:

找出**庫中沒有所有權的檔案,因為**所有權是**庫健康狀況的主要指標。

衡量這些檔案的內聚和耦合,然後找到一組沒有所有權、低內聚和高耦合的檔案。

計算每個檔案的活躍度,找到關鍵的一組檔案。微軟研究院表明:「活躍的檔案僅佔系統總體大小的2-8%,佔系統檔案變化的20-40%,卻佔所有bug的60-90%。」

比較這些檔案與本季度的藍圖規劃。工程師在構建藍圖中的功能時,是否需要改動你找出來的這組檔案?如果是,那麼就應該將這些檔案作為重構物件,估算所需的工作,並將其分配給相應的工程師。而這些工作也應該納入你的計畫中。

與技術債務建立長期的關係

我們公司與許多世界級軟體公司一樣,都採用了這種資料驅動的方法。如今不僅大家更容易提出技術負債的問題,而且我們也知道我們願意承擔多少技術債務,以及何時、如何償還。我們無需再糾結我們是否在新功能和技術債務之間做出了正確的權衡。我們已經消除了大量的猜測,以及隨之而來的恐懼和焦慮。

技術人員如何」正確」的浪費時間?

linux 作業系統使用者如果要浪費時間,你就應該這樣做 編譯乙個 更快 的核心 通過源 編譯 firefox chromium 反覆調整字型 不停的美化桌面 閒著沒事就跑一下apt更新一下程式 和 windows 使用者打嘴仗 windows 作業系統使用者如果要浪費時間,你就應該這樣做 安裝防毒...

又在字符集上浪費時間

今天又花了許久折騰字符集的問題。這是第二次在字符集上浪費時間了。得寫下來,免得忘記了。折騰這麼久,其原因是mysql sql workbench的字符集是utf8。windows cmd下mysql的字符集是gbk。sql workbench下工作,應該設定字符集為utf8,這樣其輸入 查詢的結果集...

又在字符集上浪費時間

今天又花了許久折騰字符集的問題。這是第二次在字符集上浪費時間了。得寫下來,免得忘記了。折騰這麼久,其原因是mysql sql workbench的字符集是utf8。windows cmd下mysql的字符集是gbk。sql workbench下工作,應該設定字符集為utf8,這樣其輸入 查詢的結果集...