如何使用障礙板克服軟件障礙

{"type":"doc","content":[{"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":"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":"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":"回到2019年,新產品的開發需要我們在如何管理障礙方面進行一些實驗。此時,團隊正被未完成的工作搞得焦頭爛額。我們正在將新產品與已有系統進行並行的比較,以驗證其準確性。這個問題很明確,正是它激發了我們嘗試使用障礙板來觀察和跟蹤問題。"}]},{"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":"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":"你可能首先會問自己的第一個問題是:什麼是障礙板?我發現幾乎每個人對故事板都有或多或少的瞭解,知道它可以用來可視化開發中的條目狀態。特別是如果你有Scrum或看板的背景,可能很熟悉下面的故事板示例。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/88\/880d4d1fb31f750eeb32acd582a766a2.png","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":"link","attrs":{"href":"https:\/\/thisagileguy.com\/obstacle-begone\/","title":"","type":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":"link","attrs":{"href":"https:\/\/www.myagilepartner.com\/blog\/index.php\/2017\/08\/07\/obstacle-board-agile\/","title":"","type":null},"content":[{"type":"text","text":"敏捷中的障礙板?——"}]},{"type":"link","attrs":{"href":"https:\/\/www.myagilepartner.com\/blog\/index.php\/2017\/08\/07\/obstacle-board-agile\/","title":"","type":null},"content":[{"type":"text","text":"約迪卡爾"}]},{"type":"link","attrs":{"href":"https:\/\/www.myagilepartner.com\/blog\/index.php\/2017\/08\/07\/obstacle-board-agile\/","title":"","type":null},"content":[{"type":"text","text":"·"}]},{"type":"link","attrs":{"href":"https:\/\/www.myagilepartner.com\/blog\/index.php\/2017\/08\/07\/obstacle-board-agile\/","title":"","type":null},"content":[{"type":"text","text":"帕克特"}]},{"type":"link","attrs":{"href":"https:\/\/www.myagilepartner.com\/blog\/index.php\/2017\/08\/07\/obstacle-board-agile\/","title":"","type":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":"link","attrs":{"href":"https:\/\/www.oreilly.com\/library\/view\/create-your-successful\/9781680502947\/f_0078.xhtml","title":"","type":null},"content":[{"type":"text","text":"使用障礙板可視化問題——喬安娜·"}]},{"type":"link","attrs":{"href":"https:\/\/www.oreilly.com\/library\/view\/create-your-successful\/9781680502947\/f_0078.xhtml","title":"","type":null},"content":[{"type":"text","text":"羅斯曼"}]},{"type":"link","attrs":{"href":"https:\/\/www.oreilly.com\/library\/view\/create-your-successful\/9781680502947\/f_0078.xhtml","title":"","type":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":"很簡單,這很像大多數Scrum和看板團隊所用的常見的故事板。下面給出一個示例。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/43\/43cfad22c0f38fb298b975b029bd2ab5.png","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":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/94\/9468261d599b8777215c9dc8734c2dd2.png","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":"上述機制並不侷限於Jira或Trello等工作流管理工具。雖然我們在自己的案例中使用了Jira,但如果你喜歡的話,也完全有理由在自己的辦公環境中使用粘着便利貼的實物板,那同樣有其獨特的樂趣。不管它是實物的還是虛擬的,障礙板都能讓你看到當前工作中任何障礙的狀態。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"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":"link","attrs":{"href":"https:\/\/www.benlinders.com\/problem-what-problem\/","title":"","type":null},"content":[{"type":"text","text":"事實上,本·"}]},{"type":"link","attrs":{"href":"https:\/\/www.benlinders.com\/problem-what-problem\/","title":"","type":null},"content":[{"type":"text","text":"林德斯"}]},{"type":"link","attrs":{"href":"https:\/\/www.benlinders.com\/problem-what-problem\/","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":"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":"現在,我來聊聊,我們是如何開始使用第一塊障礙板的。我所在的團隊負責構建一個新系統,以取代已經使用多年的系統。除了通常的Scrummaster、產品負責人和開發人員角色以外,我們還得到了三位業務分析師的支持,他們會執行每日的驗證檢查,對新舊系統進行比較。鑑於這是一個金融產品,想必你可以想象得到,確保人數的準確性對產品得到客戶羣的成功採用是必要的。"}]},{"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":"考慮到系統準確性的重要性,很明顯我們需要更有效地跟蹤這些障礙。一開始,業務分析師嘗試的跟蹤措施包括Excel電子表格和以電子郵件爲線索。然而,這些措施都失敗了,其原因如下:"}]},{"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":"首先,多次調查可能會產生同一個問題,同步跟蹤它們的狀態很具挑戰性。當遇到同樣的問題時,每天發出的Excel表格修訂導致增加了許多重複的條目。實踐中發現,這些重複條目很相近,但同時又很難識別出來,特別是在不同的日期和不同的情況下暴露出的同一個根本原因。"}]},{"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":"第二,幾乎看不到調查的進展,因爲我們不知道什麼時候在調查問題,誰在調查。工程師們不會經常關注他們的電子郵件以回覆更新的請求。但反之如果他們這樣做,我認爲肯定會降低工作效率,因爲他們撲到IDE上的時間會相應地減少,而把更多的時間用於更新這些電子郵件或Excel中的障礙。雖說我們可能做的是金融方面的工作,但軟件工程師可不會整天泡在Excel上!"}]},{"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.myagilepartner.com\/blog\/index.php\/2017\/08\/07\/obstacle-board-agile\/","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":"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":"這個小組同意使用障礙板來跟蹤這些狀態不明確的調查之後,我們設定了實驗的界限。由於關鍵利益相關者對準確性的高度關注,我們對障礙的定義僅限定於這些調查。由於團隊仍然在並行地處理故事,我們還定義了迭代中用於解決這些障礙的能力佔比。我們的做法是爲每個迭代分配一定的比重。隨着時間的推移,我們會根據自己的節奏進行調整,但它通常不會超過我們所承諾的速度的40%。"}]},{"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":"我們通過跟蹤每週增加的障礙數量和解決的障礙數量來衡量效率。這些數據很容易就能從Jira中提取出來,因爲該工具會跟蹤每個條目的創建和解決日期。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/7f\/90\/7f82512d88f7dca154e77ae6cb521390.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"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":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從Jira中提取的數據也可以用於計算解決時間。我們在實驗期間收集了一些關鍵統計數據,如下表所示。請注意,小障礙可以在不到幾個小時的週期內解決,如表中的最短解決時間。但是,如果不是大家共同努力,它們會被一直放在那裏待很長一段時間,如表中的其他統計數據。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"embedcomp","attrs":{"type":"table","data":{"content":"
度量結果
解決的障礙數量18個
平均解決時間34天
平均解決時間12天
最短解決時間2小時
最大解決時間102天
未解決的障礙數量19個"}}},{"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\/infoq\/06\/06c12307ebddd341035fcd126db94891.png","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":"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":"我們發現的另一個額外好處是,阻礙因素很容易就能轉換爲需要開發的故事。如果障礙具有相同的根本原因,也可以將這些障礙關聯起來。這是由於我們決定障礙板也使用與Scrum故事板一樣的工具。如果同一個Jira條目中同時有障礙和故事這兩類,我們可以將條目類型從障礙變爲故事,這樣就可以輕鬆將其置入到產品待辦事項列表中。此外,由於調查的細節和開發人員的發現都記錄在ticket上,所有的信息都附在故事上,所以有助於驗收標準的編寫,甚至計劃的制定和任務的識別工作。"}]},{"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":"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":"首先,雖然我們可以從之前的燃盡圖中看到,完成的故事與承諾的故事的比例正在趨向於100%,但我們並沒有在實驗的時間框架內做到這一點。原因大概率是因爲我們一開始沒有做好故事與障礙的平衡。就像團隊使用他們之前的迭代速率一樣,或者在他們制定迭代計劃中使用的平均速率一樣,我們也應該嘗試更好地跟蹤在障礙上花費的時間來調整這個比例。"}]},{"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":"當我們試圖推廣應用到同一領域的其他團隊時,一些其他團隊提出想用一塊板承載更多的內容。一位IT經理表示,希望有一塊板來管理所有公司。在我們的用例中,認爲將障礙與故事分離開來是跟蹤系統的準確狀態的最好方法。我一開始收到這些反饋時,並不願意嘗試將障礙和故事合併在一起。我認爲,就我們的經驗來看,指望用這一塊寶貴的板來包打天下有些貪心。不同的受衆希望狀態有不同的視圖,無論是精確的開發步驟,還是更高層次的“它已經準備就緒了嗎”。"}]},{"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":"對於只想要一個視圖的觀衆來說,障礙和故事沒有理由不能和諧共存。Judicael Paquet之前在他的《敏捷中的障礙板?》中就已經討論過了。雖然他的觀點是針對於看板的,但我認爲這個想法也適用於Scrum實踐。從最初的實驗之後,我已經轉到了一個新的團隊,他們發現在同一塊板上跟蹤主要障礙有助於讓大家更能夠關注到問題的存在。因此,我現在堅信,在某些情況下,由一塊板來管理所有的問題可能是正確的解決方案。"}]},{"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":"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":"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","marks":[{"type":"strong"}],"text":"Carly Richmond"},{"type":"text","text":" 是摩根士丹利(Morgan Stanley)的首席軟件工程師和Scrum master。她主要致力於構建金融系統,也在敏捷、UI、UX和通用技術方面貢獻了許多自己的想法。她還喜歡烹飪、攝影,而且,她是一個大茶缸。"}]},{"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":"link","attrs":{"href":"https:\/\/www.infoq.com\/articles\/overcoming-impediments-obstacle-boards\/","title":"","type":null},"content":[{"type":"text","text":"Overcoming Software Impediments Using Obstacle Boards"}]}]},{"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":"譯者簡介:冬雨,小小技術宅一枚,從事研發過程改進及質量改進方面的工作,關注編程、軟件工程、敏捷、DevOps、雲計算等領域,非常樂意將國外新鮮的IT資訊和深度技術文章翻譯分享給大家,已翻譯出版《深入敏捷測試》、《持續交付實戰》。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章