|
過(guò)去四年,David Mack 一直在 SketchDeck 擔(dān)任 CTO ,如今,他即將離職并交棒給他的團(tuán)隊(duì)。在離開(kāi)之際,他反思了作為 CTO 這四年來(lái)的經(jīng)驗(yàn)教訓(xùn),以及如果再來(lái)一次,他應(yīng)該在剛開(kāi)始擔(dān)任 CTO 的時(shí)候注意的事情。包括最初的決策、技術(shù)選擇和人才招聘等方面的思考,希望給新晉 CTO 一些啟發(fā)。 反思過(guò)去的經(jīng)驗(yàn)教訓(xùn)是一段充滿(mǎn)激情的美妙經(jīng)歷,與傳統(tǒng)工作相比,創(chuàng)業(yè)是一個(gè)相反的過(guò)程:最開(kāi)始你并不知道公司能否啟動(dòng),也不確定這能否變成一個(gè)全職的工作;隨著公司的發(fā)展壯大,你開(kāi)始面對(duì)各種蜂擁而至的問(wèn)題,而且大多數(shù)問(wèn)題你之前都沒(méi)有碰到過(guò)。在這段時(shí)間里你會(huì)以飛快的速度積累并掌握各種知識(shí)和經(jīng)驗(yàn)。 創(chuàng)業(yè)公司雖然靈活,但你最開(kāi)始作出的決策將會(huì)在以后的時(shí)間里產(chǎn)生影響。一開(kāi)始對(duì)基礎(chǔ)設(shè)施、框架以及編程語(yǔ)言的選擇,會(huì)影響相當(dāng)長(zhǎng)的一段時(shí)間。隨著業(yè)務(wù)的發(fā)展,需要增加的功能和子系統(tǒng)越來(lái)越多,其中的每一項(xiàng)都會(huì)在未來(lái)影響后續(xù)的選擇,而當(dāng)公司進(jìn)入快速發(fā)展期的時(shí)候,你會(huì)發(fā)現(xiàn)根本沒(méi)有辦法停下來(lái)考慮重構(gòu)。 我對(duì)于我們最開(kāi)始的選擇還是比較滿(mǎn)意的:Amazon Web Services 、Elastic Beanstalk 、Firebase 、AngularJS 、Coffeescript 、Kafka 、Simple Queue System 、SocketStream 、Docker 、SemaphoreCI 、MySQL 。其中,只有 AngularJS 和 MySQL 兩個(gè)在后續(xù)的擴(kuò)展上帶來(lái)問(wèn)題。我們的 AngularJS 代碼是寫(xiě)在一個(gè)文件上的,該文件后來(lái)變得很大,導(dǎo)致初次下載的時(shí)候需要耗費(fèi)一段時(shí)間,而且在系統(tǒng)運(yùn)行時(shí)也感覺(jué)很慢。MySQL( 用的是 RDS )由于 BI 查詢(xún)的復(fù)雜度增加而崩潰了好幾次,并且不好修復(fù)。 一項(xiàng)技術(shù)的生命周期出乎意料地短。我們用到的 CoffeeScript 和 AngularJS 就是現(xiàn)在已顯得過(guò)時(shí)了的組件(我們打算遷移到 TypeScript 和最新版的 AngularJS ),但它們?cè)谖覀冞x用的當(dāng)時(shí)都是比較前沿的。另外比較幸運(yùn)的是,我對(duì)新技術(shù)的鐘情并沒(méi)有造成什么嚴(yán)重的問(wèn)題。我很慶幸選擇了 CoffeeScript ,在過(guò)去這幾年里,它那簡(jiǎn)明的語(yǔ)法幫助我大大地提升了開(kāi)發(fā)效率。 經(jīng)歷了上述這些事情后,我意識(shí)到,需要提前對(duì)技術(shù)的更新?lián)Q代做好時(shí)間安排和策略準(zhǔn)備。對(duì)于每一項(xiàng)技術(shù)的選定,你都有要有承受長(zhǎng)期的“技術(shù)債”的心理準(zhǔn)備。 同樣地,你寫(xiě)的組件和庫(kù)也會(huì)被長(zhǎng)時(shí)間地使用。不管寫(xiě)得好壞,你都幾乎不會(huì)再去動(dòng)它。因此你最好在開(kāi)始的時(shí)候多花一些時(shí)間進(jìn)行設(shè)計(jì)和構(gòu)建,以方便日后的維護(hù)。 我對(duì)那些暫停開(kāi)發(fā)新功能并重寫(xiě)整個(gè)系統(tǒng)的“重構(gòu)”做法一向是反感的。這曾讓很多項(xiàng)目陷入死亡的漩渦?!巴榆娷娨?guī)”里面有一條說(shuō)得很好: 試著讓這個(gè)世界比你認(rèn)識(shí)它的時(shí)候好一點(diǎn) —— Robert Baden Powell ,童子軍與女童軍的創(chuàng)始人。 于是我們嘗試在代碼中進(jìn)行一些小改進(jìn)。有時(shí)候想通盤(pán)考慮整個(gè)代碼庫(kù)的狀態(tài)(往往都是不完美的狀態(tài))會(huì)讓人感到頭大,所以我會(huì)專(zhuān)注于持續(xù)、小幅的改進(jìn)。 最后,關(guān)于測(cè)試的一些提醒:讓我們的團(tuán)隊(duì)編寫(xiě)測(cè)試代碼真的是難于登天。我給我們系統(tǒng)中的很多部分都編寫(xiě)了測(cè)試用例,并配置好了測(cè)試服務(wù)器,在每次有代碼提交的時(shí)候會(huì)自動(dòng)運(yùn)行。盡管如此,我還是很少看到其他人添加新的測(cè)試用例。我本希望團(tuán)隊(duì)能自發(fā)地重視測(cè)試,但是,并沒(méi)有。對(duì)此,我的一些解決思路是:
除了技術(shù)決策以外,CTO 的另外一大責(zé)任是人員管理。CTO 每天的大部分時(shí)間會(huì)花在管理與領(lǐng)導(dǎo)、招人與解雇等事務(wù)之中。我不得不一邊學(xué)習(xí)如何管理一邊推進(jìn)工作,所以不可避免會(huì)犯一些錯(cuò)誤。 不管我閱讀過(guò)多少次“員工是公司最重要的資產(chǎn)”,我都沒(méi)有準(zhǔn)備好應(yīng)對(duì)招聘這么讓人筋疲力盡的事情。如果你剛開(kāi)始著手招聘,那我要提醒你:你可能要在上面花很長(zhǎng)的時(shí)間,也可能要拒絕掉很多人,才能找到讓你滿(mǎn)意的那位。在此之前我從來(lái)沒(méi)有想到,優(yōu)秀的創(chuàng)業(yè)團(tuán)隊(duì)成員竟然如此稀少,我竟需要花如此之多的精力才能找到他們。 選擇招聘的時(shí)機(jī)也是另外一個(gè)棘手問(wèn)題:這個(gè)職位是現(xiàn)在就要招,還是晚點(diǎn)?哪個(gè)職位要先招?這些問(wèn)題在你得到投資之后會(huì)尤其突出,因?yàn)槟銜?huì)覺(jué)得應(yīng)該要把這些錢(qián)派上用場(chǎng)。幸好,Michael Siebel 和 YC 給我們提供了一些很有用的建議:
綜上所述,如果你不確定某個(gè)崗位是否需要招聘,那可能就是太早了。我們犯過(guò)的錯(cuò)誤就是:過(guò)早地招人來(lái)做一些我們自己并不擅長(zhǎng)的增長(zhǎng)方案,結(jié)果基本上是以失敗告終。 員工管理基本上一路走來(lái)都比較順利 —— 定期開(kāi)展開(kāi)誠(chéng)布公的檢查,明確什么是該做的,什么是不該做的,這些措施讓我和我的員工保持著良好的關(guān)系。 解雇員工則比較艱難。你可以在別處找到很多有用的建議,我這里只簡(jiǎn)單說(shuō)一點(diǎn):你的直覺(jué)通常很早就告訴你應(yīng)該解雇某個(gè)人,但你往往要經(jīng)過(guò)很長(zhǎng)時(shí)間才能接受這個(gè)事實(shí)并著手實(shí)施,而且實(shí)施過(guò)程通常很困難。擁有良好的檢查制度可以幫助雇傭雙方做好最壞結(jié)果的準(zhǔn)備。另外,如果安排合適的個(gè)人發(fā)展計(jì)劃,有些人的水平能得到提升甚至達(dá)到優(yōu)秀,每個(gè)人都應(yīng)該有這樣的機(jī)會(huì)。 伴隨公司發(fā)展的一大樂(lè)趣就是看到一些優(yōu)秀的人才在各自的領(lǐng)域冒出頭來(lái),成為新的領(lǐng)導(dǎo)者。在此,我要向我的整個(gè)團(tuán)隊(duì)致以誠(chéng)摯的敬意和祝賀。 查看原文:https:///sketchdeck-developer-blog/what-i-wish-i-knew-when-i-became-cto-fdc934b790e3 |
|
|
來(lái)自: TGO鯤鵬會(huì) > 《待分類(lèi)》