如果我們每天輪換配對會怎樣?

透過實驗揭露頻繁輪換配對的好處

配對程式設計的好處廣為接受,但關於配對輪換的建議仍然有爭議。隊友應該什麼時候輪換配對,頻率又是如何?而且…如果我們每天輪換配對會怎樣?我們與三個團隊合作,進行了一項每日配對輪換的練習。我們開發了一個輕量級的方法,協助團隊反思配對的好處和挑戰,以及如何解決這些問題。最初的恐懼被克服,團隊也發現了頻繁輪換配對的好處。我們了解到,頻繁輪換配對會大幅提升配對的好處。在此,我們分享我們開發的方法、我們的觀察,以及參與團隊成員分享的一些常見恐懼和見解。

2024 年 3 月 6 日


Photo of Gabriel Robaina

Gabriel Robaina 是 Thoughtworks 巴西分公司的高級顧問,擔任技術主管和開發人員。他目前攻讀應用運算碩士學位,專注於無伺服器技術,熱衷於配對技術和分散式系統。Gabriel 重視強大的開發實務和創意,視其為為客戶提供創新且有效率的解決方案的關鍵。

Photo of Kieran Murphy
Kieran Murphy

Kieran Murphy 是 Thoughtworks 的首席顧問,駐點於芝加哥。Kieran 是長期的 XP 實務者、軟體開發人員、技術主管和教練。Kieran 熱衷於協助人們在傑出的軟體交付中找到樂趣。


大多數開發人員單獨工作。任務通常分配給單一個人,這種做法稱為「單人編碼」。實行單人編碼的開發人員通常被孤立在筒倉中,阻礙了團隊間的知識分享。這些筒倉也讓團隊成員難以建立聯繫和建立個人關係,特別是在遠距工作環境中。新團隊成員的加入很複雜,而且建立程式碼檢閱等品質閘門會導致交付效率的瓶頸。此外,將工作與個別團隊成員綁定也會在這個人離開團隊時(例如休假或病假)造成風險。最後,個人最終會成為系統區域的所有者,以及特定功能知識的諮詢對象。

配對程式設計是一種可行的單獨編碼替代方案。關於配對程式設計探討了它的優點和挑戰。在配對開發時,人們可以緊密合作,目標是持續共享知識和資訊。這會讓故事更精煉,因為每個人都會有必要的脈絡可以貢獻。此外,不需要特定的程式碼檢閱流程,因為所有程式碼都會即時檢閱。配對會創造更多機會讓人們認識彼此並建立個人連結,進而增加團隊的凝聚力。配對流程應該搭配定期的配對輪替儀式,讓配對可以切換。這能讓人們體驗與團隊中的每個人共事。在這個儀式之後,開發人員應該與新的配對分享目前的任務脈絡和進度,以便交付流程可以繼續進行。

配對輪替的頻率會因團隊而異。儘管為了最大化配對的優點而偏好頻繁的配對輪替,有些團隊回報說頻繁輪替配對會產生摩擦。有一種觀念認為,每天或每隔一天輪替配對比一週輪替一次更昂貴且更困難。在頻譜的另一端,也有團隊一個月才輪替一次配對。這表示一個人至少需要 5 個月才能與團隊中的其他 5 個人配對至少一次,假設這段期間沒有重複的配對。另一種常規是,只有在完成任務時配對才會輪替,這會讓頻率變得不確定。在任務完成時輪替配對也不實際,因為不太可能其他配對會在同一時間完成。

我們開始注意到,配對輪換頻率較低的團隊往往會出現類似於單人編碼團隊的症狀。長期配對的成員會開始變成「共犯」。配對輪換時間越長,情境分享就越困難:開發人員需要在每月輪換時,與新的配對夥伴分享過去一個月的全部情境。我們有證據顯示,我們的配對輪換做法並未產生預期的成果,因此我們決定進行一項實驗,目標是透過配對最佳實務來提升團隊效能。

我們的實驗

我們決定挑戰配對輪換頻率較低的團隊,作為實驗的一部分,大幅增加輪換頻率。如果我們在兩週內每天輪換配對夥伴,會發生什麼事?這段期間會遇到哪些困難,我們可以如何解決?我們在這段期間有享受到配對的好處嗎?未來,團隊想要繼續每天輪換配對夥伴,還是要恢復到之前的頻率?

我們開發了一項練習,旨在協助團隊探索頻繁的配對輪換,並對其影響進行批判性分析。練習從一小時的白板會議開始,由一位主持人引導,在此期間,團隊成員會寫下並討論以下三個問題的看法

  • 為什麼配對有價值?
  • 是什麼讓配對變得困難?
  • 是什麼讓配對變得容易?

