有個朋友最近想跳槽,他對管理的興趣不大,而且認為自己的性格也不適合做管理,更想成為技術專家。基於這些考慮,他希望能進入知名大廠,如果面試不順利,去小而美公司也行。他的面試經驗不多,就向我諮詢了一下如何選擇公司的問題。
小公司必然缺錢缺人,技術團隊幾乎沒有美,99%都是草臺班子。有一些上萬職員的大公司,運營著很多業務線,每條線又有多個技術團隊,這些技術團隊的水平良莠不齊,也存在部分草臺班子。無論公司大小,造成技術團隊是草臺班子的根本原因都是一樣的:
- 不重視技術投入
公司就是一輛車,讓車跑起來的要素太多了,技術只相當於半個輪子。任何公司都是資源不足的,管理層總是把資源投在產出最高、最快的地方。在很多傳統企業裡面,技術只是輔助業務自動化運轉,不直接創造價值,自然不受到重視。
- 輕視研發質量
並不是線上沒重大BUG,研發質量就算高了,還要兼顧工程質量、研發效率、團隊可持續發展等方面。許多草臺班子只關注了BUG和研發效率(這個效率也是加班加出來),其他方面做得一塌糊塗。公司要想提高研發質量,首先要建設一個有技術範的管理隊伍;其次對管理人員進行360環評,所謂“兵熊熊一個,將熊熊一窩”。360環評的特點是,被評估者從自己、上司、下屬、同事獲得多個角度的反饋,從這些反饋知道自己的缺點、優點與發展需求。
在面試的時候如何判斷技術團隊是不是草臺班子呢?我的建議是在面試的尾聲,問面試官一個問題:你們團隊的技術文件質量怎麼樣?如果面試官說“還可以”,就繼續追問他“哪些方面還可以,哪些方面待改善?”。如果它是個草臺班子,技術文件一定沒做好,面試官會心虛。
什麼是草臺班子?它有三個共同特徵:
1.缺乏工作流程
一個需求從提出到上線要經歷至少七個流程:
- 1)需求評審:產品經理給出需求文件,邀請技術參與需求評審,目的是掃清需求疑點,排除技術上無法實現的需求。
- 2)技術評審:技術人員內部評審需求,確定詳細的技術方案。
- 3)開發排期:技術人員根據技術方案拆解任務,輸出開發排期文件,並告知產品和測試,以便他們協調測試時間。
- 4)開發階段:技術人員用程式碼實現需求,如果有需求疑點,繼續找產品核實;在開發尾聲,技術團隊內部評審該需求的程式碼。
- 5)測試用例評審:測試人員根據需求文件拆分測試用例,並給出測試工作排期,確定需求最終上線日期。
- 6)測試階段:測試人員根據測試用例分別在測試、預釋出、灰度、生產環境測試。
- 7)產品驗收:測試人員確認測試通過,邀請產品人員驗收。
很多團隊制定了研發流程,實際工作起來卻跳過一些流程或者執行不到位,原因有兩個:
- 1)產品經理希望早點上線:想需求早點上線,必然壓縮開發週期,有時甚至跳過測試階段,完全由開發人員自測。這種情況技術Leader要據理力爭為開發人員爭取更多的時間。
- 2)開發人員專業能力不足:以程式碼評審為例,不能讓專業能力差的人去做,因為他看什麼程式碼都覺得還行。日常工作中優先讓技術好的人做程式碼評審,並且進行內部技術分享,儘快提高每個人的專業能力。
2.技術文件匱乏
團隊工作中最容易忽視技術文件,因為編寫文件是個苦力活,而且短期內看不到效果。常用的技術文件包括下面六類:
- 1)新人入職指引文件
新人入職後需要配置開發環境、申請內部賬號等等。通過入職指引文件,新人不需要找老人打聽,顯著提高工作效率。
- 2)系統架構文件
系統架構文件幫助新人迅速瞭解技術棧、整體系統結構、微服務分類和呼叫情況。由於開發的不斷迭代,可能加入新的微服務或者調整儲存層,系統架構文件要及時更新。
- 3)團隊研發規範文件
研發規範文件至少要涵蓋:資料庫建庫建表規範、開發語言程式碼規範、應用工程結構規範。配合程式碼審查,嚴格執行研發規範。
- 4)日常技術方案文件
開發重要的、週期長的需求,一定要編寫技術方案文件。這類文件幫助開發人員理清思路,日後其他成員也更容易接手。技術方案文件的內容包括:業務流程圖、介面設計與改造、資料表設計、灰度方案、回滾方案、釋出計劃與工程配置。
- 5)重大故障覆盤文件
如果不進行故障覆盤,必然再次出現故障,交了學費卻沒有學到東西。故障覆盤文件包括:故障發生和持續的時間;解決故障的具體方案和時間段;故障造成的損失是什麼;發生故障的根本原因是什麼;如何避免故障再次出現。
- 6)通用元件優化文件
開發團隊通常積累一些常用工具庫,解決工程的基礎問題,比如物件屬性拷貝、IO處理、網路請求等等。這些庫的使用很廣泛,如果有些方法獲得優化,收益是很大的。改動了工具庫,要編寫相應的文件,將優化措施和風險寫清楚,避免給使用者留坑。
3.不做工作總結
許多技術團隊從來不做工作總結,每個月做幾個需求,每個季度聚個餐,年底再聚個餐,一年就結束了。長此以往,只低頭做事不抬頭看路,團隊成員的能力提升非常有限。
工作總結的執行方式是每個團隊成員根據自己的情況做PPT,然後講述給其他人聽,PPT的主要內容有三個:
- 1)創造的價值:這一階段的開發的需求創造了什麼價值,有沒有降本增效。
- 2)收穫和感想:這一階段的收穫是什麼,哪些能力得以提升,哪些缺點需要改正。
- 3)計劃和展望:除了產品提出的需求,下一步的工作計劃是什麼,哪些專案可以優化,哪些提升效率的內部工具可以開發。