Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About

7.2. 技術規範的誤區

几乎所有的技術企業都會重視技術規範,為此制定各種規範,並要求員工嚴格執行。同時員工會想出各種對策,就這樣形成了潛規則。

這些規範就好比“請保持室內衛生,不准亂團垃圾,禁止隨地吐痰,不要闖紅燈” 一樣沒起到的實質作用。

管理層擅長制定烏托邦式的流程與規範,隨便拿出一條都堪稱完美,無懈可擊,但沒有考慮到執行結果,流程規範在執行過程中每個環節都會出現問題。任何一個環節出現問題就如同多米諾骨牌,造成連鎖反應,最終無法控制。

我19年的職業生涯中在不同的公司任職過,几乎每到一家公司都會遇到各種規範,隨着職業發展最後我也成為了規範的制定者,也曾經主持制定過開發規範,運維規範,測試規範等等。

我做過很多規範,文檔無數,技術人員根本不會去看,通過開會向下傳達,開會的人根本沒有心思理會你的規範,規範執行阻力是很大的,效果也差。

終於有一天我意識問題的存在,開始反思,是否需要制定這些規範?制訂流程規範的目的是什麼?

有些強制的規範可以通過一些技術手段,避免出現。不會出現也就無需規範!

7.2.1. 故事一

例如下面一個小故事,公司某部因為將開發數月的代碼丟失了,導致測試無法進行,領導大發雷霆,某管理層制定了下面的規範,大意為。



1. 定期備份機制
2. 代碼註釋要求
3. 代碼訪問需要更高層的批准
4. 詳細的部署文檔
等等

我認為源碼管理主要有兩種手段,技術手段與管理手段。

我先談談管理手段:例如通常通過規章制度,責任追究等等手段,要求員工達到規範標準,但通常執行力都會打折,無法達到預期,人的不穩定性因素太多。往往發現員工沒有按照規範操作為時已晚,將該員工辭退也無法輓回公司的損失。

就如公司規章制度寫的清清楚楚,要求員工提交代碼到版本庫,但各種原因沒有被執行,當代碼丟失,從上至下追究責任,公司的損失無法輓回。

所以我主張技術手段:例如源碼如果發佈到線上,必須經過版本庫,只能使用自動部署,不允許程序員私自將代碼交給運維手工部署。另外發佈代碼的同事,可以不提供生產伺服器登陸權限,他只能通過工具發佈代碼。

部署流程如下:



源碼(程序員) 提交到development 分支UAT階段 ----> 合併到 testing 分支Beta階段(主管合併,程序員沒有權限)------> master 分支(主管合併) -----> 自動部署系統(運維) ----> 生產伺服器。

這樣通過技術手段防止了代碼因員工離職,硬碟損壞等等原因,導致代碼丟失的可能。

代碼發佈者也無需對照部署文檔,手動登陸伺服器逐條按照部署說明書操作,防止了人員誤操作,也提高了部署效率,節省了人力成本,通常在5分鐘之內可以完成所有部署。

7.2.2. 故事二

我再來舉另外一個例子,就是開發中的編碼規範,很多軟件企業都有是不是?



例如要求程序員:
if
(){}
要寫成
if ()
{
...
}
等等要求不一一列舉,甚至組織代碼評審解決編碼規範問題。

我的建議為什麼不在IDE上設置自動格式化,或者在svn/git提交的時候通過hook調用格式化程序。甚至可以做到,在提交的時候編譯,編譯不通過,就提交不上去。

7.2.3. 故事三

管理層要求運維每天發送伺服器狀態報告,運維人員需要登錄每個伺服器或者從cacti等工具中獲得伺服器運行狀態數據,然後製作一個報告文檔,每天給各位發送一次。

運維需要一個專職人員做這個報告,這種報告几乎沒有人看,就像“人民日報” 人民從來不看。

當運維事故該出現的時候還是會出現,老闆一個一個罵,扣工資,扣獎金,運維覺得委屈,公司受到損失。平日裡的這些工作並不能避免運維事故,也不能改善運維工作。

7.2.4. 故事四

在舉一個例子,運維工作要求備份數據,制定規範,A員工負責備份,B 員工負責檢查A員工的備份。這個流程沒有任何問題。

結果兩年以後出事了,需要恢復數據,發現A沒有備份,而B在一年前就再沒有檢查A的工作。

起初前一年還是按流程備份,後來A發現B不再嚴格檢查工作,備份工作逐漸減少,最後停止了備份,一直相安無事,直到事發。

7.2.5. 故事五

我曾經遇到過一個兢兢業業的管理者,他制定規範,要求值班的同事7*24小時,每間隔一定的時間做一次操作,驗證系統正常運行,以便能夠第一時間通知運維處理故障。

值班的同事而偶偷懶,他就半夜起來監控他們工作。一個打工者能做到如此,真讓人佩服。

但是故障的頻率依然沒有改觀,運維仍是每天疲于奔命的救火。

但是我們有更好的方法,真的不必如此操勞且效率低下。

7.2.6. 總結

上面的幾個故事是一個無休止的死循環

			
出問題 -> 領導發火 -> 行政處分 -> 制定規範 -> 執行規範 -> 慢慢淡忘 -> 後續無人跟進 -> 石沉大海 -> 繼續出問題。
			
			

流程與規範的制定需要需要滿足幾個條件:簡單,易掌握,易執行,可重複執行

員工考慮的是儘快完成工作,規範不應成為完成工作的負擔。

只有機器人才能100%執行流程,任何由人執行的流程規範都不可能做到100%執行,在軍隊中即使是嚴格訓練過的士兵也常常犯錯。

很多管理者將其歸咎為 “執行力” 弱,我並不這麼認為。有些犯錯並不是執行力問題,也不是敬業度問題,可能需要從心理學角度解釋。這是我在閲讀幾本心理學著作後發現的。

我覺得很多規範是形式主義。我一向主張實用主義。

通過技術手段可能避免很多沒有意義規範,開發自動化,測試自動化,運維自動化,這是趨勢也是我的努力的目標。