研發效能定義及核心價值

本文主要澄清了敏捷開發、持續集成、持續交付1.0、持續交付2.0 、持續部署、DevOps、研發效能七個概念,以便我們在後續相關工作和實踐中能清楚地辨別。

一張圖區分

 

上圖涉及各個概念的範圍和主要區別,更細緻的區別請見下面拆解。從上圖中我們可以得到研發效能主要關注點還是在產品研發這個環節,不涉及市場。當然對於如果作為一個ToB業務,那麼市場環節就很重要。中國還是有幾個做得不錯的研發效能相關產品。

寫作初衷

軟體開發領域從不缺新概念。各種概念層出不窮,不只行業之外的人看到之後會懵逼,業內人士自己也很煩,本來很簡單的事變複雜了,也許這也是保持行業活躍度的一種方式。

本著「少些概念解決問題,腳踏實地躬身入局」的原則,之前寫了一些關於研發效能領域實踐的文章,寫完之後我一般用的標籤是「研發效能」「持續集成」「持續交付」「DevOps」,這樣就讓本來很簡單的一件事複雜了很多。文章為啥關聯這麼多標籤?到底是關於哪方面的文章?最後覺得還是要解釋下相關概念,梳理下概念之間的關係,這樣才有助於我們建立整個知識體系,這就是寫此篇的目的。

 

敏捷開發

定義

  • 凡是符合敏捷開發十二原則的方法均都是敏捷開發方法。它是一系列軟體開發方法的集合,而不是某一種特殊的軟體開發方法。

目標

  • 1)更早地交付價值
  • 2)有效學習和靈活響應變化

細品

  • 敏捷開發強調了團隊成員的積極主動性和一些原則框架,提倡了一些好的機制,但是在具體執行落地上看是比較粗的。所以你可以認為敏捷開發是一個十二個小筐組成的大筐,能裝到十二小筐里的都是敏捷開發。

1、我們的最高目標是,通過儘早和持續地交付有價值的軟體來滿足客戶。

2、歡迎對需求提出變更——即使是在項目開發後期。要善於利用需求變更,幫助客戶獲得競爭優勢。

3、要不斷交付可用的軟體,周期從幾周到幾個月不等,且越短越好。

4、項目過程中,業務人員與開發人員必須在一起工作。

5、要善於激勵項目人員,給他們以所需要的環境和支援,並相信他們能夠完成任務。

6、無論是團隊內還是團隊間,最有效的溝通方法是面對面的交談。

7、可用的軟體是衡量進度的主要指標。

8、敏捷過程提倡可持續的開發。項目方、開發人員和用戶應該能夠保持恆久穩定的進展速度。

9、對技術的精益求精以及對設計的不斷完善將提升敏捷性。

10、要做到簡潔,即盡最大可能減少不必要的工作。這是一門藝術。

11、最佳的架構、需求和設計出自於自組織的團隊。

12、團隊要定期反省如何能夠做到更有效,並相應地調整團隊的行為。

持續集成

定義

  • 持續集成是在團隊協作中將所有開發人員的程式碼頻繁地(一天內多次)合併入同一條主幹不斷集成,讓團隊感知到最新修改內容的工程實踐。

目標

  • 快速發現集成問題快速修復,同時讓團隊成員對程式碼變更有感知。

細品

  • 持續集成這個實踐還是非常具體可實操的。提高了工作節奏、工作進度可感知、協作更緊密

Continuous integration is a software development practice where members of a team use a version control system and frequently integrate their work to the main branch. Each change is built and verified to detect integration errors as quickly as possible.

Continuous integration is focused on automatically building and testing code to check that the application is not broken whenever new commits are integrated into the main branch.

持續部署

定義

  • 持續部署是程式碼提交通過評審,經過自動化構建、測試後立刻自動部署到生產環境中的工程實踐。

目標

  • 程式碼在任何時候都是可以部署到生產環境的。自動化構建、自動化測試、自動化驗證是保證其能持續部署程式碼到生產環境的基本條件和前提。

細品

    • 首先「持續部署」這個縮寫容易引起歧義,這裡的「持續部署」確切的含義指的是「持續部署到生產環境」。
    • 部署到生產環境可能受到諸多因素影響,比如額外的文檔準備、資料庫變更、配置變更、上線窗口等,所以強調品質保證通過不需要人工審批直接部署到生產環境意義不大。如果涉及到合規,是否需要人工審批這點也值得商榷。
    • 持續部署到生產環境中意義不大,但是持續部署到生產環境並發布意義非常大,因為即便部署到了生產環境也並不意味著產品的發布、價值的交付。功能開關、流量管控都是一些控制用戶訪問的技術手段。如果功能都部署到生產環境卻長時間又不對外發布,會給生產環境帶來了很大的風險和不穩定性,這是我們不提倡的。

 