這些問題會依序提出。團隊有 3 分鐘的時間在白板上寫下每個問題的答案,並有 7 分鐘的時間討論他們分享的內容。

圖 2:在配對輪換實驗期間,顯示團隊回饋的白板

在練習的後續幾天,團隊會持續處理積壓的工作,同時每天輪換配對夥伴。對於任何正在進行中的任務,配對夥伴中的一位會以「錨點」的身分留在任務中,而另一位則會輪換到另一個任務。「錨點」會每隔一天輪換一次,確保沒有任何團隊成員會連續超過兩天處理單一任務。

團隊會在每天早上進行 30 分鐘的白板會議,討論以下三個問題

  • 是什麼讓配對變得困難?
  • 是什麼讓配對變得容易?
  • 我們今天應該嘗試哪些做法,讓我們的配對更輕鬆、更有效率?

這些問題會依序提出,每個問題有 3 分鐘的時間在白板上寫下想法,並有 5 分鐘的時間討論。完成後,團隊會找出每個正在進行中任務的錨點,並協助分配新的配對夥伴。

我們每天使用同一塊白板來促進這項每日回顧,每天使用獨特的便利貼顏色。這讓團隊成員可以看到每天每個領域提出的重點,進而視覺化團隊在整個星期中的學習和批判性思考。

在練習的最後一天,我們促進了最後一場白板會議,然後請團隊決定配對輪換頻率以繼續進行。然後,我們鼓勵團隊在未來的團隊回顧中繼續重新檢視他們的配對輪換頻率。

我們實驗的結果

在 2022 年到 2023 年期間,我們聘請了三個不同的團隊,每週嘗試這項實驗一次。這些團隊都是完全分散的,線上合作,但從未親自見面。其中兩個團隊是美國和巴西的共同配置。

每個團隊在實驗開始時都提出了類似的疑慮。在以下的第一部分,我們分享了其中一些疑慮,並說明了團隊立場在實驗過程中如何演變。第二部分提供了一些回饋,顯示了配對和頻繁配對輪換的實際好處。

參與我們實驗的所有團隊都使用 Jira 或 Trello 等系統來記錄和追蹤工作項目,並且都使用「卡片」一詞來描述該系統中的記錄。以下的回饋和結果在這種意義上使用「卡片」這個詞。

配對困難的原因以及觀念如何改變

「缺乏同理心、共識和溝通讓配對變得困難」

頻繁的配對輪換可能是建立更強大團隊動態的強大工具。最初,缺乏同理心和協調會讓配對變得具有挑戰性,特別是當團隊成員不熟悉彼此的工作模式、步調和專業領域時。然而,透過頻繁地更換配對,團隊成員有機會更快速地彼此認識。這種熟悉感讓彼此更容易產生同理心和協調,最終促進團隊內部更強大的連結。此外,頻繁配對輪換的做法鼓勵建立回饋文化。我們建議團隊成員在配對會議結束時,在短暫的會議中刻意分享回饋,有助於持續改進和更好的協作。

「配對時間有很多中斷」

團隊回報了由於缺乏長時間不間斷的工作時間而導致頻繁中斷,造成配對上的挑戰。為了解決這個問題,團隊在下午建立了核心工作時間,在此期間將中斷減到最低。因此,會議被移到早上或一天結束時。此外,團隊內的配對利用番茄工作法或其他明確的時間限制方法,在有限的工作時間內最大化他們的效率和生產力。

「每天輪換配對讓我們變慢」

有一個觀念認為,增加輪換頻率會導致交付績效下降,這是產品團隊的看法。他們傾向於相信,更多的輪換會導致效率降低和產出變慢。

開發人員也認為頻繁輪調會帶來額外的開銷,進而導致團隊運作變慢。這是因為需要持續分享進行中工作的演進脈絡,而這被認為是一個耗時的流程。

然而,較頻繁輪調的支持者認為,隨著輪調頻率的增加,脈絡分享會變得更有效率。這是因為如果頻繁進行配對切換,通常需要傳達的脈絡資訊較少。此外,當每位團隊成員都對進行中的任務有更全面的了解時,分享脈絡的效率會進一步提升。此外,頻繁的配對切換讓團隊成員有機會建立流程,以利於脈絡分享。

頻繁輪調的作法會隨著時間變得更易於管理和精簡。隨著團隊習慣這種做法,與頻繁輪調相關的初期挑戰會逐漸減少,讓流程變得越來越容易和有效率。

頻繁輪換配對的經驗好處

「如果你更常這樣做,分享脈絡會變得容易又快速」

我們從所有三個團隊聽到的疑慮之一是,在進行中的工作中更換配對成員會導致與新配對成員分享脈絡的問題。事實上,對於每個團隊來說,這似乎是維持長期配對的最有力動機。

