當我在做技術管理時我在做什么 - 5. 物 - 技術管理

上一節:4. 事 - 項目管理

物 - 技術管理

核心思想: 喜新厭舊

  • 喜新(?Upgrade):升級技術棧
  • 厭舊(Migrate):償還技術債務

喜新(Upgrade):升級技術棧

從事信息技術的都知道摩爾定律,然而這個定律不止作用在芯片更新換代上,在編程領域也是可適用的,幾乎每年都有一些新編程語言、技術框架、系統架構的出現,其中一些有重大突破性的還能引起熱潮。對于技術團隊,其能掌握的技術棧就是其戰斗力,而今年掌握的很有可能第二年就變為過時,因此一個有活力的技術團隊是需要不斷吸收外界新鮮有活力的技術點,吸納融合入團隊技術棧,轉化為團隊的戰斗力。

然而新技術會不斷提出、舊技術會迅速過時,我們既不能被新技術牽著鼻子走又不能過于落伍。因此在選定技術棧時需要具備有前瞻性,不能被新熱的技術吸引分散精力,也又不能把團隊綁定到一些沒有生命力的技術上,這不是簡單的選擇題,需要經過探索、調研、實踐到最后掌握化為生產力。

厭舊(Migrate):償還技術債務

在項目開發過程中,有時會根據當時的人、財、物及知識經驗限制等,對技術框架、架構選型做一些當時認為“最適合”的設計或選擇,但隨著時間推移,需求變更、經驗提升、新技術提出等,回過頭來會發現當時的“最佳實踐”已經不適合了,有的嚴重更會成為推進項目的負擔,這種情況我們稱之為“技術債務(technical debt)”。

欠債要還,沒有反思不會進步,因此要給團隊“還債”的時間,團隊才有進步。但這點在外包開發團隊中其實是很難徹底實踐,因為需要跟客戶解釋什么是“重構”,為什么要花時間去做一些沒有明顯輸出的工作;又得在盡量不影響工期的情況下,定下更“正確”的架構,這也很考驗架構能力。

所幸我們團隊是以Ruby/Rails框架為核心技術棧,Rails框架本身就是fullstack且推崇最佳實踐的框架,每年都有大版本升級,每次升級都會引入對提升開發效率、安全、代碼質量的理念和實踐。因此我們選擇了Rails,就相當于在底層框架中有一支專業的團隊不斷的在維護升級,這也是為什么國內外很多創業團隊喜歡選擇Rails作為開發框架的原因,可以讓產品開發者更多去關注業務實現,而不用太過操心底層框架的維護。
更重要的是,Ruby/Rails不止提供給我們快樂編程的體驗,還指導了我們做事情的方式方法、看問題的角度:The Rails Doctrine - Rails 信條

另外遇到一些本身就是做技術開發的客戶時,就會比較好溝通能得到認可,但這種優質客戶是隨機的、可遇不可求,更多情況是我們開發團隊自己要提高自己的迭代能力,在每次階段會議、項目總結時進行技術積累,把經驗知識應用到新的項目上。

上面說了那么多理論,下面說下怎么做。

具體做法

作為公司技術負責人,我進行技術管理主要看以下6個方面:

  • 技術調研 - 探索新技術、調研工作上需要用的服務等,以保持技術團隊的先進性
  • 技術實踐 - 有實踐過的技術才敢引入團隊中,不要做拍腦袋決策
  • 技術培訓 - 得到認可的技術要推廣和普及給其他成員,提升團隊整體戰斗力
  • 技術復用 - 提取出可復用的技術點,進一步提高團隊生產力
  • 規范化 - 技術團隊應保持一致行事風格,以降低溝通、代碼維護、工具使用的成本
  • 自動化 - 解放生產力,讓機器去做重復工作,人力去做突破性工作

具體實踐總結

