軟體專案的鐵三角模型:軟體質量與快速開發的矛盾 - Richard

發表於2021-06-13

在“鐵三角”模型中,有 3 個約束條件:

  1. 資源Resource:有多少人投入
  2. 範圍Scope:需要完成多少工作
  3. 時間Time:完成工作的時間

它們形成了一個三角形,三角形的面積代表質量。

如果您曾經聽過人們談論“遺留程式碼”、“技術債務”等,那麼您現在可能已經發現這個模型在起作用!質量和速度的關係沒那麼簡單!不是簡單認為:質量越高,速度越快,這是一種二分法的極端概念,高質量不代表高效高速,如果我們在短期內犧牲質量,就會損害速度?

平衡質量和速度並非易事 如果我們花大量時間尋求質量,一切都需要更長的時間,我們會失去速度;但是如果我們不主動嘗試保持高質量,那麼複雜性就會接管,一切又需要更長的時間,我們又失去速度。

同時,我們正在企業中構建軟體。這意味著時間和金錢很重要!軟體進展緩慢對企業來說是毀滅性的,顯然需要緊急解決!

新增資源既昂貴又困難;此外,我們知道布魯克斯的定律:“在一個遲到的專案中增加更多的人會使其晚一些”——所以這可能不是一個選擇。

大多數企業自以為自己“掌握”“需求”,因此將範圍縮小排除在質量與速度之間。。。這就造成複雜性的原因!

當然,對於短期的速度提升,我們可以在質量上偷工減料……但這會很快導致更多的複雜性、錯誤、返工和其他壞事,這會損害速度。

 

如果事情變得非常糟糕,最可能的答案是“重新編寫”……讓我們重新開始,不要犯同樣的錯誤……這次我們將真正專注於質量!所以新專案開始了,每個人都非常樂觀。讓我們引入儘可能多的質量工具!單元測試、整合測試、TDD、BDD、沒有空值的外來新語言……當然還有行業標準,Pull Requests - 一切為了質量!

需要明確的是,其中許多都是提高質量的好工具,一個能夠及早快速檢測問題的良好測試套件非常有價值。你可能應該確保你有很好的測試!但問題是,擁有所有這些東西會讓你慢下來......

如果你進展緩慢,在一個時間和金錢都很重要的企業中,那是行不通的……如果你進展緩慢,管理者必須參與,不參與是不負責任的。我們又回到了質量與速度的較量——你需要走得更快……

顯然,我們需要在不損害速度的情況下儘可能提高質量,同時在不損害質量的情況下儘可能提高速度。

 這意味著批判性地看待每個工具,並誠實地瞭解它帶來的好處以及這些好處的成本。一些工具——例如自動化測試——非常強大,但非常昂貴,所以也許我們會謹慎使用它們(想想“測試金字塔”)

 

Pull Requests拉取請求

最無法通過平衡測試的工具是 Pull Requests拉取請求。這有很多原因,即“物理定律”的東西,同時又是 PR 設計的內在因素,因此是不可避免的。

拉取請求的“作用機制”是讓多人看到每個更改,以捕獲並解決Bug。

拉取請求客觀地產生很多額外開銷:

  • - 增加中斷和上下文切換
  • - 引入阻塞、瓶頸、爭用和等待
  • - 增加在製品和批量大小
  • - 延遲缺陷檢測並增加返工

這些都是導致損害速度的最明顯的問題。拉取請求被提升為幫助提升質量的工具。但是,拉取請求會損害速度。當速度受損時,團隊會面臨時間壓力。當有時間壓力時,人們更可能匆忙,質量受到損害。

Pull Requests 的好處是:多個人在做同一件事——協作。然而,Pull Requests 是一種非常間接的協作形式!如果您重視 Pull Requests 的好處,您可能想看看有沒有其他其他協作機制!

 

將“範圍”作為常量的問題

傳統觀點是:鐵三角中範圍(需要完成多少工作)幾乎總是更像是一個常數,是團隊的上文,而不是團隊可以對其產生任何影響的變數,是一個前提假設,但是挑戰這個假設為我帶來了巨大的突破。

到目前為止,我看到的最常見的對付"範圍"方法是團隊有一組“ticket票”,並且一次只做一些,或者更有可能同時做幾張票。它們被視為原子,無論是“完成”還是“未完成”,而遊戲就是儘可能多地“做”。

計劃通常是通過“估計”每個原子票需要多長時間來完成的,可能是抽象的形式,例如故事點,但票的內容同樣被視為固定的。

問題在於,這種“估計”是建立在理論之上的,然後再受制於往往殘酷的現實世界。有時會出現不可預見的問題,這意味著完成一項任務需要更長的時間。

我們還需要注意帕金森定律——“工作會擴大,以填補完成它的可用時間”——這意味著雖然有時事情會比預期的要長得多,但事情花費的時間卻少得多。 . 這是一個偏態分佈!

讓我們也瞭解一下 侯世達(Hofstadter)定律:“做事所花費的時間總是比你預期的要長,即使你的預期中考慮了侯世達定律。” 如果您希望新增“緩衝區”可以拯救您,對不起...

 

範圍作為變數

那麼,我們如何才能可靠地交付進展?會有很多解決方案,但以下是對我有用的方法...

- 不要以完成為目標,以更好為目標

 不要問多長時間,設定固定時間預算並尋找最佳花費方式

也就是說,使用“範圍”作為變數,

您可以向需要看到可預測進展的企業承諾,您將分享自上次以來取得的進展的確切時間。你可以對事情的進展完全透明,如果遇到問題,你可以一起做出選擇。

現在不再是“嘗試做很多工作”,而是“嘗試從固定的工作量中做出最大的改變”。這意味著使用帕累託(80:20 規則),並尋找最具影響力的改進!

在實踐中會發生的情況是,一開始,您將能夠做出重大改進,然後會出現收益遞減的情況。這時問題應該是“我們下一步應該改進什麼”?

在每個固定的時間週期內,您決定要改進什麼,並嘗試做出最大的改進。有時它會很順利,有時不會那麼順利。您可以從中吸取教訓,並將反饋包含在下次的決策中。

能夠快速改變方向......我們有一個詞.:敏捷

 

總結

所以,總結一下: - 質量與速度是一場失敗的遊戲

  • - 不要玩!
  • - 平衡是關鍵
  • - 關鍵,尋找成本/收益
  • - 請記住,在業務中,時間和金錢很重要(!),並且往往會在衝突中獲勝
  • - 進展很重要
  • - 專注於穩定改進,儘早交付

 

相關文章