這篇有兩個主題:公司文化與code review,而講者特別強調的是要如何將這兩件事情中間做連結。所以如果你想知道要如何把公司定義的價值落第到工程文化中,蠻適合可以看看這演講的。
這篇的主旨其實討論的是公司文化而非Code review。講者利用Code review做為範例,示範如何由下而上的在code review的過程中加入培養公司文化。
整個演講分成兩部分,第一大部分講的是「公司文化」而第二部分講的是「Code review與文化的交互影響」。
講者首先介紹了四種價值:
基本價值(Permission to play value)
公司裡最基本的行為標準,例如誠實、尊敬、可信…等等。
核心價值(Core values)
這是當公司利益衝突時決定要取何者重要標準,所以不能是太general就像permission to play一樣。
志向價值(Aspirational value)
這比較像是公司期望的價值,並不是繼承而來也不是自然產生的,而是刻意安置到公司裡的。
意外產生的價值(Accidental values)
這代表的是公司不預期但意外產生的價值,有可能是從一群有相同背景的人帶來的文化,也有可能是因為公司環境而自然產生的問題。這種類的價值必須要謹慎對待,因為這種價值有可能會將新人或新觀點拒於千里之外。
上面四種價值基本上驅使公司中所有決策與策略,所以時刻確認做的事情是否與公司價值一致是很重要的。
而為了達到讓團隊真正的合作,我們必須要克服失能團隊的五大障礙(The five dysfunctions of a team)。由下而上是:
(圖片擷取自原演講影片連結)
細節在此不多做介紹,有興趣的人可以直接去搜尋此書《克服團隊領導的5大障礙》。
而講者提到一個問題,新創公司都會遇到的一大問題是我們要怎麼權衡「把事情做好」與「快速完成事情」?她說小朋友才做選擇,我們兩個都要。所以建立好的團隊在此就至關重要了。
下半部演講講的是關於將公司文化應用在code review上的部份。
她先大略提及了SalesLoft的code review流程
(圖片擷取自原演講影片連結)
而做這些Code review的目的有:提高可讀性,確認架構與設計的決定,在測試前就找到bug,與知識轉移...等等。而code review的過程其實也是一段技術間的對話,讓工程師們用code review的方式薰陶與體現公司的價值。
不過,聽起來其實流程有夠繁瑣,這樣不是無法達到「快速完成事情」的目的嗎?講者表示其實不會,因為你早期發現問題,與確認code的品質,其實對未來都是一項很大的投資。我們在確認「做對事情」之中,可以確認符合各種原則(例如SOLID、DRY、KISS...等等)或測試覆蓋率等等,這些都可以幫助未來在開發時增加效率,短期可能比較緩慢但長期來看卻是快速的。
而她們又如何在code review的過程中展現團隊合作的精神呢?藉由code review可以達成
接下來講者也拿出了一些公司的例子以表達真的有在做上面這些事情而不是唬爛的,有興趣的可以看原演講影片。
身為code reviewer你可以嘗試做到下面幾件事情
嘗試避免下面幾件事
講者表示我們要嘗試讓工程師參與建立好的工程文化,一如讓工程師參與建立好的codebase一樣。
首先要來吐槽一下這個演講結構XD,我覺得這個演講整體內容是ok,但是因為她想講太多東西,而每件事中間連結的邏輯性不夠強,所以導致其實聽眾有點難抓到她的重點在哪裡。例如失能團隊的五大障礙我覺得在整個演講中其實沒有真的很有必要,即時整個拿掉都不影響到原演講的主旨。而價值的種類其實也不是這麼重要,只要留下核心價值就足夠貫穿全文了。
而演講內容也有些我不太認同的地方,以下來講講。
我完全可以理解這件事情的痛苦與可能性,畢竟我也是看著新創一路從不到百人變幾千人的規模。我同意團隊合作是能同時達成速度與品質重要的因素。但是這講法僅限於完全理想的狀況。
所以當一個公司制定的策略是兩者兼顧時,我覺得其實是非常不負責任也不切實際的,因為最後其實最後苦的都是那些相信公司價值的員工,因為他們會花大量的時間與精力去達到公司所說的目的。
我其實也一直在思考公司提倡的核心價值到底能帶來什麼樣的意義,因為我自己個人在公司推動核心價值這部份的印象是沒有很好XD。公司雖然在各處傳達核心價值(廁所、會議室到處貼、年度評鑑也要寫自己對核心價值做了哪些貢獻)但對員工的感覺是教條洗腦式的宣導,並沒有對我們的工作有實質的幫助。或許是公司訂的核心價值太過generic,所以變成所有的事情,任何作法都可以和核心價值硬扯上關係,只是看你多會扯而已。但是這樣的結果又給公司的文化帶來那些貢獻,我自己覺得是感受不到的。
雖然對於這篇演講充滿疑慮,但我覺得講者也提到我蠻認同的點,就是Code review其實就是整個工作過程的一個縮影。Code review不只單純只是把code寫好而已,更是一個重要的溝通管道,可以透過這個過程去理解別人的個性,想法與思考過程,做事的應對方式,甚至也可以展現leadership的skill。
記得Indeed的面試有一關就是Code review的interview,我自己覺得是蠻好的,光是這個小小的過程可以看出你的細心程度,看出你的技術底子,看你在乎什麼不在乎什麼,也可以看你的coaching或mentoring的能力。
不過可惜的是我覺得自己在code review上面做的貢獻並沒有很多,所以自己在利用code review分析人的行為上面並沒有特別的擅長,這也是我下一份工作可以著重練習的地方之一。