Categories
程式開發

殺死“DevOps團隊”


DevOps團隊的持續存在為那些懶惰、不誠實且被誤導的人在IT流行詞的庇護下假裝做出積極的改變提供了機會。

在一個充斥著流行語的企業裡,人們通常會說:

  • 我們有敏捷嗎?看,我們計劃好了後三個月的sprint!
  • 我們有Kubernetes策略嗎?看,只要再給我們一個月,就可以讓它上生產。
  • 我們有DevOps嗎?看,我們招了很多DevOps工程師,他們在各自的團隊裡負責編寫YAML文件、運行Ansible腳本。

DevOps團隊是一個非常常見的反模式,為了讓高層相信他們正處在流行技術的最前沿,採用了一些讓人迷惑的術語,但實際上,這些角色的職責和文化與幾十年前並沒有什麼兩樣。

如果你的公司裡有“DevOps”團隊,那麼可以肯定的是,你們所做的並不是DevOps,甚至很可能完全相反。

真正的DevOps

現在,我可以告訴大家,我的一些非常好的朋友就是DevOps工程師,真的!

我們先來定義一下真正的DevOps:

你來開發,讓它跑起來,然後它在凌晨4點把你吵醒。

所以,當HR把沒有做過開發的“DevOps工程師”的簡歷塞給我時,我會覺得很荒謬。朋友,不要再這麼做了。

殺死“DevOps團隊” 1

有關DevOps更準確的定義或許是:

DevOps是指讓一個跨功能團隊負責應用程序或服務的整個生命週期,從創建到運維和支持。

我們先來看一下DevOps都有哪些好處。

DevOps會讓哪些東西變得更好

真正的DevOps會帶來更高的效率,縮短產品的上市時間,並提升產品的質量,原因如下。

開發軟件和負責軟件運行的人是同一波人,他們對軟件的質量和可維護性要求得更為嚴格,因為在軟件發生故障時,他們有可能在凌晨4點被叫醒。

除此之外,他們就像是一種“共同體”,關注彼此的問題。

他們之間不存在溝通邊界,降低了變更成本。溝通邊界會帶來延遲(比如出現問題了要提ticket,等待另一個團隊來修復問題),而他們之間的溝通卻是同步且及時的。

在寫這篇文章的時候,一位工程師向我抱怨說,一個客戶的REST應用程序要求使用加密數據才能執行操作,否則就報錯。為了生成這些加密數據,需要先運行其他應用程序,並調用一個特殊的端點。因此,需要有人負責部署這個應用程序,並監控它的運行情況,在發生問題時調用端點,用加密的數據重新配置應用程序,然後重啟。 12 Factors並沒有明確指出這個用例,但我非常確定的是,如果應用程序開發人員就是部署應用程序的人,那麼他們可能已經找到了一個更加自動化的解決方案。

NotDevOps

在你們所處的組織裡,是否看到過以下這些NotDevOps跡象?

  • 有一個叫作“DevOps”的團隊;
  • 有一個叫作“DevOps工程師”的崗位;
  • “DevOps”團隊不負責開發應用程序;
  • 就算軟件系統在凌晨4點出了問題,開發團隊也不需要做什麼;
  • 開發團隊需要通過“DevOps”團隊來幫他們處理問題。

如果你們的組織裡有以上這些跡象,那麼不好意思:你們做的是NotDevOps!不過好在不是只有你們在這麼做,因為還有很多公司也在招聘“DevOps工程師”。

在以前,我們管這些人叫系統管理員或配置管理員。他們懂Linux,負責把開發人員的代碼部署到生產環境。而在今天,如果你是一個懂Puppet/Chef/Salt/Ansible/kubectl的系統管理員,那麼恭喜,你就是一個DevOps工程師,而且你的薪水會漲個50%。

正如之前所說的,開發人員不需要讓其他人幫他們做這些事情:

  • 創建CI管道/Jenkins作業;
  • 創建Git倉庫;
  • 把代碼打包成Docker鏡像;
  • 把代碼部署到某個運行環境中;
  • 從運行的實例裡獲取日誌。

如果開發人員需要讓其他人幫他們做這些事情,那就是NotDevOps!

如果是這樣的話,你的雇主就無法從中獲得任何好處。他們認為你們在做很酷的事情,但實際上你們在對他們“說謊”。

NotDevOps比沒有DevOps更糟糕——你給雇主製造了盲點,用各種好聽的術語毀壞了那些做對了事情的人的聲譽。

經常有企業向我們諮詢如何能夠更快地交付價值。交付價值的一個最常見的障礙是低下的流動效率,也就是說,更多的時間會被浪費在等待上,而開發活動和運維活動相分離是造成這種等待的最主要原因。

那麼,DevOps團隊必須死嗎?

當然不是。

我們要做的是把“DevOps”團隊這個名字去掉,不要再管他們叫“DevOps”團隊了。

我們不要再假裝在做一些很酷的事情,而應該讓人們真打實幹。

如果這個做不到,最起碼不要自欺欺人,或者“欺騙”那些付你薪水的人。

如果已經有了這樣的團隊,該怎麼辦?

那就讓這樣的團隊通過構建自動化工具的方式為開發人員提供自助服務。

DevOps團隊不應該參與事務性的業務工作,但可以構建內部工具,為開發人員提供自助服務。通過這種方式,DevOps團隊為開發人員實現了真正的DevOps,為他們提供了運維應用程序所需的工具:日誌、指標、生命週期控制,等等。

殺死“DevOps團隊” 2

DevOps團隊不應該只是為開發人員做一次性的工作,他們需要持續不斷地收集開發人員的需求,把它們加入到產品待辦列表中,然後逐個完成這些事項,為開發人員提供自動化的可重用解決方案,幫助開發人員更好地完成任務。他們要做的是長期的產品,而不只是滿足臨時性的需求。

我們把這樣的DevOps團隊叫作平台團隊。儘管我也知道,在我們的行業,像“平台”、“服務”之類的術語所表達的意義正在被淡化。

如果你有一個DevOps團隊,他們所做的事情都是正確的,那為什麼要管他們叫“DevOps”團隊,而不是根據他們所做的產品來命名呢?

做正確的事

讓我們避開嘈雜的流行語世界,靜下心來仔細理解這些術語的真正含義。如果企業不想辦法減少浪費在等待上的時間和降低產品的上市時間,那麼再昂貴的DevOps工程師也無法改進他們的價值交付過程。

與此同時,我們是不是應該叫停濫用術語的“惡習”?是不是不要再自欺欺人,總認為自己在做有意義的事情,但實際上並沒有?

原文鏈接
https://www.engineerbetter.com/blog/kill-the-devops-team/