2020年1月27日 星期一

讀書筆記|DevOps Handbook: 打造世界級技術組織的實踐指南(Part 2: 從何處開始)



農曆假期還沒結束XD,繼續整理筆記

本書分成六大章節,分別為

Part 1:三步工作法 (筆記)
Part 2:從何處開始
Part 3:第一步工作法:暢流的技術實踐
Part 4:第二步工作法:回饋的技術實踐
Part 5:第三步工作法:持續學習與實驗的具體實踐
Part 6:整合資訊安全、變更管理和合規性的技術實踐


///// 以下是 Part 2 的書摘筆記 /////


Chapter 5 選擇適當的價值流作為切入點

  • 軟體服務或產品常被分為「綠地」 (Green Field) 專案和「棕地」 (Brown Field) 專案
    • Green field project : 代表全新的軟體專案。通常還處於規劃或實施的早期階段,有機會建構全新的應用和基礎架構,不會受到過多限制。也常用來指一些試驗性專案。ex. National Instruments 發布的 Hosted LabVIEW.
    • Brown field project:指那些已經服務客戶長達幾年甚至幾十年的產品或者服務。通常背負著大量的技術債。
    • 很多人認為DevOps主要是用於綠地專案,但成功應用DevOps進行轉型的棕地專案比比皆是。原因為具有最大潛在商業利益的系統(最受依賴系統、擁有大量客戶和高額利潤)常屬於棕地範疇。當認定傳統方法無法達成當前目標時,維護棕地專案的團隊會具有非常高的意願嘗試DevOps。
  • DevOps成功轉型案例:
    • Nordstrom百貨公司
    • CSG系統國際公司
    • Etsy ( 2015年成功IPO )
  • 兼顧紀錄式系統和互動式系統。前者類似ERP系統,正確性至關重要,變更通常較慢。後者如電子商務系統和辦公室軟體等有所互動的系統,須對回饋快速反應。
  • 從最樂意創新的團隊開始:特別是早期階段,應該把精力集中在能夠創造成功且願意承擔風險的團隊上,並以此為基礎慢慢擴大範圍。概念近似於《跨越鴻溝》一書提到的先找到創新者和早期採用者,再進行擴散。另外即使獲得高層大力支持,避免使用「大爆炸」的方式(do it everywhere),集中火力在少數幾個嘗試性領域,確保成功,再逐步擴展。


  • 若要執行上到下大爆炸式的轉型也是有可能。可參考PayPal 2012 年敏捷技術轉型,由科技副總 Kirsten Wolberg 親自主持。這種轉型需要得到最高層的支持,且必須持續不斷地追求各階段的必要成果。
  • 儘早展現成果,積極發揚光大。取得初步成功後,可逐步擴大DevOps計畫的應用範圍。
  • 推動革新時,如何擴大影響:此一階段執行的清單出自MIT管理學教授 Dr. Roberto Fernandez.
    • 發現創新者和早期採用者:探索DevOps旅程的第一批志願者,理想上這些人受人尊重,對組織具有很大的影響力,得到他們支持更容易提高創新的可信度。
    • 贏得沈默的大多數:下一階段,擴大DevOps實踐範圍,目標是建立更穩固的支持基礎。此時,謹慎避免和唱反調的人發生衝突。
    • 辨識「不為所動者」:此群體為高調具有影響力,很有可能牴觸轉型計畫者。只有獲得多數人支持後才會考慮此群體。

Chapter 6 理解、可視化和運用價值流

  • 接下來是充分掌握如何向客戶交付價值:需要做什麼?由誰來做?要採取哪些措施來改善流程?
