iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
1
Software Development

與頂尖工程師談「追求卓越」系列 第 14

東南亞獨角獸 Head of Engineering - Sam [Part 2]

  • 分享至 

  • xImage
  •  

上一篇 Sam 分享他如何從新聞系轉職成網路開發者。在這篇,我們會討論以下如何打造團隊,以及 microservices 與辦公室政治的關聯。


Bernard:那我們來談一下你建立團隊的經驗。在上一份工作,你是從零打造一個工程團隊,後來團隊有多少人啊?

Sam:在台灣這邊大概六十出頭。

Bernard:這應該是個滿有趣的經驗。可以講一下這個過程嗎?比如說你第一個 team member 是怎麼找的?然後怎麼把團隊建立起來的?

也先說,很感謝 Sam,過去錄取了不少 ALPHA Camp 的學員。我們學生在你那邊學到很多。

所以請你分享一下,在不同階段,如何建立、如何管理團隊的?我覺得第一至五個是最難的,過三、四十的話,後面也很難,所以團隊是怎麼發展的?

Sam:我覺得 Bernard 講到一個關鍵,就是在不同的規模、不同的 timeline 下,你管理團隊的方式是不一樣的。一開始我們小團隊的時候找人,我們是靠關係、靠朋友介紹。「我們這麼熟,你要不要來幫我一下?」就這樣。那時候團隊的士氣 (morale) 是非常非常高的。你在維繫團隊,你也會跟他們打成一片。這時候團隊的向心力,取決於你跟團隊成員的信任度。

Bernard:沒錯。其實一個團隊的初步階段,信任是非常重要的。

Sam:因為如果你今天是 hire 一個你完全不認識的人進來,一定需要跟他磨合。你需要花心思、花時間去了解他。可是當初我們的任務是把 team build 起來,在一個月之內,launch 一個新的 service。這是一個非常困難的任務。

其實現在回想起來,我還是覺得有點不可思議,可是我們真的做到了。起初的五個,我記得好像只有一個是透過朋友介紹,有跟我真正面試進來的。其他都是我的朋友,或是甚至是以前我有 interview
過,私底下有聯絡的社群朋友。一開始的草創的時期,我還記得那時候辦公室很小,大家擠在一個狹小、擁擠的空間,可是感情是最好的,我也過的蠻開心,之前 ALPHA Camp 的一些成員,也是那個時候加入。

在那個時候,我在評估成員的 quality 的時候或是他們的能力時,我比較在乎的是這個人跟我是不是 match,能否快速建立默契。如果他/她跟我平常相處、對話,或是溝通事情上面,我都需要花時間去讓對方理解,那我覺得他/她不是適合一開始的這個小團隊。因為小團隊最沒有的就是時間。速度要快,我只要起一個頭,你就可以幫我把尾巴接完。這種默契是非常重要的。

小團隊最沒有的就是時間。速度要快,我只要起一個頭,你就可以幫我把尾巴接完。這種默契是非常重要的。

Bernard:嗯。我在過去創辦過兩家公司時,也有類似的領悟。那後來呢?團隊到了中期時,有什麼改變?

Sam:後來一直擴展到中期二、三十個,然後再三、四十個人,每個階段都會遇到不同的問題。但是我覺得有一個比較大的中心思想是:小團隊有小團隊做法,大團隊有大團隊的模式。比如說小團隊你可能向心力高、士氣高,但是等到你變成大團隊的時候,process 就變得很重要。你不能說一個 team 去 follow 一種 coding standard ,另一個 team 就 follow 另一種。這樣的開放是沒有辦法銜接的。在團隊協作上也會造成很大的溝通障礙。這是後要注意的是如何把 process run 順。你說要跑 scrum,每團隊對 scrum 的理解與定義都可能不一樣。

你怎麼去取得共識,align 不同的團隊?你怎麼讓大家可以利用你的 process,去很順暢做事,而不是拘泥 process 上面?其實後來,這些 process 都讓我覺得工作很困難。

