題記
在大公司,要做一件事情,會很慢——從POC、資源協調到具體實施都要按部就班,連組織個會議都要提前1、2天甚至更長時間預定好會議室,通知到干系人請他們安排好工作,留好時間。在這種環境里,我執拗地認為做事情可以更快一點,早一點出成果就領先別人一步,抱着這個念頭,我一直想去所謂的小公司去敏捷一把。然而真的到了小公司,卻發現團隊不是自己想象的那個團隊,這才發現自己非但快不起來,連能否做下去的能力都未必有。
9年測試與開發
我06年一畢業就開始做自動化測試開發,然后是業務功能測試、性能測試、容量測試、持續集成等等。后來就升做管理,因為我比較善於分層組織用人和授權,四五十人的團隊一樣輕松輪轉。因為團隊大,重復性工作就會很多,無論是管理上還是一線的工作,於是利用比較閑的契機偷空寫了個系統。在內網肆無忌憚地爬取(也有很多開放的接口)從基礎架構到業務需求、測試用例、缺陷和版本發布情況、線上缺陷等各方面的數據,用以透視分析和組織工作,來完善資源調配和工作管理策略。這樣一來我就更閑了,除了例行的日常管理和考核等工作,幾乎變成了這個系統的專職開發和運維……就這樣雜活干了9年。
如此慢慢地感覺到自己技術不夠用了,這個系統的設計不合理了,也換過框架、做過重構,但是總覺得差那么點意思。一個偶然的機會,聽到一個師兄在做一個智能運維產品的開發,就去打聽了一下。跟Q總簡單聊了一下,他覺得我是老司機,對公司整個流程和基礎架構很了解,而我對他畫的餅也很感興趣,跟我此前做的基於規則和數學模型做預測的事情很像,只不過我之前的做法離產品化差的太遠。於是我就放棄了我那已有50多人的團隊,轉崗加入了這個產品團隊,從2016年年初起,回歸一線重新開始了為期一年的技術名詞修煉之旅。
臨行前(只是樓上樓下之隔),我推薦了兩位分組經理候選人,把那個龐大的團隊一分為二,交給他們打理去了,所幸他們都通過了面試,成功接手。其實換個角度想想,在大公司,只要不是太蠢,有個3、5年的修煉,都能帶好團隊,當然,我們團隊沒有蠢人,說到這,不得不驚嘆於我們的人力招聘評估體系、能力和培訓體系。至於帶團隊,要做的事情基本一致,所不同的是如何在團隊內實現自己與眾不同的想法而已,這一點我自認做的還不錯——當然,你的想法也可以沒有任何與眾不同,只要保證團隊高效地完成任務,不負獎金即可。
測試轉開發,從架構做起?
來到新團隊,因為回到一線做事,感覺工作單純多了,所打交道基本全都是為了解決設備資源和技術問題,再也不像帶團隊的時候如何爭爭爭、證證證的,還是比較開心的,所做之事簡單總結了一下:
-
剛到的時候就受命琢磨產品的整體技術架構問題,估算了下將來可能面對的數據容量,發現數據總線和消息服務是肯定要換的。接着就協商着把ActiveMQ換成了kafka,容量和業務擴展靈活度都能得到提高;因為同步效率問題,在資深大碼神的強烈吐槽之下,把最初使用ehcache的方案換成了使用redis的;比對了dbcp、c3p0等這一堆勞什子之后,把druid換成了hikariCP;把數據總線拆出一個前置的分布式計算模塊,置於各個網域出口,用作預處理agent發送的指標數據。總之,這段時間讀了大量的文檔和wiki,的確了解了不少技術棧的名詞。最后簡單benchmark了一把,改造之后的后台架構能扛得住我們最初定的每天50G(deflate2壓縮)的純文本指標數據的目標,HBase每天歸檔結果數據近1T,並且實時指標數據和計算的結果數據從產生到前端展示延遲不超過90秒。
-
完成所有應用模塊的HA和Cluster搭建,借機好好學習了一把Keepalived和HAProxy。最開始是配合mariadb的Gelara Cluster,加上HAProxy。然后是最初使用的ActiveMQ,我去查了一堆資料用HAProxy和Keepalived做了一套兼顧HA和Cluster的方案,還寫了很詳盡的文檔,不過后來換成kafka的時候我一點都不覺得可惜。最后是部署在tomcat容器上的應用,數據流量較小的查詢展示模塊、agent管理模塊等,都上的是F5;而數據流量很大的數據總線模塊、總線前置模塊,還是使用HAProxy和Keepalived——F5是共用資源,不敢造次。
-
基礎架構資源使用規划和容量計算,虛擬機管理,平安雲上的虛擬機當時可謂是資源充足,在不同的網域都留下過我罪惡的黑手。雖然虛擬機夠用,不過我們也遭遇過被平安雲項目運維坑的事情,好幾次activeMQ堵塞查到最后都是因為他們在限IOPS,好幾次數據展示延遲也是因為他們在做網卡流量控制。經過幾次斗爭之后,終於把我們的機器都加到限制的例外名單了,當然我們也出具了我們給出的不會無限消耗資源的計算證明和保證。在這個過程中,我幾乎快要學會了手動Linux運維。
-
作為面試官招進來兩個資深開發工程師,其中有一個點評挖來的,整天跟我撕逼,他嫌棄我我基礎弱,連commons-utils里面的API不會用,只會自己在那里傻寫if (null == xx || xx.isEmpty() ),我看不上他“先做了以后再優化”的態度和一個勁的“我寫的?不可能有問題!”,你跟我一個測試汪出身的說這話?寫到這里我自己都想笑,畫面感很強有木有?不過總的來說這倆個人能力還是得到團隊的認可的。
大半年過后,項目和團隊都步入正軌,工作開展變得有條不紊起來。慢慢地大家開始想着把以前刨的坑都要埋了。搭自己的maven倉庫、做自動化測試(這個團隊沒有專職測試)、持續交付、將SVN換成gitlab、引入springcloud做服務治理等等。這個時候,我需要從IA(infrastructure architecture)向AA(application architecture)轉變,這個挑戰有點大,因為我當時還不具備這個能力。我現在極其后悔自己當時沒有去嘗試,因為從測試轉做IA也不是一帆風順,我照樣扛了過去,而且在這里,原本我可以轉型到devops的路上,可是我也沒有去嘗試。
除了產品本身的前途之外,這個團隊已經越來越像一個小的精英團隊了,我一直希望能夠在這樣的團隊里面工作,主要是能學到的東西很多。可是實際情況是,壓力略大,我也是個悲觀的人,覺得學習能力已經跟不上年輕人了。加上那段時間我們家小盆友剛出生,每夜里喂奶都是我的活,而且這小子事兒還賊多,常跑醫院。作為一個盧瑟,我總結了一下,是我自己虛了,萌生了退意,其實再咬咬牙,也許就扛過去了。
平台落差
開篇提到的那一執念:想去小公司試一下——讓我在沒有理智的思考的情況下,覺得自己在這個團隊里面的作用是不是已經發揮的差不多了?覺得再不出去是不是以后再想出去就沒人要了?覺得是不是該做一個選擇的時候了?然后我就離開了工作9年半的公司,去了一個國資的證券公司,降薪。
面對國資企業諱莫如深的職級、職稱、職位體系和薪酬體系,我信息搜集的不夠全面。正當我准備掛着測試經理的頭銜去施展一番的時候,發現有幾個連基礎的技術都不懂、甚至連簡單的sql語句都寫不順溜的高級測試經理在那兒擺着。而且,都比較能說會道,很會堅持自己的觀點,掙扎了半年之后,我發現勢不可逆,決定離開。這半年,但從薪酬上來看,相對於之前的東家,我稅后虧損十幾萬,呵呵,此后我發誓終生不入國資系。
我一邊后悔自己當初的草率和功課不足,一面積極地尋求新的機會。因緣際會之下來到我現在的公司,一家民營小企業,創業團隊和主要的客戶都是來自中原地區。相比前一家券商而言,在這里我有一只十幾人的團隊,掛着部門經理的職銜,主管測試、配置管理和質量體系建設,看起來自由度還是很高的,因為畢竟是部門一把手。與以往的履歷不同,這次面試過程中被邀請(要求吧其實)來公司考察2天再做決定。我這兩天下來一看,感覺還行,只是工作模式大抵是小作坊模式,隨着團隊擴張可能會運轉不靈。所以我在接受offer之前就提供了一個初步的解決方案和建議書,可因為老板畢竟不是IT出身,其實我不確定她到底是否看懂了我要說的核心是什么。
早在2016年9月,我賣掉了之前的房子,返租一年,置換了一套差不多大小的中外環之間的房子,2017年9月9號,我搬入新買的房子,11號到新公司履職,離家很近。
新公司老干部比較多,新員工也很多,兩個核心的產品除了長相略丑之外,利潤還是能夠支撐公司的正常運作和發展的,籌划2018年啟動上市進程,聽起來感覺還是很值得期待的。公司的IT開發模式是典型的一環等一環,相當的瀑布,但是瀑布的規矩也會經常被破壞。來到這里之后我除了在謀划招聘得力的幫手之外,就是暗中觀察各種關系,聽到過無數水土不服而死的空降兵案例之后,我決定慢慢下手,搜集各種問題和相互沖突的觀念。
誠如開篇所言:真的到了小公司,卻發現團隊不是自己想象的那個團隊,這才發現自己非但快不起來,連能否做下去的能力都未必有。公司創立15年,在當今IT行業這個普遍的技術和治理水平來看,能維持15年的小作坊模式說明固有的觀念和文化是多么的根深蒂固。我深知要改變哪怕是一點點,都不是我一個人、幾句話能完成的。我一邊安排質量技術體系建設,一邊規划新的SEPG流程,將部門划分為質量技術組和產品測試組,准備通過對部屬的影響來推動整個開發過程的改善。可能你會問,為什么不直接轉型做敏捷?我覺得如果連做CMMI-3的能力都達不到,做敏捷可能會更糟糕,這直接體現在大家在不斷地破壞規則、信息不對稱、溝通不暢、推卸責任等。比如,到現在為止,產品需求全憑紙質單據簽字認可,開發周期大半的時間全都因為產品經理不懂產品如何運作在需求環節耽擱;開發沒有單測、沒有集成,也謝絕測試同事去開發本機環境提前測試;測試的同事不願意去testlink做版本和測試用例管理,數據全在excel通過線下手工搜集;上線之前沒有回歸測試;版本發布在任何工作時間都可以隨意進行;考核權重有1/3的加班時間,其余指標能夠量化的部分基本不面向結果而是面向“代碼行數”這種過程數據。
老板前幾天找我聊天,表示她當初對我的預期是在4個月之內見到我把這個團隊和這個開發效率能夠提升起來。好吧,姑且不說面試時是另一種說法,就當下的處境來看,我的確是無法做到的。反思一下,策略也許是錯了,溝通肯定是不夠的,說服並爭取逐個部門逐個領導的支持這件事上肯定是沒到位。至此,我當前的這份履歷在扉頁上就已經有所磨損,但是,只要我還是可以試試繼續往下推進,我就必須繼續努力。因為沒有努力過就不會知道自己會不會絕望,沒有絕望之前再次選擇倉促跳槽,無疑是又往自己的履歷上抹黑。我會再次絕望嗎?期待2018年的結果!
我的乒乓,我的組合技
作為一個直板乒乓球愛好者,我發球不錯、搓擺功夫湊合,推擋、橫打還行,正手攻球和弧圈甚至挑打也還行,看起技術還是比較全面的,理論知識也比一般野路子要豐富。然而比賽的時候輸球是大多數,在浦東的業余里面最多屬於B-、C+的水平,這個我B+甚至A-級的基本功可並不匹配。其實總結起來就是技術組合和套路修煉不夠導致技術發揮不出,實戰經驗不夠導致心理素質不行。
作為一個全流程方方面面都懂一點的測試汪,在當前這個工作里面為什么沒能達到老板的預期?我覺得情況有點類似,沒有能夠充分整合好資源來規划策略,調整好心態來應對沖突和變化。那么不妨勤奮一點?多看多練!多參與比賽交流!也許我該收起我那套“我不希望看到我的團隊加班”的清高理論了。要成事,先保證自己能夠站得住,而不是一上來就考慮部屬的情感,也許他們並不領情,只是覺得你是虛有其表,誇誇其談而已。
這里,畢竟,不是大廠,人們都很單純!
這兩年,我敗了,失敗在毀了一份看起來並不值錢但是比較干凈的履歷!
這兩年,我成了,成功於看到了自己真正的不足,不在技術,而在不夠堅韌!