“開始改善任何價值流的有效方法之一,就是和所有利害關係者一起 
演練價值流程圖,幫助團隊統整出創新價值的所有必要步驟” 
 — Nordstorm百貨公司技術副總 Courtney Kissler
  • Identity 價值流中包含的團隊成員:Product owner ( 定義系統想實現的功能)、Development、QA、Operations、Infosec、Release managers、Technology executives or Value stream managers(負責從頭到尾確保價值流所生產的價值滿足或超出客戶和組織期望)。
  • 建立價值流程圖:確認成員後,下一步就是深入掌握工作如何被執行,並使用價值流程圖進行紀錄。目標不在於詳實記錄所有步驟和細節,而在於正確辨識阻礙價值流快速流動的環節,以縮短前置時間並提升可靠性。
    • 應重點分析和優化需等待數週或數月的工作以及造成巨大rework的環節。
    • 繪製重點
      • 數小時內可繪製出最重要的那 5-15 模塊,每一塊應包含 Lead timeValue added time,以及由下游取用者所測量的%C/A (重工指標,下游端有多少%的時間接收到“真正可用”的工作。)


  • 組織專門的轉型團隊
    • 令其獨立於負責日常運作的部門,此團隊必須負責達成明確定義的、可衡量的、系統層級的目標ex.從 submit code 到 deploy 於生產環境中」此一過程的Lead time 要減少 50%。需採取措施如下
      • 由轉型團隊的成員專門執行 DevOps 轉型工作
      • 挑選熟悉多個領域的通才作為團隊成員
      • 選擇與其他部門長期保持良好關係的人作為團隊成員
      • 為團隊找一個獨立的辦公區間,盡可能促進交流,並和其他部門保持適當的距離。
    • 擁有共同目標:最重要的是設定可衡量且明定執行週期的目標,通常以六個月到兩年為單位。由管理層決定目標和執行週期,並公告組織所有成員。改善目標範例如下:
      • 刪減 50% 用於產品支援和計畫外工作的預算
      • 確保 95% 的變更從 submit code 到版本發佈的 lead time 縮短至一周或是更短
    • 維持小幅度的改善計畫:具靈活性、加快學習和迭代、更快見到有意義的成效
    • 預留 20% 改善週期來減少技術債:確保至少 20% 的時間投入到重構、自動化工作、結構優化以及非功能性需求上,如可維護性、可管理性、可擴展性、可靠性、可測試性、可部署性和安全性。

“如果組織連這「20 %的稅」都不原意支付,那麼技術債將會持續惡化, 
最後消耗組織所有可用資源,導致服務脆弱不堪,無法交付功能
— eBay產品設計資深副總 Mary Cagan 

  • 有趣的案例:LinkedIn 的 operation InVersion (償還技術債)
  • 利用工具強化預期行為
    • 建立可共享的工作佇列,讓團隊成員清楚看見全局。避開不同工具,ex.RD 用JIRA,Operation 用 Service Now。也可使用 Slack 之類的聊天室促進團隊成員快速共享資訊、促進溝通。



