假設一個公司發展有以下幾個階段:

  • 0 :創始階段;

  • 0.5 :有產品但無管理階段;

  • 1 :經過 1年的發展初步穩定的階段;

  • 1+ :穩步發展階段。

上一篇文章中,我們聊了公司在初創階段,CTO 需要做的事情,本篇將承接上篇,分析 0.5 到 1 的階段、1+ 的高速發展階段,CTO 需要做的事情。

0.5到1的階段

公司經過了初創階段,產品也已經上線執行。接下來產品需要高速、高質量迭代,作為技術管理者需要把各方面都規範起來。

管理需要標準化

 

建立專案管理流程:

  • 是否要使用一些專案任務管理工具,比如 Jira 或 Tower 等;

  • 是否要使用一些文件知識管理工具,比如 Confluence 等;

  • 選擇什麼樣的開發模式,是敏捷開發還是傳統瀑布開發;

  • 制定各種會議制度,比如固定的晨會、週會、總結會等;

  • 規劃分支使用的流程,程式碼稽核的流程;

  • 測試如何進行,選用什麼樣的 Bug 管理平臺,Bug 的分級等;

  • 和公司其他部門定期同步並討論專案總體計劃流程。

 

建立溝通匯報流程:

  • 規劃日常對內、對外 IM 溝通工具和郵件使用的規則;

  • 確定日常工作流程(評審、提測、釋出、上線);

  • 制定每一個團隊成員的日報或週報的模板。

 

績效管理:

績效管理如何來做,選擇 OKR 還是 KPI ?大家有太多討論和不同意見。在 TGO 鯤鵬會的小組活動中,我們組員也經常會針對這個話題討論,每一個公司都有不同的做法,這和公司層面的文化、背景、專案屬性、甚至是管理層的性格都有關係,無法完全照搬別人的做法。

我認為一個相對成熟的公司,適合公司的績效管理方式必不可少,需要不斷探索。一般而言,考核是用來激勵那些不太優秀的人,特別優秀的人才無論如何考核,他們永遠都是是衝在最前面的一批人。但是,任何公司都不可能做到 100% 的員工都有合夥人的心態和衝勁,也不可能 100% 的員工都是世界一流人才。所以,幫助所有員工建立清晰的目標並且進行回顧和考核非常重要,要讓所有人的目標都是清晰、具體且正確的。

技術需要標準化

 各個環境標準化:

  • 定義明確 Dev 、QA 、Staging 、Live 環境的作用、每個人的許可權,以及每一個環境的使用方式;

  • 建立一套統一的釋出系統來處理日常釋出。比如,可以封裝 Shell 指令碼或 Jenkins ,並且明確在線上釋出事中事後,包括:運維、開發、測試、產品等每一個應該負責的點。

 建立技術標準規範:

  • PRD 產品需求文件和 UI 標註的標準;

  • 開發標準,比如,可以在阿里的 Java 開發規範基礎上和大家一起討論,總結出符合自己公司需求的開發標準,並且通過程式碼規範外掛來約束;

  • 概要設計文件的標準,文件必須包含哪些點,什麼時候提交評審;

  • 概要設計時錶結構和服務定義的標準,各種中介軟體使用方式的標準和最佳實踐;

  • 自測標準,單元測試的要求,自測不完善測試打回的懲罰等;

  • CMDB 的建立、伺服器配置,作業系統基礎配置,程式安裝方式的運維標準化。隨著時間的推移可以總結出適合自己團隊標準或最佳實踐,所有的標準應該是所有團隊成員共同認可和遵循的,可以定期就這些標準進行回顧和討論。

 建立監控管理制度:

  • 搭建日誌、監控報警基礎設施。比如,可以使用 ELK 、Grafana 、InfluxDb 等來搭建;

  • 統一公司的日誌、打點框架,規範明確專案的日誌和打點標準;

  • 為各個業務建立監控面板和報警規則,明確報警處理標準;

  • 定義事故分級流程,覆盤方法以及追責方式;

  • 定義運維日常監控容量巡檢方式以及應急響應預案。

1+ 的高速發展階段

隨著業務規模的擴大,很可能有了多條產品線;隨著團隊規模的擴大,徹底扁平化的組織架構可能無法滿足需要;隨著訪問量的增大,對技術和架構的要求也越來越多。這種情況,不管是對技術的要求還是對管理的要求都更上一層樓,這個時候需要在標準的基礎上再做一些管理和組織結構的演進,站在更高的角度管理去思考。(這個時候做一些細枝末節的工作對於整體的意義就不大了)。

技術方面的昇華

