我從高中就開始接觸計(jì)算機(jī)并開始編程,我非常喜歡編程,我一直以為我會(huì)寫一輩子代碼。
我從畢業(yè)就一直做技術(shù),開始一年是做 Java 語言的服務(wù)器開發(fā),開發(fā)過網(wǎng)易郵箱和微博的后臺(tái),后來轉(zhuǎn)而做 iOS 開發(fā)。
因?yàn)橄矚g,我?guī)缀醢盐宜械姆枪ぷ鲿r(shí)間也投入到技術(shù)中去。當(dāng)然,并非是把工作帶回家,而是專研技術(shù)或者從事技術(shù)寫作。
于是這幾年,我積累了超過 150 篇原創(chuàng)技術(shù)文章,在 iOS 技術(shù)圈子里面也小有名氣,也出版了一本《iOS 開發(fā)進(jìn)階》的書,微博和微信公眾號(hào)的粉絲數(shù)也都超過了 3 萬。
我做得很開心。
我一直以為,我會(huì)是一個(gè)好碼農(nóng),我會(huì)一直在技術(shù)上深入下去。
但是,改變有些時(shí)候就是來得那么突然。
涅槃重生
我還記得那一天,2014年 7 月 17 日,我當(dāng)時(shí)受到邀請,在廣州的微信分享 iOS 開發(fā)技術(shù)。當(dāng)天晚上,我接到郭常圳(我們的 CTO)的電話,知道要做小猿搜題這個(gè)項(xiàng)目,并且這個(gè)項(xiàng)目「由我負(fù)責(zé)」。
于是,我開始了技術(shù)轉(zhuǎn)管理之路。
通過從以前的項(xiàng)目組中抽調(diào)人手,小猿搜題這個(gè)產(chǎn)品技術(shù)團(tuán)隊(duì)很快組建出來了。我在開發(fā) iOS 版的小猿搜題客戶端的同時(shí),也開始了我的管理工作。
現(xiàn)在經(jīng)過了一年半,我們不但組建成了一支充滿戰(zhàn)斗力的團(tuán)隊(duì),成收獲了不小的成績:
-
小猿搜題產(chǎn)品一年時(shí)間獲得了 5000 萬的用戶。
-
我們團(tuán)隊(duì)在開發(fā)上做到了每周一次迭代,兩周一次版本發(fā)布。
技術(shù)管理的總結(jié)
在我的工作中,我慢慢總結(jié)出在創(chuàng)業(yè)公司中做技術(shù)管理工作的「方法論」。我把我的技術(shù)管理工作分成以下幾個(gè)部分:管理業(yè)務(wù),管理團(tuán)隊(duì),管理技術(shù)。
管理業(yè)務(wù)
作為互聯(lián)網(wǎng)公司,我們奉行簡單直接的溝通,所以我很多時(shí)候并不需要涉及人員的管理工作,更多的時(shí)候是業(yè)務(wù)的管理工作。業(yè)務(wù)的管理工作主要是圍繞著一個(gè)具體要做的技術(shù)開發(fā)功能點(diǎn)展開。具體包括:
-
任務(wù)分解和分配
-
制定大概的開發(fā)排期
-
每天了解開發(fā)進(jìn)度
-
討論和跟進(jìn)各種具體的技術(shù)問題
-
協(xié)調(diào)一些產(chǎn)品需求變更
-
響應(yīng)一些市場同事的需求
-
跟進(jìn)相關(guān)功能上線
在這方面,我們主要是采用 Scrum 的開發(fā)方式,見《適合碼農(nóng)工作時(shí)玩的游戲:Scrum》。
我們在整個(gè)迭代(Sprint)過程中引入四個(gè)會(huì)議:計(jì)劃會(huì)議,每日站會(huì),評審會(huì)議和回顧會(huì)議。通過事先簡單的計(jì)劃,再加上這四個(gè)會(huì)議中的詳細(xì)討論,我基本能夠做到:
-
通過計(jì)劃會(huì)議:比較合理的安排開發(fā)排期、分配任務(wù)。
-
通過每日站會(huì):每天了解開發(fā)進(jìn)度,會(huì)后討論和跟進(jìn)各種具體的技術(shù)問題。
對于產(chǎn)品需求變更和市場同事需求的響應(yīng),我主要利用自己在 Sprint 執(zhí)行過程中的時(shí)間來展開。我會(huì)根據(jù)當(dāng)前需求的大小和緊迫程度,來決定是否插入到當(dāng)前的 Sprint 中。如果插入到當(dāng)前的 Sprint 工作量太大,我會(huì)適當(dāng)做一些 Sprint 內(nèi)容的調(diào)整。
跟進(jìn)相關(guān)功能的上線主要是開發(fā)快要結(jié)束的時(shí)期,我會(huì)和產(chǎn)品同事一起試用最新的功能,了解 Bug 修復(fù)的進(jìn)度,上線的風(fēng)險(xiǎn)情況。在大部分出現(xiàn)風(fēng)險(xiǎn)的情況下,我們都希望用適度加班的方式解決,所以我們上線當(dāng)晚有時(shí)候會(huì)工作得比較晚。在無論如何都搞不定的情況下,我們可能會(huì)調(diào)整上線時(shí)間。
在業(yè)務(wù)涉及跨部門合作的時(shí)候,相關(guān)的進(jìn)度管理會(huì)更麻煩一些。因?yàn)楦鞑块T自己的進(jìn)度安排不一致,所以就會(huì)存在「等著聯(lián)調(diào)」的情況。另外聯(lián)調(diào)時(shí)出現(xiàn)問題也容易出現(xiàn)沒人主動(dòng)出來解決的情況。這些都需要負(fù)責(zé)人更頻繁地溝通和推進(jìn),以保證按時(shí)上線。
在每周的工作中,我的管理業(yè)務(wù)的工作大概花費(fèi)是 2 天左右。
管理團(tuán)隊(duì)
剛剛也說到,互聯(lián)網(wǎng)公司不怎么需要管人,那么管理團(tuán)隊(duì)主要是做什么事情呢?我認(rèn)為主要是兩件事情:招人和帶人,所謂的搭班子和帶隊(duì)伍。
1.招人
招聘這事情實(shí)在太重要了,所以必須要團(tuán)隊(duì)負(fù)責(zé)人參與。人才的招聘除了從公開的渠道收取簡歷、從獵頭或同事那里得到推薦以外,還包括定向的找一些自己熟悉的前同事或某個(gè)領(lǐng)域的知名大牛,這些工作都是非?;ㄙM(fèi)時(shí)間的。
在招人上,我們主要用到了找前同事,內(nèi)部推薦發(fā)伯樂獎(jiǎng),以及進(jìn)行技術(shù)分享和開源代碼來獲得社區(qū)影響力的方式。
值得一提的是,我們對于開源社區(qū)的貢獻(xiàn)也得到了肯定,我們的基礎(chǔ)架構(gòu)組負(fù)責(zé)人陳恒因?yàn)槎啻螢?Hbase 貢獻(xiàn)代碼,所以成為了 Hbase 的 Committer,而全中國擁有 Hbase 的 Committer 的公司在此之前只有三家,而且中國的 Hbase 的 Committer 不到 10 人。
在每周的工作中,招聘大概會(huì)占用我半天到一天的時(shí)間。
2.帶人
人才招進(jìn)來了,能否順利融入團(tuán)隊(duì),團(tuán)隊(duì)負(fù)責(zé)人以及這個(gè)人的導(dǎo)師(mentor)非常重要。需要做的事情包括:
-
平時(shí)多交流溝通。
-
在新人遇到問題時(shí),熱心地解答。
-
引導(dǎo)新人熟悉公司的工作方式。
一對一溝通來源于 Intel 公司,在最近很火的一本書 《創(chuàng)業(yè)維艱》 中里面也提到過。《創(chuàng)業(yè)維艱》的作者本·霍洛維茨是被譽(yù)為「硅谷最牛的 50 個(gè)天使投資人」之一,先后在初期投資了 Facebook、Twitter、Groupon、Skype。
他在書中對一對一溝通介紹到,一對一溝通最主要的意義是:可以使得信息從下而上地傳遞。從而獲得在其它渠道不易獲得的信息,保證透明。
適合一對一溝通的內(nèi)容有很多,包括:
-
不成熟的看法
-
迫在眉睫的問題
-
精彩的想法
-
傾訴焦慮
-
抱怨
這些內(nèi)容都不適合在別的場景中出現(xiàn),比如:不成熟的看法,如果在部門的正常會(huì)議或郵件中提出,會(huì)讓人覺得未經(jīng)過深思熟慮。又比如一些焦慮或抱怨,如果通過一些渠道宣泄給其他同事,其實(shí)也是不好的。一對一溝通讓這些內(nèi)容有了一個(gè)不錯(cuò)的出口。
5年前我剛畢業(yè)加入網(wǎng)易有道的時(shí)候,我的老大,也是我現(xiàn)在創(chuàng)業(yè)公司的 CTO 郭常圳就開始和我做一對一溝通。我非常享受每次溝通的過程?,F(xiàn)在我也開始和別人做一對一溝通,我也開始關(guān)注一對一溝通的技巧。我們認(rèn)為最大的技巧是:作為管理者,要多聽少說,讓員工成為溝通的中心。郭常圳有一個(gè)特別「老土」的辦法,就是:不主動(dòng)說話。通過這種方式,強(qiáng)迫讓員工選擇他們想聊的話題。
在《創(chuàng)業(yè)維艱》一書中,也介紹了一些適合用來引導(dǎo)的問題:
-
當(dāng)前產(chǎn)品還有哪些可以提高的地方?
-
我們部門的最大問題是什么,為什么?
-
如果有,你覺得工作中有哪一點(diǎn)令你感覺不舒服?
-
你覺得誰的工作最優(yōu)秀,為什么?
-
我們的產(chǎn)品哪方面不盡如人意?
-
我們錯(cuò)失的最大機(jī)遇是什么?
-
哪些是我們應(yīng)該做而沒有做的?
-
你自己希望未來在哪些方面能有提高?
-
有什么我能為你做的事情?
我大概保持每個(gè)月和每個(gè)組內(nèi)同事都有一次一對一溝通,有很多時(shí)候,我是通過「請他們吃飯」來完成的。一對一溝通需要一個(gè)舒適的環(huán)境,所以在咖啡廳或飯桌上,可能都比在辦公室的效果要好一些。
一對一溝通的另一個(gè)核心要素是要坦誠,這就像 Scrum 指南中用「游戲規(guī)則」來描述內(nèi)容一樣,如果管理者做不到坦誠,那么同事就不會(huì)把這當(dāng)作是一次有效的溝通機(jī)會(huì)。坦誠的溝通方式是:所有問題都真誠的回答,不掩飾問題,也不回避問題。如果溝通雙方能夠做到坦誠,即使是一個(gè)棘手的問題,那么雙方也會(huì)從「解決問題」的角度,盡量尋找可能的辦法。
除此之外,定期組織一些團(tuán)隊(duì)活動(dòng),讓團(tuán)隊(duì)每個(gè)人之間建立友誼,也是我努力在做的。這在很多大公司是 HR 部門做的事情,在我們創(chuàng)業(yè)公司里面,也變成團(tuán)隊(duì)負(fù)責(zé)人的工作之一了。
關(guān)于管理團(tuán)隊(duì),我也特別喜歡《成為技術(shù)領(lǐng)導(dǎo)者》一書中的觀點(diǎn),關(guān)于本書,更多的請見《成為技術(shù)領(lǐng)導(dǎo)者》讀書心得。書中是這么說的:
“所謂領(lǐng)導(dǎo)力,就是創(chuàng)造這樣一個(gè)環(huán)境,每個(gè)人都能在其中發(fā)揮出更多的能力。”
我想:在強(qiáng)調(diào)平等、創(chuàng)新、自由的互聯(lián)網(wǎng)公司里面,這可能就是領(lǐng)導(dǎo)力最好的定義吧。
管理技術(shù)
作為一個(gè)技術(shù)負(fù)責(zé)人,產(chǎn)品在技術(shù)上的架構(gòu)是否合理?隨著用戶量的增長,現(xiàn)有架構(gòu)能否勝任?當(dāng)運(yùn)營活動(dòng)發(fā)生時(shí),突發(fā)的流量會(huì)有多少,服務(wù)器是否能夠承受住壓力?未來技術(shù)上的架構(gòu)應(yīng)該如何演進(jìn)?除了服務(wù)器端,客戶端應(yīng)該在哪些技術(shù)方案上投入研究力量?這些都是技術(shù)負(fù)責(zé)人需要考慮和決策的。
我同時(shí)做過服務(wù)器端和移動(dòng)端的開發(fā)工作,不過由于最近幾年都是做移動(dòng)端的開發(fā),所以服務(wù)器端的架構(gòu)技術(shù)細(xì)節(jié)我其實(shí)并不是專家。所以我在這方面做得算不上很好??赡苁沁\(yùn)氣好吧,有幾次服務(wù)器的壓力問題,我們都及時(shí)發(fā)現(xiàn)并且解決了,但是時(shí)間都挺緊迫的?,F(xiàn)在,我會(huì)花時(shí)間把服務(wù)器端的架構(gòu)圖畫出來,然后一塊一塊考慮,看看有沒有更優(yōu)的方案,并且和服務(wù)器端的同學(xué)討論。
在客戶端上,我只是對 iOS 開發(fā)比較熟悉,對 Android 了解得并不深入。所以我會(huì)讓技術(shù)同學(xué)自己提一些技術(shù)改進(jìn)方案,我參與Review,我想他如果能說得有理有據(jù),還是可以授權(quán)他在技術(shù)上深入的。
其實(shí)每個(gè)平臺(tái)的技術(shù)管理可能都需要更多的「授權(quán)」,因?yàn)榫唧w做事情的人,會(huì)比技術(shù)管理者更清楚地了解細(xì)節(jié)。而對細(xì)節(jié)的深入了解,才是改進(jìn)技術(shù)架構(gòu)的方案來源。所以,盡量招靠譜的人,那么在管理技術(shù)上的工作就只需要遵守「盡量授權(quán)」的原則來就可以了。
管理技術(shù)還包括公司技術(shù)氛圍的建立,我主要在以下這些方面下了一些工夫:
-
推進(jìn)技術(shù) wiki 的使用
-
推進(jìn) iOS 端每周一次的技術(shù)分享
-
推進(jìn) Code Review 以及代碼質(zhì)量
Wiki是一個(gè)非常好用的知識(shí)管理工具,前提是每個(gè)同事都參與貢獻(xiàn)內(nèi)容。所以作為一個(gè)管理者需要用言行來指導(dǎo)新同事學(xué)會(huì)用 Wiki。我會(huì)主動(dòng)將重要內(nèi)容記錄在 wiki 上,對于一些同事發(fā)的郵件內(nèi)容,我也會(huì)要求他整理到 wiki 上。
iOS 端的技術(shù)分享也是需要管理者推進(jìn)的。我之前在網(wǎng)易有道的時(shí)候,這方面的活動(dòng)基本上是大家自愿的方式來進(jìn)行。這其實(shí)對分享者要求很高,一般的人很難達(dá)到這種意識(shí),所以當(dāng)時(shí)有道 iOS 端的技術(shù)分享很少。因此,我還是認(rèn)為「半強(qiáng)制」的分享方式更適合當(dāng)前團(tuán)隊(duì)。
「半強(qiáng)制」的分享規(guī)則需要大家認(rèn)同,在一個(gè)相對輕松的環(huán)境下達(dá)成一致,為此我專門組織了一次交流會(huì),大家相互認(rèn)識(shí)一下,一頓吃喝之后,再約定分享規(guī)則?,F(xiàn)在看起來,大家其實(shí)有很多想分享的內(nèi)容,在 Wiki 上,很多一兩個(gè)月才輪到他的人,都已經(jīng)把分享的主題確定了。
Code Review 也是一個(gè)需要推動(dòng)的事情,我們使用 Git 和 Gerrit,做到了所有的提交必須 review 通過之后,才能 merge 進(jìn)代碼倉庫。另外我們也在 wiki 上規(guī)定了詳細(xì)的代碼風(fēng)格要求。Code Review 如果做得好,不但可以在代碼風(fēng)格上達(dá)成一致,還能讓新同事從中學(xué)習(xí)到一些良好的編程習(xí)慣,一些潛在的 Bug 也可能在 Code Review 中被發(fā)現(xiàn),實(shí)在是值得堅(jiān)持的事情。
產(chǎn)品負(fù)責(zé)人
除了技術(shù)負(fù)責(zé)人的管理業(yè)務(wù),管理團(tuán)隊(duì),管理技術(shù)工作外,我另外還是小猿搜題的產(chǎn)品負(fù)責(zé)人,所以我還承擔(dān)著技術(shù)負(fù)責(zé)人之外的一些工作。這些工作最主要的就是對產(chǎn)品的管理工作。
產(chǎn)品工作看似簡單,實(shí)則復(fù)雜,而我作為一個(gè)工作多年的程序員,在這方面的經(jīng)驗(yàn)非常少。所以我在參與產(chǎn)品討論時(shí),一開始都比較惶恐。后來我慢慢發(fā)現(xiàn),產(chǎn)品經(jīng)理的思維還是有章可循,便開始總結(jié)和學(xué)習(xí),我看了不少產(chǎn)品經(jīng)理的書,而郭常圳的多次指導(dǎo)也對我的幫忙意義巨大。其實(shí)做產(chǎn)品的原則就那么多,重要的還是多思考和體會(huì),把那些原則融入自己的理解。
「場景化思維」是我學(xué)到的第一點(diǎn),我還記得郭常圳帶著我們學(xué)習(xí)喬布斯推出第一代 iPhone 時(shí)的演講,喬布斯非常會(huì)講故事,在用戶具體的場景中介紹自己的產(chǎn)品。好的產(chǎn)品經(jīng)理會(huì)將自己「代入」目標(biāo)用戶的使用場景中,解決用戶的主要痛點(diǎn)和問題。做為技術(shù)人員,我常常陷入產(chǎn)品邏輯完備的泥潭中,但是「場景化思維」使得我能夠重新跳出細(xì)節(jié),關(guān)注主要功能設(shè)計(jì)是否合理。
「關(guān)注數(shù)據(jù)」是我學(xué)到的第二點(diǎn),產(chǎn)品經(jīng)理在打磨細(xì)節(jié)方面,如果能夠關(guān)注產(chǎn)品數(shù)據(jù),那么就很容易找到改進(jìn)的方向,并且在后期驗(yàn)證自己的想法。關(guān)于這個(gè),詳細(xì)的請看:數(shù)據(jù)的秘密(上)- 為什么要關(guān)注數(shù)據(jù) 和 數(shù)據(jù)的秘密(下)- 如何分析數(shù)據(jù)。
我曾經(jīng)猶豫自己是否應(yīng)該學(xué)習(xí)寫產(chǎn)品稿,郭常圳說不用,他說你只需要多看產(chǎn)品經(jīng)理的產(chǎn)品稿,多思考和比較,慢慢就會(huì)有產(chǎn)品的感覺。我發(fā)現(xiàn)這一點(diǎn)還是管用的。以前用一個(gè)新的App,作為開發(fā)者,我會(huì)關(guān)注它的功能在技術(shù)上如何實(shí)現(xiàn),而我現(xiàn)在,不光會(huì)關(guān)注技術(shù)實(shí)現(xiàn),還會(huì)想它的產(chǎn)品設(shè)計(jì)思路。打開了這扇窗戶后,我就能在日常生活的每一天里,通過思考來提升自己的產(chǎn)品能力。
作為產(chǎn)品負(fù)責(zé)人,我主要的工作是參與產(chǎn)品稿的評審和美術(shù)稿的評審,同時(shí)會(huì)參與決定未來要做的功能,將其安排到產(chǎn)品工作中。另外,我也會(huì)關(guān)注產(chǎn)品的各項(xiàng)指標(biāo)數(shù)據(jù),保證重要的產(chǎn)品數(shù)據(jù)都是看過的。
我每周花在產(chǎn)品評審和美術(shù)評審大概是半天到一天,每周花在關(guān)注產(chǎn)品各項(xiàng)指標(biāo)數(shù)據(jù)上的時(shí)間大概是半天到一天。
我做得不好的地方
做為一個(gè)技術(shù)轉(zhuǎn)管理的新人,我覺得我的工作還是有挺多問題。
首先,我剛開始還是太迷戀技術(shù)了,有一些開發(fā)工作我仍然主動(dòng)參與。但是實(shí)踐之后發(fā)現(xiàn),因?yàn)槲业氖虑樘嗵s,使得我很難保證自己承擔(dān)的開發(fā)工作的進(jìn)度。所以我現(xiàn)在學(xué)會(huì)主動(dòng)把任務(wù)交給別人做,如果一件事情不是必須我才能做的,我就交給別人。所以現(xiàn)在技術(shù)上,我只參與 iOS 端的 Code Review 工作了。我將更多的精力,放在一些不得不由我做的溝通和項(xiàng)目推進(jìn)方面的工作上。
接著,我有很長一段時(shí)間沒能很好地安排好產(chǎn)品計(jì)劃和研發(fā)的進(jìn)度。好的產(chǎn)品計(jì)劃應(yīng)該要領(lǐng)先開發(fā)一個(gè)以上的迭代周期,這樣在技術(shù)開發(fā)當(dāng)前版本時(shí),下一個(gè)版本功能就在設(shè)計(jì)和評審當(dāng)中,使得大家的工作都不受影響。而小猿搜題的產(chǎn)品計(jì)劃有一陣一直沒能很舒服地領(lǐng)先技術(shù),這讓很多時(shí)候開發(fā)同事并不舒服。
解決的辦法是我們讓產(chǎn)品文檔的完成時(shí)間點(diǎn)也盡量精準(zhǔn),對于一個(gè)大的產(chǎn)品功能設(shè)計(jì),我們會(huì)定好初版(我們內(nèi)部叫做 1 版本)、詳細(xì)版(我們內(nèi)部叫 5 版本)、完善版(我們內(nèi)部叫 9 版本)的時(shí)間點(diǎn)。產(chǎn)品經(jīng)理需要努力在時(shí)間點(diǎn)內(nèi)保證產(chǎn)出,這樣其實(shí)反倒使得大家會(huì)關(guān)注產(chǎn)品設(shè)計(jì)的主要問題,在細(xì)節(jié)上不過分糾結(jié)。
最后,我在招聘上的成績也比較一般,沒有能夠?yàn)閳F(tuán)隊(duì)招來很多有經(jīng)驗(yàn)的人,所以小猿搜題現(xiàn)有團(tuán)隊(duì)還是新人居多。新人的好處是容易和團(tuán)隊(duì)文化保持一致,但是在經(jīng)驗(yàn)上,還是需要更多的鍛煉。
總結(jié)
小猿搜題從2014年 7 月 17 日立項(xiàng),到 10 月上線,再到元旦正式對外推廣,到現(xiàn)在在不到一年的推廣時(shí)間內(nèi),已經(jīng)積累了超過 5000 萬的用戶。而我,也隨著小猿搜題,從一個(gè)純技術(shù)的 iOS 程序員,成長成為它的產(chǎn)品技術(shù)負(fù)責(zé)人,雖然也犯了一些錯(cuò)誤,我感覺自己的進(jìn)步還是很快的。
我也希望我的故事能夠激勵(lì)其他的技術(shù)同行,能夠勇敢地接受新的挑戰(zhàn)。在快速變化的移動(dòng)互聯(lián)網(wǎng)時(shí)代,快速迭代演進(jìn)的不止有 App,也包括我們自己,愿大家都能活得精彩!