新晉 CTO ,這裡有份過來人的經驗要送給你
來自專欄 萬能的CTO
過去四年,David Mack 一直在 SketchDeck 擔任 CTO ,如今,他即將離職並交棒給他的團隊。在離開之際,他反思了作為 CTO 這四年來的經驗教訓,以及如果再來一次,他應該在剛開始擔任 CTO 的時候注意的事情。包括最初的決策、技術選擇和人才招聘等方面的思考,希望給新晉 CTO 一些啟發。
作者 | David Mack
翻譯 | 謝健芬
反思過去的經驗教訓是一段充滿激情的美妙經歷,與傳統工作相比,創業是一個相反的過程:最開始你並不知道公司能否啟動,也不確定這能否變成一個全職的工作;隨著公司的發展壯大,你開始面對各種蜂擁而至的問題,而且大多數問題你之前都沒有碰到過。在這段時間裡你會以飛快的速度積累並掌握各種知識和經驗。
創業公司雖然靈活,但你最開始作出的決策將會在以後的時間裡產生影響。一開始對基礎設施、框架以及編程語言的選擇,會影響相當長的一段時間。隨著業務的發展,需要增加的功能和子系統越來越多,其中的每一項都會在未來影響後續的選擇,而當公司進入快速發展期的時候,你會發現根本沒有辦法停下來考慮重構。
我對於我們最開始的選擇還是比較滿意的:Amazon Web Services 、Elastic Beanstalk 、Firebase 、AngularJS 、Coffeescript 、Kafka 、Simple Queue System 、SocketStream 、Docker 、SemaphoreCI 、MySQL 。其中,只有 AngularJS 和 MySQL 兩個在後續的擴展上帶來問題。我們的 AngularJS 代碼是寫在一個文件上的,該文件後來變得很大,導致初次下載的時候需要耗費一段時間,而且在系統運行時也感覺很慢。MySQL( 用的是 RDS )由於 BI 查詢的複雜度增加而崩潰了好幾次,並且不好修復。
一項技術的生命周期出乎意料地短。我們用到的 CoffeeScript 和 AngularJS 就是現在已顯得過時了的組件(我們打算遷移到 TypeScript 和最新版的 AngularJS ),但它們在我們選用的當時都是比較前沿的。另外比較幸運的是,我對新技術的鐘情並沒有造成什麼嚴重的問題。我很慶幸選擇了 CoffeeScript ,在過去這幾年裡,它那簡明的語法幫助我大大地提升了開發效率。
經歷了上述這些事情後,我意識到,需要提前對技術的更新換代做好時間安排和策略準備。對於每一項技術的選定,你都有要有承受長期的「技術債」的心理準備。
同樣地,你寫的組件和庫也會被長時間地使用。不管寫得好壞,你都幾乎不會再去動它。因此你最好在開始的時候多花一些時間進行設計和構建,以方便日後的維護。
我對那些暫停開發新功能並重寫整個系統的「重構」做法一向是反感的。這曾讓很多項目陷入死亡的漩渦。「童子軍軍規」裡面有一條說得很好:
試著讓這個世界比你認識它的時候好一點 —— Robert Baden Powell ,童子軍與女童軍的創始人。
於是我們嘗試在代碼中進行一些小改進。有時候想通盤考慮整個代碼庫的狀態(往往都是不完美的狀態)會讓人感到頭大,所以我會專註於持續、小幅的改進。
最後,關於測試的一些提醒:讓我們的團隊編寫測試代碼真的是難於登天。我給我們系統中的很多部分都編寫了測試用例,並配置好了測試伺服器,在每次有代碼提交的時候會自動運行。儘管如此,我還是很少看到其他人添加新的測試用例。我本希望團隊能自發地重視測試,但是,並沒有。對此,我的一些解決思路是:
- 組織定期的講座重溫如何編寫測試用例;
- 要求重要的功能必須包含至少一個測試用例;
- 優化測試伺服器,讓自動化測試在 10 秒內完成,而不是 10 分鐘,讓程序員及時看到測試結果。
除了技術決策以外,CTO 的另外一大責任是人員管理。CTO 每天的大部分時間會花在管理與領導、招人與解僱等事務之中。我不得不一邊學習如何管理一邊推進工作,所以不可避免會犯一些錯誤。
不管我閱讀過多少次「員工是公司最重要的資產」,我都沒有準備好應對招聘這麼讓人筋疲力盡的事情。如果你剛開始著手招聘,那我要提醒你:你可能要在上面花很長的時間,也可能要拒絕掉很多人,才能找到讓你滿意的那位。在此之前我從來沒有想到,優秀的創業團隊成員竟然如此稀少,我竟需要花如此之多的精力才能找到他們。
選擇招聘的時機也是另外一個棘手問題:這個職位是現在就要招,還是晚點?哪個職位要先招?這些問題在你得到投資之後會尤其突出,因為你會覺得應該要把這些錢派上用場。幸好,Michael Siebel 和 YC 給我們提供了一些很有用的建議:
- 當你感覺某個職位需求非常迫切的時候才開始招聘(比如快趕不上合同進度了的時候);
- 招人是為了滿足業務發展的需要,不能本末倒置(這條主要適用於還沒有形成規模化、可持續的業務流程的早期公司);
- 不要招人來做一些你都還沒想明白的事情(一些特殊的候選人也許能給公司帶來新的動力,但通常最靠譜的辦法還是靠創始人調整公司資源以適應新的發展)。
綜上所述,如果你不確定某個崗位是否需要招聘,那可能就是太早了。我們犯過的錯誤就是:過早地招人來做一些我們自己並不擅長的增長方案,結果基本上是以失敗告終。
員工管理基本上一路走來都比較順利 —— 定期開展開誠布公的檢查,明確什麼是該做的,什麼是不該做的,這些措施讓我和我的員工保持著良好的關係。
解僱員工則比較艱難。你可以在別處找到很多有用的建議,我這裡只簡單說一點:你的直覺通常很早就告訴你應該解僱某個人,但你往往要經過很長時間才能接受這個事實並著手實施,而且實施過程通常很困難。擁有良好的檢查制度可以幫助僱傭雙方做好最壞結果的準備。另外,如果安排合適的個人發展計劃,有些人的水平能得到提升甚至達到優秀,每個人都應該有這樣的機會。
伴隨公司發展的一大樂趣就是看到一些優秀的人才在各自的領域冒出頭來,成為新的領導者。在此,我要向我的整個團隊致以誠摯的敬意和祝賀。
原文地址:https://medium.com/sketchdeck-developer-blog/what-i-wish-i-knew-when-i-became-cto-fdc934b790e3
文章首發於微信公眾號「 TGO鯤鵬會 」,未經授權,不得轉載!
推薦閱讀:
※「分享經濟的邊界」
※遠離致命「蠟燭包」!媽媽該如何正確包裹寶寶?
※美容院如何拓客才有效,聽聽他們怎麼說
※賣家心得分享:亞馬遜2年的辛酸血淚史
※第一胎·寶拉水楊酸