以下是具體實踐過的一些調研報告(report)、培訓講稿(ppt)、規范文檔(doc)、知識庫(wiki)、內部開源項目(project)以及公開博客文章(blog post),涉及的內容其實很多我這里只列出一些比較有代表性的、在團隊內實踐分享過的內容:

  • 技術調研
    • report:[angularjs vs reactjs]
    • report:[2016 Rails popular app servers]
    • report:[chrome extension開發調研]
    • report:[Crash Reporting Service]
    • report:[React-Native Hot Update Services Research Report]
    • report:[流行云主機調研報告]
    • report:[國內外流行字體CDN調研]
    • report:[QingCloud 調研]
    • doc:[Beansmile 技術調研報告規范]
  • 技術實踐
    • project:[jpush-ionic-demo]
    • project:[pushwoosh-example]
    • project:[beansmileteam/react-components]
  • 技術培訓
    • ppt:[how to do model design]
    • ppt:[toolbox-for-optimizing-rails-project]
    • ppt:[rails項目中性能調優要注意什么]
    • ppt:[rails-debug-tips 2016]
    • ppt:[如何寫一份壓力測試報告] (如 「圖5-1」)
    • ppt:[如何用rails開發一個任務管理的網站和移動app]
  • 技術復用
    • project:[bean-hub]
    • project:[beansmile-quickstart]
    • project:[beansmile-rails-composer]
    • project:[beansmile-react-boilerplate]
  • 規范化
    • doc:[Beansmile styleguide(Beansmile代碼規范指南)](如「圖5-2」)
    • wiki:[Beansmile coding standard]
    • wiki:[Code Review Tips] (如「圖3-8」,「圖3-9」)
    • wiki:[Rules for committing]
    • wiki:[trello + git開發流程規范]
    • wiki:[how to write a rake task]
    • doc:[Tech Stack Example]
    • doc:[API design example]
  • 自動化
    • 自動化測試
      • blog post:[RSpec 使用一周小結(上篇)]
      • blog post:[RSpec 使用一周小結(下篇)——使用 FactoryGirl 準備測試數據]
      • blog post:[rails集成測試學習總結]
      • blog post:[rspec集成測試的總結]
      • blog post:[簡介如何測試Rails應用]
      • blog post:[壓力測試總結]
    • 自動化部署
      • wiki:[Deploy Project to Staging Using Capistrano on Ubuntu]
    • DevOps - 持續集成
      • wiki:[Setup GitLab CI]
      • wiki:[Setup GitLab CI Runner]
    • ChatOps - Slack+Lita

? 「圖5-1」如何寫一份壓力測試報告

? 「圖5-2」Beansmile代碼規范指南

重點說說自動化

自動化技術在技術團中對效率提升很重要,在前面的“團隊管理 - 開發自動化” 這節已經提到了:

我提倡善用工具最大程度做到自動化,這種思維是貫穿整個開發流程各個環節的。

如最普通的Terminal(終端shell),推薦使用帶交互的shell(如zsh/Fishshell)來輔助cli的操作,鼓勵善用alias來簡化重復的使用命令;

代碼開發時鼓勵使用支持自動完成的IDE、編輯器(如Sublime Text),鼓勵善用代碼snippet來減少重復編碼的操作;

代碼測試使用自動化測試(可配合guard或者livereload達到保存時自動跑相關測試);

代碼提交使用自動化命令(gitlab-send-merge-request of git-cmd-helpers),一步完成代碼提交并發Merge request;

項目部署使用自動化部署工具(如Chef、Capistrano),做到一鍵部署;

使用CI(GitlabCI)進行自動化測試、自動構建、構建結果通知、自動部署、自動打包上傳app package,達到DevOps的自動化;

服務使用健康監控(如Monit,God),自動監測服務健康并自動重啟服務;

一句話就是盡量把重復的工作丟給機器去做,人力應該專注在機器解決不了的地方。

如「圖5-3」就是我們團隊日常開發中,從本地終端使用一行代碼發起MR(MergeRequest),code rewivew通過合并MR,觸發CI自動進行構建、測試、部署到通知Slack的過程

? 「圖5-3」auto CI/CD

另外我們開發的Chrome Extension項目,也做到了的DevOps貫通、自動化發布,流程如下:

  1. 開發在本地執行執行構建命令:gulp release --bumpversion,自動更新 manifest.json中的版本號、自動做git commit、同時自動以版本號創建git tag
  2. 往Gitlab發起MR,合并到develop分支后,CI會自動加上--env staging為參數,應用上針對staging的配置,進行構建生成zip文件
  3. 把develop往master合并后,CI會自動加上--env production為參數,應用上針對production的配置,進行構建生成zip文件
  4. 在CI上構建生成zip文件時,會自動加上一些stamp(包括extension version,git revision, env,datestamp),如“Trellohub-0.2.2[staging]@2016-12-06^0b89f89”
  5. zip文件生成完畢后,CI自動把zip文件上傳到Trello board對應環境的card中;發布為staging的,放入packages-for-staging card以便可以給QE進行QA;發布為production的,放入packages-for-production card以便給PM上架發布到Chrome Web Store

整個流程中只有第1、2步是需要人工參與(將來可優化成一步),其他步驟已全部通過CI實現自動化。

對于ios/android app構建發布,我也準備使用Appium做集成測試,使用Fastlane做自動化構建,配合Gitlab CI打通DevOps自動化。

自動化有助減少人工參與,提高效率的同時減少誤操作可能,技術團隊應大力推行。

小結

今年最大的變化莫過于前端圈的火熱和容器架構的盛行,層出不窮的概念、輔助的工具,新技術還沒來得及掌握轉眼已經變為淘汰,但這也意味著對技術的細分越來越專業,同時也意味IT項目的工程化越來越專業。這是挑戰也是機遇,項目越復雜、質量要求越高,對個人的要求也就越高,也意味著團隊作戰的作用越重要,這也正是PaaS/SaaS這類以打包服務為賣點的平臺也更有機會。


下一節:6. 文 - 文化建設
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容