DevOps

定義

DevOps是一種軟體工程文化和實踐,旨在統一整合軟體開發和軟體運維。DevOps運動的主要特點是倡導對構建軟體的從集成、測試、發布、部署、基礎架構管理等所有環節的全面自動化和監控。

目標

DevOps 的目標是縮短開發周期,提高部署頻率和更可靠的發布,與業務目標保持一致。

細品

  • DevOps也很廣,一旦涉及文化,很多都說不清。
  • 我認為它所倡導的產品研發各環節全面自動化和監控是非常有先進性的,某種程度上說促進了各個公司產研基礎設施的建設和升級。解決產研問題的思路從靠規範、流程約束升級到了靠工具、靠平台來自動化完成,促進了產研基礎設施的建設。DevOps把產研基礎設施從拿幾款開源程式搭建解決單點問題的時代提升到了整合工具解決領域問題,這是很大的進步。

 

持續交付1.0

定義

  • 持續交付是可持續、安全快速地把程式碼變更(包括特性、配置、缺陷和試驗)部署到生產環境上,讓用戶使用的工程實踐。

目標

  • 持續部署程式碼變更到生產環境並交付的工程實踐

細品

    • 持續交付1.0 是持續集成實踐的一個延伸,把程式碼變動後自動部署到測試/生產環境的流程進行了標準化、自動化。
    • 我個人覺得持續交付1.0明確提出的「可持續方式、安全快速地把程式碼變更部署到生產環境、讓用戶使用」是之前很多概念所沒有的。之前的很多最佳實踐更多關注程式碼編寫、構建和測試的環節,而持續交付1.0把這個環節延展到了生產環境。
    • 只有部署到生產環境交付給用戶使用的功能才真正地有價值。寫了很多需求文檔、編寫了很多程式碼、測試用例,但是只要沒有真正的部署到生產環境,讓用戶用到,其實可以認為「零價值」,考慮到成本甚至是「負價值」。我們把這種程式碼長時間停留在研發和測試環境不上線的行為稱之為「等著下小崽」。要是真可以下小崽也不錯,實際上程式碼長時間停留在研發和測試環境維護成本非常高,每次回歸不但要驗證下新部署的功能,還要判斷/驗證下新部署的功能是否破壞了長時間停留在環境中的功能是否也正常,如果部署順序有依賴,程式碼上、配置上有衝突的問題會更複雜。

 

 

    • 持續交付1.0和持續部署的區別是,持續部署強調了程式碼經過評審和自動化測試「立刻」「不需要審批自動」地部署到生產環境;而持續交付1.0強調了持續把程式碼部署到生產環境的能力,至於是「是否立刻」「是否需要審批」則未必。另外持續交付包含了發布產品,也就是交付產品價值這個階段,這是持續部署所沒有的。很多文章都說持續部署是持續交付更進一步的做法,把部署生產環境也自動執行了,實質上欠妥。

Continuous delivery is a software development methodology where the release process is automated. Every software change is automatically built, tested, and deployed to production.

Before the final push to production, a person, an automated test, or a business rule decides when the final push should occur. Although every successful software change can be immediately released to production with continuous delivery, not all changes need to be released right away.

This means that on top of automated testing, you have an automated release process and you can deploy your application any time by clicking a button.

 

持續交付2.0

定義

  • 持續交付2.0是一種產品研發管理思維框架,將精益創業與持續交付1.0相結合,強調業務與IT間的快速閉環,以「精益思想」為指導,全面貫徹「識別和消除一切浪費」的理念,通過一系列工作原則與實踐,幫助企業以一種可持續方式、高品質、低成本、無風險地快速交付客戶價值。

細品

  • 持續交付2.0把精益創業部分納入了進來,升級成了一種產品研發管理思維框架。這是很大的進步,讓我們可以站在更高的維度審視我們做的事情。

 

研發效能

定義

  • 研發效能是一個組織高效交付產品的能力,以及圍繞提高這一能力所建立起來的由規範、流程、標準、工具、度量體系、實踐等組成的系統工程體系。

目標

  • 夯實產品研發基礎設施,賦能組織持續高質高效地交付產品價值。

細品

  • 研發效能包括規範制定、流程優化、工具建設、研發度量和實踐這五個方面。後面的文章我會針對這五個方面一一闡述。

總結

研發效能是組織高效交付產品的能力及支撐其能力所建立的系統工程體系。持續集成和持續交付1.0都是比較好的工程實踐,持續部署對於規模比較小的產品還是很有積極作用,但是對於規模較大功能複雜的產品使用度較低。至於敏捷軟體開發裡面的很多原則還是很不錯的,我覺得要實行這些原則對人對團隊的要求還是很高的,可以秉著腳踏實地、支援業務發展的大方向謹慎試行。