1. 程式人生 > >精益敏捷之認知篇

精益敏捷之認知篇

文章首發於公眾號 松花皮蛋的黑板報

作者就職於京東,在穩定性保障、敏捷開發、高階JAVA、微服務架構有深入的理解

       我們在開發過程中面臨的最大挑戰是什麼?或許你之前沒有認真思考過,那最好把目光轉移一下,然後想一下,再回來閱讀這篇文章。


        一百個讀者心中有一百個哈姆雷特,你可能認為最大的挑戰是部門協作牆,或者是產品的需求規劃不清晰。這些答案都有一定的置信度,但是我想說的是,我們正處在一個快速變化的網際網路時代,新想法比別人驗證慢一步,可能你就是那個出局者,所以需求方迫切希望能在高速公路上換輪胎。但是,請記住,我們處在一個充滿不確定的世界,需求是不完全確定的,研發對接是不確定的,很多因素都是不確定的,導致夢想是美好的,現實是殘酷的。


       不確定性意味著我們以為這座山的山頂是終點,可偏偏相鄰的那座才是。我們以一個探路者的身份在未知的道路上前行,為了不偏離航向,我們應該保持小步快跑,當獲得足夠反饋資訊後發現需要做出變化時還能夠調整。也就是說,我們應該為改變做好準備,以一種增量的方式完成目標,這是一個自適應的反饋控制過程,好比平時使用的洗澡水,我們無法第一時間保證出水的溫度,需要時不時用手感觸溫度進行調節,直到能滿足需求。


        那我們應該做哪些努力才能擁抱變化還能掌握變化呢?祕決就是打破確定性思維。


       確認性思維容易讓我們不願意輕易嘗試,極力在避免失敗,害怕不確定的後果,固步自封。打破確定性思維需要我們以最小成本快速試錯。確定性思緒也容易讓我們以為那片產業藍海中目前沒有強有力的競爭者,我們只要制定好大而詳盡的計劃,制定繁複的流程和檢查機制,對進度進行精確的把控,對任何偏離的追究,只要這樣做,最後一定能成功。打破確定性思緒需要我們拋棄這些思想,我們應該制定週期性的計劃,保證是以小粒度演進化的,並且能接受意外變化並以最小的代價快速響應。最後還有一點,拋棄繁複的流程和檢查機制,把掌握權歸還給團隊,讓其基於簡單規則自我管理。


        打破不確定性思維並不意味著我們要在看不見的地方進行妥協,當意外變化來臨時,對程式碼質量進行妥協會導致後續難以維護,另外能接收意外變化並不意味著放棄對時間要求的堅守,那畢竟是我們的立足之道。


       打破不確定性思維的方法描述都非常抽象,我們應該如何理解呢?接下來我將舉例說明。


       第一個遊戲的規則是是這樣的,四個客戶代表和其他開發者分別分組坐落在一個圓桌上,最旁邊的開發者使用撲克牌進行發牌,並依次傳遞到其他開發者手中,每經過一個開發者都需要將撲克牌進行翻轉,其中每個客戶代表只關注一種花色的撲克牌,當客戶看到第一個開發者抽牌花色為他所需時開始計數,集齊時計數結束。正常的洗牌發牌,所有客戶代表集齊撲克牌大概需要四分鐘。如果我們對撲克牌按一定規則的花色進行疊放,也就是客戶一所需的花色所有撲克牌在最上面,接著就是客戶二所需的,仔細在腦中回放一下整個流程。如果這樣做時間可以縮短到四十秒,是不是很神奇,為什麼會這樣呢?你得到什麼樣的啟發呢?


       在第一個遊戲中,後者對任務進行了拆解和優先順序調整,保證了客戶代表依次快速集齊撲克牌,雖然推遲了其他客戶代表開始計數的時間,但是縮短了每個客戶代表完成需求的時間週期,也就是說更加關注價值流動,對資源流動關注度下降了。


       第二個遊戲的規則是這樣的,從參與者中選出一名協調者,然後讓其他參與者任意選擇兩名小夥伴,並當眾告訴協調者,然後協調者去協調每個人的站位保證參與者和選擇的夥伴之間的距離是兩兩相等的,因為可以有交集,所以這個小遊戲看著挺複雜的。可能你會這樣想,我都知道我應該站在哪了,當協調者在調整其他人位置時,我只能乾著急,當協調者出錯了,也只能默默抓狂,那如果去掉協調者這個角色,通關時間是增加了還是縮短了呢?你可以在腦中模擬一下整個流程。實際上,這個時間會大大縮短,是不是很神奇,為什麼會這樣呢?你得到什麼樣的啟發呢?


       在第二個遊戲流程中,協調者充當一箇中心化的角色,而我們是被控制的,並且協調者是單點地受苦受難,當去掉協調者後,我們都非常瞭解遊戲規則和通關要求,有著共同目標,有很強的參與感,所以可以很快通關。但是沒有協調者後,你是否可靠呢?或許並不是你不可靠,而是別人不知道,那就讓工作更加透明化,讓資訊更加透明化。


       好,今天的分享希望能幫助你培養敏捷心態,歡迎分享給你的朋友們。

 

文章來源:www.liangsonghua.me

作者介紹:京東資深工程師-樑鬆華,在穩定性保障、敏捷開發、JAVA高階、微服務架構方面有深入的理解