隨著公司的發展,產品要麼形態豐富,各種產品和業務衍生出來,要麼產品形態不變,訪問量急劇增大。對於前者,管理方面很容易犯的一個錯誤就是簡單的進行業務線的拆分和招人、招人、招人,形成 N*20 個這樣的團隊,每一個團隊之間相對獨立,技術沒有沉澱。對於後者,很容易犯的錯誤是通過堆伺服器和堆運維來抵擋壓力的上升,導致技術架構老舊問題增多。這種粗曠風格的團隊擴張是不太健康的,更好的方法還是多折騰:

  1. 我的建議是通過進行技術和組織架構的調整,形成專才,形成縱向技術線,把通用技術提煉出來,讓整個公司都可以積累統一的、能夠向前發展的技術平臺;

  2. 強制通過自動化手段把人解放出來,人應該去做創造性的工作;

  3. 消除團隊安逸的狀態,讓團隊或業務線之間形成競爭,保持衝勁。

組織架構調整

隨著業務規模的擴大,團隊規模也在擴大,僅僅對業務線的技術團隊進行橫向拆分( X 維度拆分 )還不夠,還需要有專門的垂直團隊服務於橫向的業務團隊。通過建立架構、中介軟體、運維等垂直團隊服務於所有業務團隊,確保技術和架構的統一( Y 維度拆分 )。

如果團隊人數超過 20 不足 50 ,我們需要增加經理層來管理一線員工,變為三層架構,如果人數超過 50 不足 100 ,我們需要增加高階經理來管理經理,變為四層架構( Z 維度拆分 )。當然,可能還會形成一些虛擬的或實際的技術或專案管理委員會,對技術人員的發展、技術的標準化、公司層面的技術大任務進行定義和協調。

補充以下幾點:

  1. 隨著層級的增多,管理者對於一線員工的觸達會越來越難,可能導致執行效率降低。這個時候,對下屬主管的任用和管理非常重要。與管理一線員工相同的是,主管也需要績效考核和標準,不同的是,主管們承擔了管理職務,一線員工是由他們直接管理和影響的,此時對於主管的培養非常重要。不僅僅要讓他們使用 CTO 原先定的標準和套路來管理,更多的是讓主管明確意識到自己的管理職責,激發出他們自己的管理風格;

  2. 在確保主管被充分授權,並且有團隊管理自治性的同時,最好提供一個通道,讓一線員工有機會表現和表達自己的想法,讓高層管理者可以瞭解到任何一名員工的想法,保持公正透明;

  3. 在公司這個階段,可以和人事一起把人員的職級要求和薪資標準進行統一定義,要和績效考核結合起來,形成固定週期的職級調整方案,形成明確的上升通道。讓每一位成員意識到只要通過自己的努力,在公司內部同樣可以走的很遠;

  4. 業務團隊和平臺架構團隊的目標使命不同,會存在一些矛盾存在。作為 CTO 要做好引導,讓業務團隊認識到架構統一的重要性,讓架構團隊認識到業務團隊的壓力。也可以鼓勵團隊之間的人員換崗以及做一些技術團隊的培訓,讓架構團隊理解業務,讓業務團隊深挖技術。

建立文化

人畢竟是社會動物,是有感情的,如果公司所有的管理手段都是硬手段,員工很難從內心認可。我們可以和 HRBP 配合,打造有團隊特色的技術文化。比如,分享文化、開源文化、學習文化、鼓勵自動化的文化等。

我們可以建立技術團隊的微信公眾號,讓所有人一起來發文和運營。可以把自研的專案開源出去貢獻給社群,讓社群一起來完善,可以組織定期的公司內部或公司與公司之間的技術培訓或交流,組織一年一度的技術之星、產品之星評選等等。初期可以通過使用一定的獎勵激勵手段來傳播固定技術文化,形成文化後,每一位團隊成員會覺得工作不僅僅是完成個人的任務,而是在一個集體中成長,在團隊中生活,有歸屬感價值感。

建立價值觀

一般而言公司層面會提煉出 3 - 5 項重要的價值觀,技術團隊也可以在此基礎上細化、提煉技術方面的價值觀,並納入考核。

個人認為價值觀一方面可以給我們定一個大方向,比如,我們需要怎麼樣的人;另一方面又類似於心理暗示,潛移默化的影響每一位員工。慢慢地,員工會演變為符合公司價值觀的人(變得和公司有“夫妻相”),或者意識到無法適應價值觀而主動離職。比如,如果可以定義一專多能、主動承擔、勇於創新、言出必行作為技術團隊的價值觀,並且展開列出一些子項納入考核。即使員工的業務能力沒問題,但日常的表現不符合價值觀,那麼他只能是一個過客,無法和公司一起發展,這也是為什麼很多大公司如此強調價值觀的原因。