在每個團隊的看板中,我們發現這個疑慮會在頭幾天提出。團隊成員會建議一些常見的方法,讓脈絡分享變得更容易,而在實驗結束時,這不再是一個疑慮。每個團隊出現的一項作法是讓配對在結束一天時,在卡片本身新增一個註解,簡要記錄當天完成的工作和決策。他們也可能會在卡片中維護的待辦事項清單中新增或移除項目。這些簡單的作法有助於卡片本身承載進行中工作的脈絡,而不是讓脈絡存在於特定的團隊成員身上。

我們發現每個團隊都發現了與卡片相關的新作法。在我們的每日討論中,團隊成員會要求在卡片中保留更多脈絡、更小的卡片和卡片中的持續註解。

「資訊在團隊中流動」

這是我們聽到的最令人興奮和有見地的評論之一。團隊發現,在實務上,錨點在編碼工作階段開始時與新配對分享脈絡並不需要花費很長的時間。沒有太多新的脈絡需要分享。此外,團隊發現,在處理團隊待處理事項清單中的許多其他卡片後,理解任何卡片都變得更容易。頻繁的配對輪調會加速這種經驗累積,因為團隊成員每週都能處理更多樣化的任務。

「知識孤島不可能維持」

每個團隊都包括具有不同經驗水準和專業領域的成員。團隊最初認為這種多樣性是頻繁配對輪調的挑戰。在實驗之前,每個團隊都在組織配對和分配給配對的卡片,考量到誰是初階或資深團隊成員、誰是前端、後端或 DevOps 專家、誰有在程式碼庫特定領域工作的先前經驗,等等。維護這個複雜的矩陣讓頻繁切換配對變得困難,並強化了團隊中的知識孤島。

在實驗的每日配對輪替中,很難維持這些規則。隨著配對每天輪替,團隊成員被迫在不熟悉的程式碼庫區域工作。此外,由於任何在不熟悉區域工作的團隊成員只會在某個卡片上待一兩天,然後再將其傳遞給其他人,因此風險要小得多。

我們的團隊發現頻繁的配對輪替會讓人員在卡片上產生的經驗影響趨於平穩。長期團隊成員可以為較新的成員移除阻礙,並分享有助於加速其成長和程式碼庫與開發工具學習曲線的知識。

在實驗結束幾個月後,一個團隊給了我們一些有趣的回饋:他們發現當生產中出現問題時,他們不需要依賴某一個人來查看並修復它。團隊可以指派任何人來解決問題。此外,另一個回饋提到,即將到來的配對輪替帶來了新的背景,改變了實作方向,並有助於在功能開發的早期階段解決問題,從而為團隊節省大量時間和返工。這些突顯了在團隊中傳播知識的好處。

「工作在團隊成員間流動」

團隊成員發現,每個人都會發展與所有進行中的卡片相關的背景,即使在處理每張卡片之前。這提高了每日站立會議的效率:團隊成員會分享見解、預先找出風險,並互相協助移除阻礙。這只有在所有開發人員對所有正在進行的卡片有足夠的背景和所有權時才有可能。沒有任何個人擁有任何工作,團隊中的每個人都對任務整體的進度負責。

結論

儘管實驗涉及每日配對輪替,但三個參與團隊最終並未選擇以這種頻率繼續進行。一個團隊決定採用 3 天輪替,而另外兩個團隊決定採用 2 天輪替。我們注意到頻繁的輪替會揭示團隊開發過程中出現的瓶頸和摩擦點。選擇每 3 天輪替一次而不是每天輪替與解決這些阻礙有關。

團隊成員在任何一天通常只有幾個小時(通常在一天中分散)來配對,這是很常見的。團隊成員認為他們需要超過一天的時間才能獲得有意義的配對體驗。反過來,這也可能表示在一天中開發時間高度分散。這是團隊選擇低於實驗中實踐的頻率的原因之一。

實驗期間遇到的許多感知挑戰並非絕對的,而是正面解決時會減少(反之,如果避免則會增加)。實驗為參與者提供了一個每日機會,讓他們可以反思配對挑戰,並討論作為團隊解決這些挑戰的替代方案。在實驗儀式中投入的時間和精力具有很高的投資報酬率。

一般而言,執行實驗大幅改善了這些團隊中配對輪替的頻率。其中一個團隊從每月輪替一次改為每 3 天輪替一次。這種頻率的增加是因為團隊承認了短暫配對的好處,例如更好的知識分享和團隊建設。在實驗期間,團隊成員也回報說參與實驗讓他們更了解配對最佳實務。此外,執行配對回顧和意見回饋交換會議促进了團隊中的回饋文化。


重大修訂

2024 年 3 月 6 日:發佈於 mfcom

2023 年 9 月 22 日:發佈於 Linkedin