「我們不是在解決技術(shù)問題,我們是在解決一個被設(shè)計(jì)成無解的管理問題。」一位從業(yè)多年的工程師這樣吐槽。為什么每個季度OKR定得明明白白,年底復(fù)盤時卻永遠(yuǎn)有一堆"技術(shù)債"躺在那里?答案藏在軟件工程的工作負(fù)載設(shè)計(jì)里——它從一開始就被設(shè)定為"不可能完成"。
一圖看懂:SWE工作負(fù)載的"不可能三角"
![]()
想象一個三角形,三個頂點(diǎn)分別寫著:功能交付、代碼質(zhì)量、團(tuán)隊(duì)健康。傳統(tǒng)制造業(yè)的流水線可以三者兼顧,但軟件工程的特殊性在于——這個三角形的面積是固定的,你往任何一個頂點(diǎn)加碼,另外兩個必然塌陷。更糟的是,管理層往往只盯著其中一個頂點(diǎn)。
![]()
這張圖揭示了軟件工程師日常焦慮的底層結(jié)構(gòu)。不是你不努力,是游戲規(guī)則本身在制造結(jié)構(gòu)性矛盾。
拆解第一層:需求為什么永遠(yuǎn)"剛剛好"超出產(chǎn)能
軟件項(xiàng)目的估算誤差是系統(tǒng)性的。原文指出,工程師預(yù)估兩周能做完的功能,產(chǎn)品經(jīng)理聽到的往往是"兩周可以上線"。中間省略了什么?測試、聯(lián)調(diào)、文檔、意外bug——這些被樂觀假設(shè)為"應(yīng)該不會出大問題"的環(huán)節(jié)。
更隱蔽的機(jī)制是需求膨脹。每個功能在評審會上都"看起來不大",但實(shí)現(xiàn)路徑上的依賴鏈條從未被完整可視化。一個按鈕的改動可能牽出三個系統(tǒng)的接口改造,而這件事在排期時沒人知道。
結(jié)果就是:計(jì)劃階段的工作負(fù)載已經(jīng)是"理論最優(yōu)值",現(xiàn)實(shí)執(zhí)行中必然超載。這不是計(jì)劃失誤,是計(jì)劃方式本身過濾掉了不確定性。
拆解第二層:技術(shù)債的復(fù)利陷阱
為了趕上那個"剛剛好"的 deadline,工程師選擇走捷徑。臨時方案上線,注釋里寫著"TODO: 后續(xù)優(yōu)化"。但后續(xù)從未來臨——新的 sprint 已經(jīng)排滿。
技術(shù)債的可怕之處在于復(fù)利效應(yīng)。今天省下的2小時,下周可能變成8小時的調(diào)試噩夢。但考核指標(biāo)只看功能交付速度,債務(wù)的利息從不出現(xiàn)在任何人的KPI里。
原文沒有給出具體數(shù)據(jù),但描述了一個普遍場景:團(tuán)隊(duì)速度"看起來"在提升,因?yàn)槎攘康氖枪适曼c(diǎn)(story points)而非實(shí)際價值。 meanwhile,代碼庫正在以不可見的方式腐爛。等到崩潰那天,已經(jīng)沒人記得最初欠下的那筆小債。
拆解第三層:為什么"加人"總是越幫越忙
經(jīng)典的《人月神話》觀點(diǎn)在本文中被重新激活:軟件工程不是搬磚,增加人手不會線性提升產(chǎn)出。但管理層面對延期時的本能反應(yīng)仍是擴(kuò)招——這反而加劇了工作負(fù)載的不可完成性。
新人需要培訓(xùn),培訓(xùn)需要老員工時間,老員工時間被切割后自己的任務(wù)更完不成。代碼庫因此變得更復(fù)雜,理解成本更高,下一輪招聘的需求更迫切。這是一個自我強(qiáng)化的惡性循環(huán)。
原文的尖銳之處在于指出:這個循環(huán)對管理層并非壞事。團(tuán)隊(duì)擴(kuò)張本身就是政績,"我管了50人"比"我交付了5個功能"更有簡歷價值。工作負(fù)載的不可完成性,某種程度上是組織膨脹的燃料。
拆解第四層:度量體系的扭曲效應(yīng)
如果無法完成是常態(tài),為什么沒人反抗?因?yàn)槎攘矿w系被精心設(shè)計(jì)為回避核心矛盾。
![]()
代碼行數(shù)、提交頻率、故事點(diǎn)完成量——這些可量化的指標(biāo)共同構(gòu)成了一座"績效景觀"。工程師被迫在景觀中表演忙碌,真正的工程復(fù)雜度被排除在可視范圍外。原文描述了一種荒誕:團(tuán)隊(duì)?wèi)c祝"本周關(guān)閉了120個ticket",同時系統(tǒng)架構(gòu)的裂縫正在擴(kuò)大。
更微妙的是"可見性政治"。做重構(gòu)、補(bǔ)測試、還技術(shù)債,這些工作的價值難以在周報(bào)中呈現(xiàn)。而上線新功能可以截圖、可以演示、可以寫進(jìn)匯報(bào)。理性選擇之下,每個人都優(yōu)先做"看得見"的事,系統(tǒng)性的不可完成性因此被加固。
拆解第五層:個體策略與集體困境
面對結(jié)構(gòu)性無解,工程師發(fā)展出各自的生存策略。有人成為"救火隊(duì)長",專解緊急問題以獲取存在感;有人深耕特定模塊,制造不可替代性;有人頻繁跳槽,在技術(shù)債爆發(fā)前離場。
這些策略對個人理性,對集體卻是災(zāi)難。知識孤島加劇,文檔更加缺失,新人 onboarding 成本飆升。工作負(fù)載的不可完成性從設(shè)計(jì)層面滲透進(jìn)執(zhí)行層面,成為自我實(shí)現(xiàn)的預(yù)言。
原文沒有指責(zé)任何一方,只是呈現(xiàn)了一個囚徒困境:如果所有參與者都按個體最優(yōu)策略行動,系統(tǒng)必然滑向集體最差均衡。而打破困境需要協(xié)調(diào)成本,協(xié)調(diào)成本無人承擔(dān)。
那怎么辦?原文沒給答案,但給了線索
文章結(jié)尾沒有提供"五步解決法",這本身是一種誠實(shí)。但字里行間透露出幾個可能的破局點(diǎn):
第一,承認(rèn)不確定性。將估算從"承諾"改為"概率分布",給意外留出緩沖空間。這需要管理層的認(rèn)知升級,也需要工程師敢于說"我不知道"的勇氣。
第二,度量真實(shí)價值。不是故事點(diǎn),不是代碼行,是功能上線后的用戶行為變化。這需要打通工程與業(yè)務(wù)的反饋閉環(huán),短期看增加成本,長期看減少無效勞動。
第三,技術(shù)債顯性化。把"還賬"排進(jìn)正式 roadmap,像對待功能需求一樣對待重構(gòu)。這需要產(chǎn)品、工程、管理層的三方博弈,但博弈的前提是債務(wù)被看見。
第四,控制團(tuán)隊(duì)規(guī)模。接受"小團(tuán)隊(duì)慢交付"的現(xiàn)實(shí),抵制擴(kuò)張沖動。這對管理者的職業(yè)發(fā)展是反直覺的,但對系統(tǒng)的健康是必需的。
最后:這件事為什么重要
軟件正在吃掉世界,而軟件工程師的工作負(fù)載設(shè)計(jì)正在吃掉軟件工程師。這不是某個公司的管理問題,是行業(yè)性的結(jié)構(gòu)性缺陷。理解它的"不可能"本質(zhì),不是為了躺平,而是為了在認(rèn)清游戲規(guī)則后做出更清醒的選擇——無論是繼續(xù)玩、改變規(guī)則,還是換一張桌子。
畢竟,知道自己在跑步機(jī)上,至少可以調(diào)整配速。最怕的是以為自己在沖刺終點(diǎn),其實(shí)只是在原地消耗。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.