Chapter 7 參考康威法則設計組織架構

  • 本章節探討如何調整組織結構,實現價值流的目標。
  • 康威法則 ( Conway's Law ):軟體的架構和軟體團隊的結構是一致的,更直白一點,「如果讓四個團隊開發同一個編譯器,那麼編譯器最後會有四個執行階段」。
  • 案例:Etsy 開發的Sprouter技術
  • 主要的組織結構分為三類:職能型(Functional)、矩陣型(Matrix)以及市場型 (Market)。此三類組織結構可做為參考 Conway's law 設計 DevOps value stream 的參考依據。
    • 職能型組織:注重專業能力、優化分工或降低成本。以專業技能為中心,營運部門通常採用這種組織架構,即伺服器管理員、網管等都被劃分為獨立小組。如Google、Etsy 和 GitHub。
    • 矩陣型組織:試圖結合職能型和市場型,然而組織結構通常都非常複雜。例如,一個員工可能需要向兩個或更多的經理回報。
    • 市場型組織:注重迅速回應客戶需求,多為扁平化結構。成員為多職能 (如含行銷人員、工程師等),可能存在工作或人員冗餘現象。如 Amazon 和 Netfliex。

  • 過度職能導向的危害:成本優化
    • 執行工作者常不太理解自己工作和價值目標有什麼關聯 (因為別人要求我這樣做,我就這樣做 ) 。
    • 在大規模部署等複雜活動,顯然會遞延交付週期。
    • 要同時服務多個價值流 ( 多個開發團隊 ) ,需逐層溝通通報調整 priority,導致專案緩慢前進。
    • 導致工作交接不善、大量重工、交付品質低落、瓶頸和延誤等問題。

  • 建立以市場為導向的團隊:速度優化
    • 極端情況下,要負責功能開發,測試產品,確保可用性、進行部署,支援operation。且這些跨職能團隊可以獨立運作,不需依賴其他團隊就能修復缺陷。每個團隊可以獨立地向客戶交付價值
    • 非大規模重組,反而是將工程師和其專業技能 ( operation、QA、security ) 嵌入每個服務團隊中,或者提供自助式服務平台,含配置類生產環境、執行自動化測試或部署等 。

  • 如何讓職能導向有效運作?
    • 雖然建議以市場為導向的團隊,但只要確保價值流中的所以人都能掌握目標,職能導向也是可以高效運轉。共同處是高度信任的文化,不同部門能有效協作,工作ㄧ
    • 下圖左為「職能導向」,所有 flow 經集中式 IT 營運團隊。下圖右為「市場導向」架構,所有產品團隊能自助式在生產環境部署寬鬆耦合的元件。 
source: 《精實企業》
  • 將測試、營運和資安融入日常生活
    • Ticketmaster的首席技術長 Jody Mulkey 表示:「Ops 是進攻內鋒,Dev 是負責關鍵地位四分衛或外野手。Dev 的工作是持球衝鋒, Ops 的工作則是保證 Dev 有足夠時間向前衝。
    • Facebook 曾面臨團隊始終處在永無止盡地救火狀態。最後採取能提升部署效率的措施之一就是讓所有工程師、工程經理和架構師輪流值班待命,負責各自建構的服務之 operation。這些開始對自己在價值流中的產出感同身受,對下游接手的後續團隊也產生巨大的正面影響。

  • 讓團隊成員成為通才
    • 在現在越來越複雜的 operation 活動中,極端情況下,職能營運組織會產生「穀倉化現象」,而導致多次交接、排隊等待進而交付時間延遲。
    • 建議讓團隊成員成為通才 ( T-shaped ) 甚至更厲害的 E型人才,學習必要技能,讓他們有能力建構與運行所負責的系統,也定期讓他們在不同職位間輪換。
    • 招募人才方面也著重於尋找具有好奇心、勇氣和坦承特質的人。


  • 如果組織架構能夠支援小團隊獨立、安全、快速地進行開發、測試和部署,就可以提高並維持開發人員的生產力,且改善品質。 Servoce-Oriented Architecture, SOA 就具有這特徵,其由具有限界上下文 ( Bouded context ,各服務間只需透過 API 互動)的鬆耦合 ( loosely coupled ) 服務所組合。
  • The "Two-Pizza Team" rule
    • Amazon在轉型過程利用「兩個披薩原則」來維持小型的團隊規模-團隊所有成員人數能用兩個 Pizza 餵飽,通常為 5 - 10人。
    • 這樣的限制有四個關鍵效果:
      • 確保團隊對系統有清晰、相同的理解
      • 限制正在開發的產品或服務的成長率
      • 分散權力並實現自主性
      • 帶領 “Two-Pizza team” 是讓員工獲得領導力經驗的一種方式。
  • Case Study: 2015年 Target 的「API 啟用」專案


Chapter 8 將營運融入日常開發工作

  • 本章主要探索實踐如何幫助開發團隊具備更強健的營運能力,創造出更多以市場為導向的業務成果,提高工作效率和生產力。
  • 案例:Big Fish Games 
    • 原每一事業群都有專屬開發團隊,且部署新功能時需要競相爭取全組織共享的稀缺資源 —營運團隊。且使用的都是不可靠的測試和整合環境以及繁瑣的發佈流程。
    • IT 營運副總 Paul Farrall 認為解決這問題的最佳方法是將營運專家嵌入開發團隊
  • 營運部門若想取得以市場為導向的成果,可以建立一套集中式的平台和工具及服務。ex.搭建類生產環境、部署管線、自動化測試工具、生產環境遙測控制台等等。開發團隊就能投注心力在建構功能,而非基礎建設上。
    • 若想取得以市場為導向的成果,另一個作法是將營運工程師嵌入產品團隊,使得產品團隊能自給自足,完全負責服務的交付和支援。 ex. 迪士尼。
    • 若因各種原因,組織無法為每個團隊分派營運工程師,另一種做法是“營運聯絡人”( Ops liaison)。ex. Etsy。集中式營運團隊依然管理所有環境 ( produciton and pre-production ),確保一致性。 如同嵌入營運工程師一樣,營運聯絡人也要參加團隊的stand up meeting與 retrospective meeting,且需將團隊需求納入整個營運計畫,以及需排解相關的資源競爭。

      ////

      Part 3 -Part 6 請往這裡走  ~

      Part 3:第一步工作法:暢流的技術實踐
      Part 4:第二步工作法:回饋的技術實踐
      Part 5:第三步工作法:持續學習與實驗的具體實踐
      Part 6:整合資訊安全、變更管理和合規性的技術實踐




      若有您轉貼需求,請來信討論。 轉貼時禁止修改內容及標題且保持所有連結。禁止商業使用,請註明原文標題、連結以及作者。

      沒有留言:

      張貼留言

      Peggy的實驗空間| 小書庫 Index card ( 讀書筆記總目錄/書單 )

        一直很喜歡閱讀,也常從閱讀好書中與讀書會得到許多的力量與啟發,不管是在人生的低潮抑或是順遂的時候。在閱讀之路上,這幾年也保持一個習慣。當閱讀到喜歡的書籍,且那陣子時間允許,就會提醒自己閱讀完後整理出心得筆記。一方面藉機鍛鍊寫作肌肉與思路,方便之後的複習和查閱。另一方面,也可以...