技術債不是負擔,而是成功的戰略槓桿

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在產品與工程之間最常見的矛盾之一是優先處理技術債。何故、何時以及如何處理技術債對組織和獨立團隊來說,都特別具有挑戰性。常聽到的問題有:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如何在技術債和特徵工作之間取得平衡?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"應當在技術債上多花點時間。何時纔是解決問題的最佳時機?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果領導團隊連我們的技術棧都不瞭解,我又如何說服他們投資解決技術債的問題?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很多這類問題都是出於這樣一個信念:技術債應該儘可能地低到零。但"},{"type":"text","marks":[{"type":"strong"}],"text":"公司和產品絕不會因爲擁有儘可能少的技術債而取勝"},{"type":"text","text":"。快速交付,率先進入市場,以及不斷地爲產品增加價值,這些都是取勝的因素。而要想取得更多的勝利,大部分技術債的積累都有意義,是一種交換。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"正如現實生活中的債務一樣,如果你現在承擔技術債,那麼今天你就能得到有價值的東西,並且在一段時間內償還。這就是說,你應該將技術債視爲組織長期成功的"},{"type":"text","marks":[{"type":"strong"}],"text":"戰略槓桿"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要把技術債視爲戰略槓桿,你需要:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"確認並努力解決圍繞技術債的負面假設。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"分類和區分技術債的類型。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"評估技術債。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","text":"在公司更廣泛的"},{"type":"link","attrs":{"href":"https:\/\/www.reforge.com\/blog\/product-work-beyond-product-market-fit","title":"","type":null},"content":[{"type":"text","text":"產品工作組合"}]},{"type":"text","text":"和階段中確定優先次序。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"阻礙真正談論技術債的成見"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本節將介紹導致技術債管理不善的 4 個基本假設:技術債被定義爲具有歷史意義的工作,它在功能、穩定性或速度等方面造成問題,如果以當現眼光來看待。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"假設 1:技術債 = 壞賬"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"假設 2:所有技術債 = 複雜的工作"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"假設 3:技術債 ≠ 產品工作"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"假設 4:個體痛苦 = 組織痛苦"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/43\/7a\/43e6d3473e461b73b8611b85fd04267a.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"假設 1:技術債 = 壞賬"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"毋庸置疑,技術債有着壞名聲。解決技術債的一個難題是,你面對技術債的類型可能差異很大:一次小規模的實驗性推廣在本質上無害,但由於依賴多個服務,一種產品的重新設計可能會變得棘手。然而,由於未知的原因,大部分技術債都歸爲“不良”或“累贅”。其中一些未知因素的例子包括:業務影響可能缺乏 \/ 不明確 \/ 很難闡明,或者仍然無法確定其所需的工程時間。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,爲了反駁“技術債 = 壞賬”的假設:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不應將所有技術債歸爲單一的“壞賬”類別。將所有的技術債歸入同一類別,會使人們感到解決優先級的問題很單調,因爲這(看上去)和問題完全相同。那就像把所有的產品工作都歸入“特性”。最好是把技術債分類,"},{"type":"text","marks":[{"type":"strong"}],"text":"通過命名和評估痛苦來“打破”技術債"},{"type":"text","text":",這樣每個項目都可以獨立存在,並且有機會被解決。在本文後面,我們將討論命名和評估的問題。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"有些技術債很好,每個團隊都需要有技術債"},{"type":"text","text":"。這樣做很有必要,因爲這表明團隊並沒有盲目關注技術債,而是同時強調核心業務領域(如新產品開發、實驗、合作伙伴支持等等)。每一家成功的公司都會在積累債務的同時擴大業務規模。把技術決策放在業務決策之前常常意味着組織不會活着看到自己的成長。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從戰略角度來看,"},{"type":"text","marks":[{"type":"strong"}],"text":"Twitter"},{"type":"text","text":"上有一個關於技術債的具體例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自 2006 年成立至 2014 年,Twitter 通過公開可用的存儲系統來擴展其產品和平臺。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與早期建立內部系統不同,他們依賴並貢獻於開源數據庫。最有可能的原因是團隊在其他關鍵業務方面取得了驚人的進步(獲得用戶、交付功能、"},{"type":"link","attrs":{"href":"https:\/\/www.reforge.com\/blog\/monetization-vs-growth-its-a-false-choice","title":"","type":null},"content":[{"type":"text","text":"盈利"}]},{"type":"text","text":"、IPO 準備)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2014 年,Twitter 發佈了下一代分佈式數據庫"},{"type":"link","attrs":{"href":"https:\/\/blog.twitter.com\/engineering\/en_us\/a\/2014\/manhattan-our-real-time-multi-tenant-distributed-database-for-twitter-scale","title":"","type":null},"content":[{"type":"text","text":"Manhattan"}]},{"type":"text","text":",該系統能在實時環境下以極低的延遲處理每秒數百萬次的查詢。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於推遲了投資(並積累了各種技術債),Twitter 在運營的第一個 8 年裏取得了顯著進步,隨後就需要 Manhattan 從核心存儲角度來支持下一階段的發展。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“在 Headspace 團隊,我們同時或快速連續地進行實驗。開發者和項目經理將一起做出一個折衷的決定,即暫停清理實驗。我們基本上是偷工減料來啓動實驗,然後留出一週清理一堆死代碼。事實上,我認爲這種技術債是積極的,因爲:[1] 它使工程師們可以集中精力於清理和維護,而不必在新的開發工作中進行環境切換,[2] 如果最新的實驗結果出現,提供了一些新的信息,從而改變作出決策的可能性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"——Keya Patel (Reforge OIR,Headspace 的前產品發展總監)"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要解決假設 1 的問題:技術債 = 壞賬:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"既然積攢技術債,留待下個月解決,我們能得到什麼?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"哪些情況下管理團隊會對該領域的技術債感興趣?有什麼信息可以提供給 CTO 來幫助他們更有效地宣傳?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一舉措是怎樣轉化成一個更大的企業願景或戰略方向的?"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"假設 2:所有技術債 = 複雜的工作"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"正如其他具有挑戰性的工作一樣,不僅僅是技術債,有幾種方法來處理複雜性。特別是技術債,有幾種處理已定義和未定義的問題的方法。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"已定義"},{"type":"text","text":"= 工作有明確的開始和結束。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通往終點的道路可能無痛,也可能艱辛(取決於技術債的類型和規模),但有明確的結論和方法。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這種假設在技術債可以被定義的情況下會被推翻。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"未定義"},{"type":"text","text":"= 工作有開始,終點卻沒有明確。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與“盒子裏”定義的技術債相比,這更難解決和管理預期。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於在 Reforge 的“"},{"type":"link","attrs":{"href":"https:\/\/www.reforge.com\/scaling-product-delivery","title":"","type":null},"content":[{"type":"text","text":"擴大產品交付"}]},{"type":"text","text":"”項目中進行了深入的討論,在這種情況下,由於"},{"type":"text","marks":[{"type":"strong"}],"text":"預先加載了一些工作"},{"type":"text","text":",很有可能轉到一個更明確、不太複雜的狀態。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可預加載的工作包括:定義問題,從高層定義所有可能的解決方案,以及確定如何 \/ 何時實際進行修復或實施。需要注意的是,預加載的工作並沒有涉及任何執行,而是有助於瞭解可能的前進方向。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如,團隊可以設置臨時里程碑來降低技術債的複雜性。或者,團隊通過獲得更多的歷史信息,或花時間創造一個解決方案,從而從未定義轉變爲已定義。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了反駁“技術債 = 複雜的工作”的假設:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要清楚手頭的技術債是否被定義。假如已定義,要知道完成該工作預計需要的時間或天數,並給一些緩衝時間。假如未定義,"},{"type":"text","marks":[{"type":"strong"}],"text":"儘可能多地列出不清晰的地方,以說明爲什麼"},{"type":"text","marks":[{"type":"strong"},{"type":"strong"},{"type":"strong"}],"text":"該"},{"type":"text","marks":[{"type":"strong"}],"text":"工作比較複雜"},{"type":"text","text":",並且沒有明確的結束日期,然後再與利益相關者溝通,獲取關於如何推進工作的最佳方法。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"把未定義的技術債分解爲更易於消化的工作,從而減少複雜性。如果你從大面積的複雜工作轉移到小塊、"},{"type":"text","marks":[{"type":"strong"}],"text":"複雜但又容易操作的工作中"},{"type":"text","text":",團隊在一次 Sprint 或季度的規定時間內解決技術債方面的問題上更有動力。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“我們在 5 年內重寫了 Credit Karma 的機器學習數據系統 3 次。每次重寫的時候,技術負責人都相信這是很長一段時間內的最後一次重寫。當時,他們做出了最好的決定,將重寫作爲定義工作,這是必須完成的。但如果你想一想,這項工作是沒有定義的,因爲公司和數據系統的發展和變化,你都無法預料。如果我們真的把它看作未定義的、不斷髮展的工作,那麼,因爲沒有固定的終點,也許就更容易有新的想法了。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"——Matt Greenberg(Reforge CEO,前 Credit Karma 的工程副總裁)"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要解決假設 2 的問題:技術債 = 複雜的工作:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於該系統,我的哪些假設可能是錯誤的?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"假如我邀請對該領域更有經驗或更熟悉的人,我應該問他們哪些最重要的問題?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我的團隊是否有合適的人員和知識來完成該工作?如不能,我如何重新安排信息,以及什麼時候才能最適合解決該問題?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對那些對複雜情況一無所知的人,如何最好地分解這種技術債?"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"假設 3: 技術債 ≠ 產品工作"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"組織非常清楚他們所進行的產品工作將如何推動公司的指標——將每項實驗、功能或改造與核心業務目標或 OKR 改進聯繫起來。技術債通常缺乏這種明確性,因此它與產品工作不正確地脫鉤。解決技術債問題對於在合適的時候促進增長非常重要,即使它不會被立即量化。這有助於提高用戶對軟件的體驗,或者幫助公司開啓未來新功能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了反駁“技術債≠產品工作”的假設:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"即便技術債的某一特定領域並非直接"},{"type":"link","attrs":{"href":"https:\/\/www.reforge.com\/blog\/north-star-metric-growth","title":"","type":null},"content":[{"type":"text","text":"與指標掛鉤"}]},{"type":"text","text":",也要廣泛地考慮它可能對未來用戶和產品體驗有幫助。"},{"type":"text","marks":[{"type":"strong"}],"text":"同時強調這些用戶和產品的好處"},{"type":"text","text":",而非僅僅強調技術上的好處,將有助於其他人描繪出爲什麼團隊需要關注這項工作。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"分配時間來驗證業務線索和技術線索是否一致"},{"type":"text","text":"。實現這一目標的途徑是,產品與技術主管進行兩週一次的對話,即產品與技術領導者之間的對話;建立聯合的 Slack 渠道來展示技術債和影響;或者直接邀請合適的技術代表參加季度路線圖預覽。技術與產品之間的聯繫更爲密切,讓我們有機會在解決技術債的新實驗中,哪些地方可能會出現中斷,或者工程副總裁關於前 2 個基礎設施相關請求如何整合。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“在 Airbnb,我們圍繞面向服務的架構對我們的整個技術棧(1000 多萬行代碼)進行了大規模的重構,其重要原因之一就是實現一個能夠啓動多種其他業務的平臺。在此之前,我們討論的重點是開發者的生產力、團隊士氣以及其他以技術爲中心的投資理由。我們意識到重構對解鎖業務線也很重要,並且這一工作最終被列爲公司上市前 S-1 文件中的六大優先事項之一。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"——Zainab Ghadiyali (Reforge OIR,Airbnb 平臺的前產品主管)"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要解決假設 3 的問題:技術債 ≠ 產品工作:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在開展工作的最大理由是什麼?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"誰都需要理解它的影響?爲什麼要關心這個?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我想說的是什麼?它符合利益相關者想聽到的東西嗎?如果不是,我如何解決他們的憂慮呢?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我 \/ 團隊認爲該工作的合理的結果與偉大的結果是什麼?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對預期的結果承諾是否過高?爲確定期望,能把結果分成好的和偉大的嗎?"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"假設 4: 個人痛苦 = 組織痛苦"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"工程師或者其他技術債關係密切的人常常會反覆說,技術債對他們來說是痛苦的。他們可能會爲糾纏於某些史前代碼的 QA 而苦苦掙扎,或因爲團隊花太長時間採用一種新的編程語言而想放棄。對於他們來說,這位員工可能會覺得這是世界末日,而組織中其他成員可能也不會感到同樣的痛苦(如果他們注意到的話)。這對那些在職業生涯早期的人來說尤其普遍,因爲缺乏更廣泛的戰略背景,他們的痛點似乎是最重要的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了反駁“個人痛苦 = 組織痛苦”的假設:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你已進入高優先級技術債領域,那就花一點時間來"},{"type":"text","marks":[{"type":"strong"}],"text":"評估這是個人還是組織層面的痛點"},{"type":"text","text":"。一般來說,組織層面上的痛點可以直接影響到客戶或者業務。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從比你更有組織背景的人的角度考慮問題。你甚至可以向不同團隊的人表達痛點。假如你的"},{"type":"text","marks":[{"type":"strong"}],"text":"個人觀點適用於更廣泛的領域"},{"type":"text","text":",在其他受影響的同行和團隊的支持下繼續展示它。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“在我職業生涯的早期,我和團隊正在準備一場重要的客戶演示,這次演示可以帶來一大筆銷售額。爲了做演示,我們偷工減料,時間很緊。在演示開始前的週末,另一個團隊的一位工程師對我們的代碼庫進行了重大改動。他們啓用了一項新特性,他們相信這將會是一個令我們高興的時刻,但我們感到巨大的壓力而又要退回。此時此刻,我才意識到背景的重要性,我的首要任務並不是其他人的首要任務。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"——Matt Greenberg(Reforge CEO,前 Credit Karma 的工程副總裁)"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要解決假設 4 的問題:個人痛苦 = 組織痛苦:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對這些技術債的分類和解決方案有多少表面區域或團隊能從中獲益?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"什麼時候對承擔技術債的個人予以表彰或獎勵?那時是什麼樣的技術債,爲什麼需要它?能否跟那個人談談他們是如何定位這項工作的?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"經理了解技術債工作的價值嗎?在績效考覈中,他們會不會提倡我爲這項工作所做的貢獻?"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"技術債的六種類型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"技術債通常是個很大的總術語,包括從延遲速度、安全漏洞、重構到其他所有東西。"},{"type":"text","marks":[{"type":"strong"}],"text":"你需要了解你可能承擔的不同類型的技術債,將其作爲戰略槓桿"},{"type":"text","text":",而非總術語。這種分類將幫助整個組織的個人更好地瞭解手頭的技術債的類型和涉及的內容,而不是含糊地談論“技術債”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下面是團隊遇到的 6 種主要的技術債類型。值得注意的是,一個技術債可能不僅僅屬於一種類別,這使得它有可能成爲一個更關鍵的工作來解決。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/ab\/29\/abcd9d9674bb0a9a4117b40631cbaa29.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"維護債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是什麼?團隊沒有跟上技術工作的更新。這包括在"},{"type":"link","attrs":{"href":"https:\/\/www.reforge.com\/blog\/good-experiment-bad-experiment","title":"","type":null},"content":[{"type":"text","text":"實驗啓動"}]},{"type":"text","text":"\/"},{"type":"link","attrs":{"href":"https:\/\/brianbalfour.com\/essays\/how-to-launch-a-product-or-feature-to-maximize-growth","title":"","type":null},"content":[{"type":"text","text":"特性推出"}]},{"type":"text","text":"\/"},{"type":"link","attrs":{"href":"https:\/\/www.reforge.com\/blog\/unshipping-features","title":"","type":null},"content":[{"type":"text","text":"取消發佈"}]},{"type":"text","text":"事件後,沒有在正確時間刪除死代碼,更新庫,註釋上下文中的代碼片段,並記錄實現決策。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"維護債務的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"沒有爲“使用 Spotify 登錄”帳戶創建實驗清理數月前的代碼。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"帶領一位新工程師將 Spotify 登錄納入了他的第一輪功能工作的技術範圍和文檔中,因爲他認爲實驗已經開始了。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實際上,最初的實驗結果是負面的,團隊沒空清理他們的代碼,因爲他們必須繼續進行新的實驗。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"新工程師感到很沮喪,因爲 (a) 在他開始調查時,沒人告訴他這是由於死代碼造成的維護債務;(b) 沒有制定團隊流程來清理或至少注意到需要刪除的代碼。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"開發者效率債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是什麼?組織在產品上沒有正確的測試、監控和 \/ 或警報。這是一種常見的債務類型,其中工程工作流效率很低,部署和構建時間可能要花費數小時或數天,而開發者缺少可以在產品上線之前發現技術問題的工具。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"開發者效率債務的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果組織的工程師在一年內從 15 名增加到 50 名,由於在過去半年裏在表面區域做了大量的實驗,所以沒有爲新的購買體驗設置全面的測試和警報。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"結果,至少有 2~3 個版本的產品在生產中發現了 bug,團隊必須迅速跟進並修復它們,因爲它們被優先列爲高嚴重性 bug。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"具有采購流程所有權的團隊將留出時間,在 Staging 中對關鍵業務進行適當的測試和修改。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"穩定性債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是什麼?當組織建立不同類型的技術債時,又會影響其基礎設施的穩定性。這就導致了這樣的情況:你不是主動去管理待命人員,而是必須通過找主題專家或者間接地讓整個團隊待命,以被動的方式來管理待命人員。對於工程師和待命輪換團隊來說,這成了很大的痛點,但公司其他人並不瞭解這個問題。穩定性債務還會影響產品的可靠性,使之成爲面向客戶的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"穩定性債務的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果是移動應用(iOS、安卓),團隊會優先考慮 iOS,因爲在工程團隊中 iOS 開發者較多。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,安卓應用缺少圍繞關鍵業務流程(和需要到位的測試)的基本產品指導,並且還有 kryptonite 代碼,這是由第三方供應商開發的初始功能。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當用戶試圖訪問舊的功能時,安卓應用會崩潰。最後,這個產品在 Google Play 商店因其質量不可靠和經常出錯而受到差評。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"安全性債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是什麼?當技術堆棧中存在問題時,使得公司暴露在安全漏洞之下,比如暴力獲取密碼信息、數據泄露,或者競爭對手知道如何收集機密信息。這是因爲人類很難計劃和評估可能(或不可能)發生的假設,所以大多數組織都有大量安全性債務。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"安全性債務的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果一家公司因爲內部流程的失誤,並且沒有分配正確的時間進行更新,未能修補某個已知漏洞,就會發生數據泄露。這導致了數以百萬計的客戶個人資料被泄露。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這種情況一直都在發生,其中有一些不知名公司的小事件,也有像 2017 年 Equifax 這樣的重大違規事件(影響到 1.4 億多人)。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"技術產品債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是什麼?當產品受到明顯的負面影響時。這項工作最容易解決,也最有說服力,因爲它對用戶有明顯的影響,而且是向外的,組織中任何團隊都能看到對客戶和銷售 \/ 收入的影響。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"技術產品債務的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當用戶在產品中加載某個特定動作時,明顯需要額外的幾秒鐘。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然這可能是由開發者效率債務、穩定性債務或維護債務等潛在原因造成的,但它顯然會影響到對核心產品的體驗。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"決策債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是什麼?當過去的技術決策在 X% 是錯誤的,或者在範圍、時間或資源方面存在一些權衡,而現在團隊要爲此付出代價。它通常是最常見的技術債形式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"決策債務的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最初,有個團隊決定用第三方供應商在他們的網站進行實驗。經過幾年的蓬勃發展,這個產品的網站每天都有數百萬的獨立訪客。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,工程、數據和產品團隊很難"},{"type":"link","attrs":{"href":"https:\/\/www.reforge.com\/experimentation-testing","title":"","type":null},"content":[{"type":"text","text":"同時進行復雜的實驗"}]},{"type":"text","text":",因爲供應商在流量、受衆細分和排除等方面不能輕鬆地支持團隊。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"該問題是因爲團隊在選擇供應商和建立內部實驗工具時做出了權衡的決策,所以出現了決策債務。當時,這也許是正確的決策,但現在對了解團隊的受衆和流量需求對實驗結果的影響很大。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"評估技術債:急性與系統性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當你瞭解了將要承擔的技術債的類型,需要確定它的成本,這樣你就能將它與將得到的回報相比較。當團隊問“我們什麼時候纔有時間處理技術債?”這一合理問題時,在時間、思想和努力方面,你很難知道這些問題涉及的是小事還是大事。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"評估技術債有個範圍,從急性到系統性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/65\/ca\/6571de7a9a47d2a7bea71bff5a9cf3ca.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"急性技術債"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"較小規模的技術債。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例子:爲了推出新特性,團隊跳過了一些事件測量、監控、在較少使用的平臺 \/ 瀏覽器上的實現等等。團隊能夠輕鬆地加入更新,並且可以迅速完成(如果沒有其他障礙,則 <1 天)。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"系統性技術債"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"相對較大到巨大的技術債。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例子:CTO \/ 創始人在 5 年前作出了一項產品(也是間接的技術)決策,從那以後,團隊就一直爲這個決策的影響而奮鬥。更改決策意味着它將會影響到他們以後做出的每一個決策。它可以是關於核心產品設置、關鍵功能投資或用戶體驗,以及由此產生的設計 \/ 技術架構的決策形式。團隊不能輕易地解決這種技術債,並且需要數月甚至數年才能完成。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"急性 > 系統性的例子:開發者效率債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"值得注意的是,每種技術債都可以從其急性規模到系統性規模來衡量。例如,對於開發者效率的債務來說:"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"急性開發者效率債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於只有 10% 的產品用戶接觸到的 MVP 推薦特性實驗,工程師沒有編寫 Selenium 測試。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因爲整個團隊都承諾要在實驗開始之前手工恢復這些特性,所以他們沒有編寫測試。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"工程師後來花了"},{"type":"text","marks":[{"type":"strong"}],"text":"數個小時"},{"type":"text","text":"加入測試,準備下一輪推薦實驗。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"系統性開發者效率債務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於沒有編纂測試和警報的實踐,他們現在感受到了幾年來產品指數級發展的痛苦。每一天至少有幾次生產事件會影響用戶,而 NPS 得分也在逐月下降。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當對新開發進行平衡時,添加所有測試和警報不可能在一夜之間完成。因此,技術主管的次序是:從創建測試和警報準則開始,本季度將這些準則應用到關鍵表面區域和特性 (P1),然後是下一季度 P2 區域,再然後是下一季度 P3 區域。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在今年底或以後的 7~9 個月內,產品的所有領域都應按照新制定的準則,進行統一的測試和警報。所以,隨着 P1 (以及隨後的 P2、P3) 領域的解決,每日 \/ 周事件的數量應該會減少,客戶情緒會開始上升。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"從戰略上優先考慮技術債"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"迄今爲止,我們已經歷過與技術債相關的假設、分類和規模。當你瞭解了這些知識後,你就可以在產品決策這一大背景下作出戰略決策。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"調整技術債的優先次序"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"戰略性地看待技術債,關鍵是要了解什麼時候把技術債擴縮地放到其他產品開發的優先次序中。要正確管理技術債,可以考慮以下幾個向量:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/08\/e7\/0866782cd2bc19f1ba0ef9eee6dd1ee7.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"信心"},{"type":"text","text":":這樣做有可能給團隊造成嚴重問題嗎?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"時間"},{"type":"text","text":":這將在什麼時候成爲一個問題?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"對用戶的影響"},{"type":"text","text":":不這麼做是否會導致速度和質量問題影響用戶體驗?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"次序"},{"type":"text","text":":這是否會妨礙團隊完成重要的里程碑?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"累積的債務"},{"type":"text","text":":你選擇累積的債務有多少?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在此基礎上,每個向量應該按照低優先級到高優先級的標準進行分類:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/0b\/b6\/0b4fe01fea0436fd1936470b3e6d23b6.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"信心"},{"type":"text","text":":技術債由低到高引發重大問題的可能性在哪裏?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"時間"},{"type":"text","text":":在不緊急到緊急的範圍內,這部分技術債什麼時候會成爲一個問題?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"對用戶的影響"},{"type":"text","text":":在從低到高的範圍內,在什麼地方不做這種技術債,會導致速度和質量問題,並損害用戶體驗?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"次序"},{"type":"text","text":":在影響最小到影響最大的範圍內,這種技術債會在哪些地方阻礙團隊完成重要的里程碑?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"累積的債務"},{"type":"text","text":":已累積的技術債的數量在最小到最大的範圍內下降到哪裏?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這取決於技術債在整個綜合規模中的位置(如下圖所示),就很容易理解如何戰略性地使用技術債應對公司的其他舉措:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於技術債持續惡化會損害其他產品和業務計劃,需要儘早解決嗎?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"是不是需要臨時的補救措施,以便暫時開發更具潛力的項目?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於優先級低,特別是在於公司 \/ 團隊的其他計劃重疊的情況下,這實際上是一個可以等待清理期的技術債。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/a7\/ba\/a74692b5244bc452bcea48736e7439ba.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從上圖來看,很明顯,需要儘早解決系統的技術債,因爲出現重大問題的可能性很大,問題很快就會迫在眉睫,債務會對達到既定的里程碑產生巨大的影響,而且已經產生了大量的累積債務。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"若某些向量(如對用戶和順序的影響)較小,而且在左側,則可以通過快速解決或在接下來幾個月中解決問題的方法來"},{"type":"text","marks":[{"type":"strong"}],"text":"補修"},{"type":"text","text":"問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"若更多的向量(如對時間的影響、對用戶的影響和順序等)都比較小,而且在左側,就有可能使這個領域的技術債在將來有意義的時候"},{"type":"text","marks":[{"type":"strong"}],"text":"積壓"},{"type":"text","text":"起來。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於每一種情況(解決、補救、積壓),都必須認真考慮技術債問題,跨越每個向量和從低到高的優先級範圍。"},{"type":"text","marks":[{"type":"strong"}],"text":"用這種方式評估技術債能夠使團隊作出最佳的戰略決策"},{"type":"text","text":",以決定如何向前推進,而其他公司的舉措也在考慮之中。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"你的戰略技術債組合,基於公司的成長階段"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一個戰略性地解決技術債問題的方法是基於技術債類型和組織規模來確定技術債組合。在 Reforge,我們將它歸類爲基於公司 S 型曲線的四個成長階段:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/3c\/62\/3cc3b45cb7e9f1eba6c365f19042f562.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"牽引"},{"type":"text","text":"= S 型曲線的底部,產品上市前市場契合度。線性的、不可擴展的努力,使成長的引擎運轉。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"拐點"},{"type":"text","text":"= S 型曲線的彎曲部分,產品市場適合小規模的明確信號。由一個不可擴展的增長循環轉變爲一個可擴展的增長循環。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"規模"},{"type":"text","text":"= S 型曲線的超增長部分。優化核心增長循環。在有效的方面下雙倍的注。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"膨脹"},{"type":"text","text":"= 接近 S 型曲線的頂部,飽和度開始上升。PMF 膨脹需要考慮,整個流程的重新啓動,或者在新的增長循環上分層。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與 S 型曲線相關,每一種技術債都應該根據公司的成長階段得到適當的平衡。下面直觀地顯示,隨着組織的發展,需要考慮技術債(按技術債類型)的分配的準則,以供參考。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/resource\/image\/14\/90\/14035deb83bdb974b53d8e89fb35fb90.jpg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在成長的每一個階段,都要注意以下關鍵點:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"牽引"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"切記這是在產品上市前的市場契合度。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此時,你的團隊應該對速度作出決定,而非準確性、穩定性、流程等方面的決定——因此,開發者效率債務很大。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一般情況下,選擇 Django、Rails 或 PHP 等全棧框架,然後快速開發,尤其是因爲大部分早期產品都是粗糙的應用,需要很好地集成在 Web 和移動設備上。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"拐點"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此時,有跡象表明產品適合市場,而產品正在向可擴展的增長循環過渡。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"團隊意識到某些過程是必要的(因此開發者效率債務開始得到解決),並且仍然在尋找平衡內部過程和用戶體驗的最佳方法,因此技術產品債務增加。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"規模"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"公司在快速成長中。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一階段中,技術產品債務和開發者效率債務開始下降 \/ 穩定,這是因爲在過程和用戶體驗上更好的內部實踐和平衡。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一階段,安全性債務、維護債務和決策債務都在增長,原因是增長速度很快,實際上無法跟上安全更新、清理和“修復”過去的決策。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"規模也是測試自動化、部署系統、監控和警報、日誌和檢測、遷移、測試和臨時存儲以及 ETL 等領域中變化和糾正最多的地方。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"膨脹"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這裏,飽和度開始出現。此時,業務已經相當成熟。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因爲有大量的歷史代碼和決策,維護債務和決策債務不斷增加。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當團隊在尋找新的成長機會時,開發者效率債務又開始增加了(核心增長和現有產品之外)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"技術產品債務、安全性債務和穩定性債務,經過前一段密集擴張期,正在趨於平衡。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"管理技術債投資組合的入門技巧"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在企業成長過程中管理技術債組合時,有幾個關鍵領域需要特別關注:過程、工具、Sprint 和路線圖。當你想減少一種科技債務的數量來平衡它時,你可以隨着公司的發展而承擔不同類型的科技債,下面就給出了一些快速指南要點:"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"減少技術債產生的過程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"儘管積累技術債是戰略問題,但通過實施過程來阻止技術債的產生甚至有時也很有意義。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在公司成長的拐點和規模階段尤其如此,隨着更多的工程師加入團隊,開發者效率債務就會減少。開發者效率債務的減少可以讓位於決策債務和維護債務的必要增加。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這些過程的一些例子包括代碼 \/PR 審查,監控標準,QA 簽署,以及技術 \/ 設計審查。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"防止某些類型的債務形成的工具"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"類似於上面提到的過程,基礎工具的投資有時也能防止某些類型的債務的形成。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於組織發展的規模階段,這一點尤爲重要,因爲要採取更加一致的辦法避免安全問題(安全性債務),防止可能影響用戶體驗的錯誤(技術產品債務),並允許代碼一致性(開發者效率債務)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如 linter 和 CI\/CD 管道就是這些工具的例子。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"反應性和急性技術債的 Sprint 工作"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果組織的待命職責已經增加,那麼待命 Sprint 就應該被用來救火(待命目的)或者與技術債有關的反應型工作(在待命救火的休息時間)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這樣,組織就可以在重大的技術債項目上取得進展,並通過待命團隊對當前 \/ 過去的事件採取實際行動。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在成長的規模和擴張階段,讓那些待命人員從事這種反應性的工作特別重要,因爲在解決嚴重的技術債之後,其他團隊可以建立新的功能 \/ 產品,並承擔額外的債務。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"爲主動性和系統性的技術債制定路線圖"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與使用待命的時間來處理反應性和急性技術債不同,在路線圖中納入技術債的做法應該適用於需要重大調整路線圖和跨團隊工作的債務。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在路線圖中納入技術債的例子有:在提出重大重寫的建議期間,重新設計數據系統用於用戶最重要的產品功能,圍繞關鍵路徑定義和實施警報,從一個收入 \/ 支付平臺轉移到另一個,以及其他可能需要數月才能成功實施的領域。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"現在,要從作爲負擔的技術債過渡到作爲戰略槓桿的技術債"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要意識到積累技術債能夠幫助你的團隊圍繞要採取的舉措作出全面的戰略決策。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"考慮團隊可能會遇到的常見的技術債假設。你反對“技術債 = 壞事”,“技術債≠產品工作”嗎?抑或你聽說過同行認爲“個人痛苦 = 組織痛苦”嗎?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"別再亂用“技術債”這一總術語了。把你面臨的問題命名爲維護債務、開發者效率債務、穩定性債務、安全性債務、技術產品債務和 \/ 或決策債務。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"確定你的技術債規模,使其不那麼模糊。這是急性的(短時間內解決)還是系統性(長時間內解決)?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從戰略上優先考慮技術,而不是公司其他領域。你可以根據信息、時間、對用戶的影響等向量來設置優先次序。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據企業的發展和需要,平衡不斷變化的技術債組合。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"作者介紹:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Matt Greenberg,Reforge CTO,曾任 Credit Karma 的工程副總裁,也是 Scaling Product Delivery 項目的共同創造者。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Keya Patel,Reforge OIR,曾任 Headspace 的產品發展總監。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/www.reforge.com\/blog\/managing-tech-debt"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章