團隊規模小的時候,我們只要自己衝在前線就可以很好的管理團隊,在規模中等的時候我們可以利用一些標準和制度進行管理,在規模更大了以後,我們需要更高維度的文化價值觀等手段來感染到每一個員工,讓員工認同公司,這比約束命令式管理更有效。

處於這個階段的公司,CTO 不僅要做好對內的管理工作,還要抽出時間做一些對外的工作,來幫助公司做品牌宣傳,並且用技術爭取更好的資源,比如,定期和同行以及投資人交流,組織參與一些技術討論,跟進行業趨勢等。

最後,想聊聊技術如何服務於公司戰略?

就我個人而言,我覺得兩點很重要,一是堅持,二是應變,三是要思考。圍繞這幾點,我列了一些技術服務公司戰略的要點。

 產品技術部門最基礎的職責

作為產品技術團隊,最本職的工作還是持續高效輸出高質量、高可靠的產品,滿足公司的業務需要。並且在不斷提高可用性的同時,通過自動化、標準化提高效率,節省人力成本。在組織規模變大了以後,還能通過管理手段來保持團隊的高效。隨著業務和團隊規模擴大,做到這幾點並不容易,但這只是技術服務於公司戰略的基本要求。

 以技術創新把不可能變為可能

舉個例子,有一次,業務給我提了一個需求,因為受到底層外部介面的限制,這個需求無法實現。但是業務表示,為什麼別的公司可以實現,我們就不行。這時候,我才花時間去認真思考是否有一些突破的辦法,嘗試找到別人的實現方式,最後想到了可以繞開限制的方式,把這個專案實現了。我沒想到的是,專案上線後業務告知當時問錯了,其實別人也無法實現這個東西,因為只有我們實現了這個技術,所以很多人都願意來找我們合作。

很多時候,我會認為自己有十幾年的技術研發經驗,我對公司既有技術足夠理解,我以為我可以對一件事情是否可以實現很快下結論。其實這是不對的,在收到外部需求的時候,應該反過來思考,先假設這個需求是必須實現的,或者競品已經實現了的,在拒絕別人之前,給自己幾天時間,給團隊幾天時間來想一下怎麼去實現,如果你做到了別人做不到的,那麼你的技術就是核心競爭力。

 建立一支可以打快戰的鐵軍技術團隊

隨著公司技術的標準化和成熟,團隊應該 具有打快戰的能力,但是穩定的業務往往會讓老兵們進入溫水煮青蛙的狀態。作為技術管理者,應該用各種手段來激勵大家的鬥志(比如搞階段性的重構、黑客馬拉松比賽),保持團隊的活力。這樣,如果有新開闢的專案,可以在公司內部輕鬆找到並形成一支敢死隊來參與戰鬥,超高的執行力使得新業務可以儘快進行低成本試錯或搶佔市場,這也是技術產品團隊成熟於否的體現。

 根據戰略及時調整團隊架構和技術架構

不管是團隊架構還是技術架構應該有一定時間的先行,一般而言對於線性發展的專案,公司目前如果處於 A 量級的 PV ,就應該開始儲備十倍 A 量級 PV 的架構。根據業務的發展估算技術架構的挑戰,提前半年或者一年進行新一代架構方案的確立,確保技術不拖業務後腿。團隊架構也是同樣需要先定義骨架,再在每一個可能的職位上進行填坑招聘。技術管理者需要對公司的戰略敏感,根據公司的發展和戰略,提前做好這兩個架構調整的準備,並在需要的時候及時應用調整。

提煉核心技術,產品化產品,探索進行產品輸出的可能

如果做的是 2C 的產品,在一個領域做了多年或許就有能力把核心技術或產品提煉出一套 2B 或 SaaS 的產品來賣,如果成功,這就不僅僅是一個 2C 的產品,很可能又多出一套 2B 的產品甚至是一套 2C 的平臺。如果做的是 2B 的產品,或許就要思考一下,現在的產品是複製貼上的定製化產品還是完全配置的產品化產品,如果不是,怎麼讓他更通用地進行產品化,減少人力成本。產品化平臺化的過程是一個痛苦的抽象過程,對技術的要求更高,不過一旦實現就可以讓公司的使用者和規模得到爆發式發展,真正的技術改變戰略。

 關注前沿技術,思考前沿技術和公司業務的結合

目前正處在技術變革的一個關鍵階段,在未來 5 年內,垂直細分的 AI 將會變得成熟,區塊鏈也可能會出現大量的實際應用,技術管理者應該時刻關注這些技術,不斷思考可能的結合場景。這個世上不缺愛思考的人,但很多懂業務的人不懂技術,懂技術的人又不能理解業務痛點,只要積極關注前沿技術並和業務專家保持討論溝通,說不定哪天就會碰撞出具有革命性的產品。

- End -