Bernard:我先多問一些細節。你們在台灣有幾十位工程師,但是你們在亞洲四個國家也有工程團隊?可以大概講一下,組織架構是什麼嗎?團隊又是如何分工的?是「臺灣做後端,新加坡做前端」的這種?還是從產品線、或是客戶端來分?

Sam:基本上,我們四個團隊,它們的分工與 functionality 是不同的。有一個重點是,每一個國家的團隊都可以完整地運作。所以不是台灣只做前端、或是新加坡只做後端。No! That’s not gonna work。因為這樣溝通成本太高了。我們現在的區分是,台灣全部是做消費者相關的產品,而新加坡是做所有跟物流有關的功能,包括我們的 data team 也在新加坡。物流包括些什麼呢?我們如何去演算,用最短距離去配送,我們怎麼做倉儲的控管等等。印度的團隊主要是輔助企業客戶做 data handling,幫助大的企業客戶上架。最後,越南就是做所有跟 payment 有關的功能。我們自家蓋了一個錢包,有自己的 payment gateway。這些都是越南的團隊負責。

所以你可以很清楚看到,四個國家有負責自己不同的 functionality。其實這個概念有點像業界近幾年在講的 microservices 架構。

Bernard:哦?所以你們也是以 microservices 的模式來開發、來管理的?

Sam:為什麼我們要做 microservices 呢?其實我覺得 microservices 不是一個萬靈藥,可是 microservice 可以確切解決一個很麻煩的問題,就是「政治 (politics)」。

其實我覺得 microservices 不是一個萬靈藥,可是 microservice 可以確切解決一個很麻煩的問題,就是「政治 (politics)」

Bernard:怎麼說?

Sam:假設今天三個 team ,他們都用同一個 code base,然後他們都要發佈新的版本 (release),你覺得 release 的步驟給如何管理?可能 A team 我下個禮拜要的東西,可是 B team 你還要再做兩個禮拜,那我就被卡住了!

但 microservice 就可以分批應付不同的 release,讓整個流程更快、更有效率。也就是說,其實我們做 microservice 最重要的其一個原因,是讓每一個「小隊 (squad)」可以更有效率,更完整的去執行它的 squad 的精神與任務,快速迭代。

Bernard:瞭解。聽說你們也慢慢在離開 Ruby-on-Rails 這個框架。這也是跟 microservices 有關的嗎?

Sam:我們一開始主要 backend framework 跟 code structure 都是 Ruby-on-Rails。其實我們 Rails codebase 積近非常巨大。達數十萬行的 Rails codebase。但就像我剛剛提到的,每一個 team 他們維護同一套 codebase 的時候,發生了很多的問題。比如說以前發生過一個 pull request review 花了七到十二天,因為那個變動實作是太大、太多 PR 了,團隊裡沒有人有時間去看。

所以我們在去年年初時,慢慢導入 Golang。導入 Golang 的目的,第一個是希望去提升效能,第二個是希望朝向 microservice 的方向前進,讓所有的小隊 (squad) 可以獨立的運行。

現在我們的模式變得越來越流暢。我們會去評量每個 sprint 結束時,小隊是不是可以完成這個功能,能否做個簡單的 demo。

https://avinetworks.com/wp-content/uploads/2018/06/Microservices-vs-monolithic-architecture-diagram.png

以前發生過一個 pull request review 花了七到十二天,因為那個變動實作是太大、太多 PR 了,團隊裡沒有人有時間去看。

Bernard:所以聽起來,每個小隊都是 full-stack,都有自己的 KPI。而 microservices 也會把他們開發的技術分開,不會造成很嚴重的 dependency,而造成互相依賴、互相卡關的狀況。這樣就算是幾百人的開發團隊,速度都可以維持的很快。


上一篇
東南亞獨角獸 Head of Engineering - Sam [Part 1]
下一篇
東南亞獨角獸 Head of Engineering - Sam [Part 3]
系列文
與頂尖工程師談「追求卓越」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言