[管理] 如何打造優秀開發團隊
我在去年2022/3/1就正式卸下OneDegree SRE Lead這個角色,感謝優秀的Tony Pai來承擔(接刀)這個重要的擔子
其實認真要算算我軟體開發生涯至今10+年
其中有6+年左右是有帶團隊的(2–8人)
每到一間公司大概工作1年左右就會被要求要帶人
但”優秀團隊”這件事情我知道每個人會有不同定義
我會主觀定義成
1.能和外部團隊與跨國團隊和廠商都能合作愉快
2.能和內部各個部門都能合作愉快
3.團隊在技術上能夠持續進行有意義的突破與追求更好的效率
4.能一起打造團隊內的溝通文化,彼此都能互相學習成長
下面主要先來說說OD的故事念舊,同時分享我過去經歷哪些事情,還有我怎麼做決定和選擇(大家都說選擇比努力重要咩)
一個人的時期
在最早期的時候(大概是4年多前)其實是我和另外一位負責資安的同事在負責建構基礎架構,當時是有一個台灣辦公室和一個香港辦公室,串聯著雲端的Azure環境(你沒看錯我們就是微軟全家桶,Google當時沒法滿足監管要求,我們只能整個換…那是另一個坑…)
當時的架構其實相對單純,我們買License自架Gitlab,然後Runner一部分跑在香港機房內的實體機器上(省錢,機器是前人留的…那是另一個坑在此略過不提),然後在雲端有一台FortiGate和地端辦公室各有一台FortiGate的防火牆然後走Site to Site IPSEC VPN打通,當時這種的設計方式就是會同時有幾個VPN端點可以連線,有時候台灣辦公室停電或香港辦公室停電就可以有備援使用
當時開發團隊分散在香港和台灣,遠端溝通真的是比較辛苦,還好我們在最早期有出差在香港一起碰面工作過3個星期,當時在香港過著每天趕港鐵末班車回油麻地的生活,那時候就有個可愛同事很喜歡跟我線上程式筆戰XD但實體面對面講起話來人又很好,我也是摸不透他
身為公司唯一的SRE,你就是要實作所有project的CI/CD,然後處理所有雲端環境的建置與部署,還記得建置時因為每個雲端環境(dev, sit, uat, prod)都要長得一樣,當時我還記得用的是terraform 0.11.11版(後來它一波暴力改版接手的同事直接崩潰)
簡單來說,當時就是部署問題要找你,機器有問題要找你,還好當時地端辦公室網路或防火牆有問題是先找資安(我沒有擋,firewall規則都是他在改),此外配合保險公司的要求還要做災難備援的演練,恩….反正就是綜合開發加上合規,你一個人的狀況下就是要想盡辦法滿足好所有人(內部團隊+外部稽核+政府監管)的需求
這個時期很重要的事情就是,在建置雲+地端架構的時候要
1.考量好未來彈性和擴充
因為OD當時就已經有台灣香港兩間辦公室,所以當初在建置架構的時候就要考量好以後多國家多語言多組織的擴充性,但此時面臨著新創公司會有預算不足和時程緊迫的問題,所以只能盡量去選擇當下”相對”最好的方案
2.做到高度自動化,能託管出去就不要自己做
盡量要採高CP值的作法
能夠不要自己建置和管理的服務絕對不自己來
用金錢換取時間(當然要太多錢也是不行= = )
我知道外面有一派的人是什麼都要自己建置
ex. DB, cache service, firewall, log collection, alert system
我的看法是事情交給專業的來做,人生會輕鬆很多
另外就是長痛不如短痛,做自動化雖然每次會多花一點時間
但就可以避免未來時間浪費在無用的重複性工作上
還是很值得投資的
很有趣的一個實務案例,需求方(PM, 老闆, Dev)常常跟你說這東西只用一次,但常常都不是這樣,自己要能夠好好判斷背後的真相
3.命名要有一致性的規範
{company}-{project}-{service/function}-{env}-{group}-{resource-name}
這個是我們目前使用至今的命名規範
實務上會給各自負責的SRE有彈性空間,但就是要盡量遵守
(簡單來說如果我問你為何那樣取名,你要能合理解釋一番)
目標是所有資源你看一名字就要能知道那是什麼
這樣帶來的好處超級大,因為雲端加地端動輒就是破百破千個元件
如果沒有好好規劃未來一定一團亂
(我聽過別公司鬼故事是最後會有很多孤兒服務,你看名字完全不知道在幹嘛當初開的人已經離職也沒有文件,然後一停機或是那個服務斷網就出大事…)
順帶一提
Azure用訂閱 + resource group的打包層級也是我在三大雲裡面特別喜歡的
非常的好做資源管理
4.盡量都要留文件和操作手冊,然後集中歸檔好
這個就更不用說了,以辦公室 & Project為形式把資料都有做好歸檔
後面的人,或是3個月後的自己才有東西可以回憶和參考
此時的公司人數在50人內,因為團隊還很小,也在快速的改變和嘗試很多做法,相對應就是我的速度和時間要能跟上XD
小團隊時期(3–5人)
這個時期SRE人數大約在3–5人間,當時公司有兩個業務在穩定經營
那時候我們還是蠻不好找人的,一方面是我們做的事情很接近開發端,這邊就不再贅述,可以參考我之前寫的
OneDegree SRE 團隊大揭秘
https://medium.com/onedegree-tech-blog/onedegree-sre-%E5%9C%98%E9%9A%8A%E5%A4%A7%E6%8F%AD%E7%A7%98-385548018fb8
當時的期間有兩位同事加入都不是由我親自面試
其中一位在香港,一位在台灣
雖然後來都歸到我下面來重新教他們SRE的工作內容
我只能說我很幸運,他們兩位都很有責任心
都很努力學習而且會把事情做好
題外話
我那時候為了能讓溝通更順暢我還去上廣東話課
結果學到第二期課程香港同事就跳槽走了
是個很優秀的朋友沒能留住他真的可惜😩
然後我廣東話就半途而廢了…
當時的團隊運作狀況是使用JIRA的看板紀錄要做的單子
外部要找我們做事情就是開單
每週一下午也會有Weekly Meeting
大家會分享
1.上週的工作狀況
2.本週準備要做的工作
3.有沒有遇到任何問題
4.技術或特殊事情或小道消息分享
(這個我覺得是必要的,因為大家分處不同辦公室和與不同窗口合作,就可以聽到很多很多的故事,透過這樣了解到該怎麼和不同的窗口互動,因此我們共享了很多小秘密XD,也算是促進感情的一個方式)
當時也會有每月的1 on 1,基本上雖然我是有準備一個大綱
#最近的狀況?
#工作近況? 手邊工作有沒有比預期困難的部分
#工作內容?
#工作動力?
#工作量?睡眠情緒等身心狀態
#是否有需要處理的人際問題,或跨單位合作的難處
#對目前設定的目標滿意麼?
#開發潛能與職涯規劃
#溝通公司當前策略與方針
#分享自己覺得最有動力/最沒勁的點是什麼?
#有沒有什麼事情是會讓你覺得很無力的?
#透露讓你感到工作沒勁、沒動力的原因
#表達你對公司所存在的一些困惑或者關切的想法
#如果有,你對我們團隊最大的一個擔憂是什麼?
#你對我們團隊或者這個公司一年之後的設想是怎樣?我應該做些什麼來確保我們實現你所設想的目標?
#你認為我們團隊或者公司在未來將會面臨的最大一個挑戰是什麼?
原則上會圍繞著這些問題,但形式上就是很單純的聊聊天
過程中會希望盡量能夠找到我能夠幫上忙的地方
重要的是讓圖隊成員認知到“他是重要的”,同時確保他理解公司方向
這件事情很重要,因為每個人都是希望被重視被需要被尊重
身為主管其實我比較把自己視為一個協助的角色
想辦法讓團隊成員發揮他們MAX的工作表現
此外由於OD的SRE會大量與開發端協作,也要確保成員與PM和Developer的溝通都順暢,發現有誤會或是爭執的話要立刻介入調解解決
此時公司人數大約在50~100+,已經是有重要服務出問題會被檢討一番的時期,做事情也是要更謹慎,任務執行前置的溝通流程也要建立好
當前的時期(4–8人)
隨著後期的業務量爆發,加上有新資安團隊BU的成立,我們也在外面做了好幾次的招募,同時開始引進實習生進來幫忙分擔處理MIS,必須說的是人員的招募是想要組建好團隊最重要的關卡,選錯人進來不光是搞壞團隊內部氣氛,也會影響到對外的工作合作,加上請神容易送神難,我們在這邊也是特別煞費一番苦心設計流程
我們面試的機制是這樣子,基本上辛苦的HR會和搜集來的對象或自己投遞履歷的人做電話洽談當作第一關,如果有通過我們就會約第二關實體的面試,第二階段的面試過程“所有的SRE都要參與”,對你沒看錯是所有的,在我的想法,其實不光面試者在挑選公司,我們的團隊成員也在挑選未來夥伴,所以只要你願意,都可以進來或線上問你想問的問題,缺點當然是會佔用大家的工作時間,然後面試時間會拉比較長,優點則是面試者可以看見同時與所有的未來同事互動到,能夠提早看看彼此相性合不合
題目上我這邊是有準備好一份比較抽象的問題和技術問題,我們主要也是針對履歷的內容進行發問,但就是比較聊天的形式
我自己看的重點在
1.驗證履歷的真偽
我真的是有遇過履歷上寫了一堆但其實都不是自己經手,畢竟我們找的是要來hands on弄髒手做事情的人,但基本上只要誠實回答,就沒有什麼太大問題,畢竟在公司本來就是大家一起協作,你不一定什麼都知道,但你要能講出你自己寫你負責的部分的細節
另外不懂裝懂真的是大忌,在面試過程中去提問與討論是很重要的,有的時候我們講話太快或是講不清楚,也會希望你能提出來,就像我們真的在工作中一樣的情境
2.技術程度與實務經驗
基本上只要履歷有寫出來,我就一定全部會問,而且會請面試者盡可能詳細的說明每個決策與選擇的過程,是不是有什麼公司歷史包袱,當下專案的時空背景,實作的過程中有沒有遇到什麼問題,技術的運用方式與參數設定的選擇等等等等
這個部分主要是為了從回答分辨出面試者有多少料,但與外面技術面試不同的是我不會問Google找到可以背的那些題目與答案,就算有問,重點也不是放在回答是否正確本身,而是面試者能不能有條理的敘述出整個運作的邏輯與原理,從履歷下手去問,其實很容易就能夠鑑定出技術能力的程度
3.處理事情的手段與態度
執行工作基本上一定會碰到各種問題,通常我們會想要知道的是面對技術問題上面試者的選擇,如何去挑選當下最適合的方法解決問題,不管是透過溝通或是外部的廠商,都是可以的,然後面對過程中遇到的困難,面試者是怎麼思考的,我們可以透過這些問題了解面試者的心態層面
4.處理專案溝通與人際關係的方式
執行專案基本一定會與外部單位合作,透過這部分的問題會希望知道面試者在專案中扮演的角色是什麼,然後隨著專案的演進怎麼去處理好溝通這塊,比如說你今天要處理某個服務的升級,那你怎麼去溝通中間所有的細節,你與外部單位的相處模式是什麼,你們溝通的頻率與方式是什麼,怎麼樣確保彼此都了解各自負責的事項,怎樣來互相押時間定時程等等等等
其實這些問題大部分都沒有標準答案,在別的團隊成員問問題的時候我也會觀察他們互動的狀況,最好的是你就放輕鬆來聊聊天,你自己能很舒服的回答問題我們也會感受很好
完成這關之後,團隊成員會在外面立刻有個討論,然後參與者要給出是否希望他加入我們團隊(Y/N + 原因),原則上只要有一個No就謝謝再聯絡了,但還是會有些特例,這個就非常個案討論
如果有拿到過關的話,基本上會再過到最後一關的主管or老闆關,這邊就是純粹聊聊天看看文化契合度,建議是放輕鬆做自己
基本上在篩選面試者的過程中,我們會希望能找到最適合我們團隊的成員,同時也希望他對技術與公司在做的事有熱情與想法,加上聰明認真負責就可以,不要小看這樣的要求很少,其實我們發現這樣的人很難找= = “
在當前的時期因為人數變多,我的角色就比較變成不停的開會+嘗試新的解決方案,除了重大專案我會親自參與動手做,大部分就是管理好每週會議團隊成員的回報,確保所有事情都有在進度上,與外部溝通都順暢,確保大家都能開開心心充滿幹勁來工作就可以,要顧好每個人的情緒也是一件很累的事情,很感謝的是在這過程中很棒的團隊成員願意加入我們,同時塑造了我們的團隊文化,然後為了這間公司做了很多很多的努力,超感謝大家
總結
其實現在切換角色到Web3 Lab的Team Lead,在招募人才和後續管理上我還是使用一樣的原則,並且投注了很多的心力,畢竟每個人其實都是獨一無二的,思考如何善用每個團隊成員的優點,然後把他們放在可以一展長才的地方,同時要和每個人討論 & 思考未來發展方向和期望管理,真的是一件非常非常花心力的事情
實務上其實不同產業不同公司每個部門每個主管都會有不同的標準來組建團隊,這邊只能夠以我個人的主觀角度來分享,希望這樣的實際經驗談也能夠幫助到剛開始要組建團隊或是想要嘗試把團隊變得更好的主管們~
歡迎大家留言交流