思考總結:互聯網的技術團隊應該如何建設
本文是我在2012年開始從企業信息部門出來負責去做互聯網業務時,作為當時的技術負責人對于互聯網技術團隊的建設的一些思考。從一個領域跳到另外一個領域,如何做好角色轉換,如何在新的領域能夠入鄉隨俗,順應規律,我們需要思考兩個領域的共性和差異,以便能夠從固有的思維里跳出來不受羈絆。
回看七年前寫的這篇文章,我很慶幸自己很好的實現角色的轉換,在互聯網應用開發領域建立了適合自己團隊的技術體系。希望今年在新的崗位上,也能快速的進入狀態,實現新的突破!
本文雖然是七年前舊文,但很多思路依然指導著我現在的工作,當然也有些想法過去陳舊,在本文中我也增加了注解來補充和解釋自己的觀點。
談談互聯網產品開發的特點
互聯網的產品大都是面向海量用戶的服務,且用戶分布區域廣泛,其教育水平、習慣也大多不同,具有高度不確定性,我們必須非常關注用戶的行為和反饋。
因而,在互聯網產品服務的整個用戶研究,需求分析、產品研發及交付服務的過程中,都采用探索式、適應性的研發理念進行產品的研發。通常,會把整個產品研發周期劃分為若干個迭代,采用迭代式的演進過程,不斷的去交付新的產品特性,并通過觀察用戶的行為和反饋獲取,進而隨時調整產品的思路和方向。一切以用戶價值為核心是互聯網產品最核心的特點,而以價值驅動的敏捷開發方法非常符合這一特點。
敏捷項目管理實踐,通過小步快跑,快速迭代、增量交付用戶價值,不斷獲取用戶反饋,持續、快速的調整產品,驗證并適合用戶價值。正是通過這些實踐活動,我們以迭代的、增量的交付用戶價值,最大限度的保證產品朝著符合用戶實際需求方向發展。
談談技術團隊
基于互聯網業務的敏捷團隊,大部分大型的互聯網公司都偏向以下三種文化或者原則:
(1)自組織文化
如google、facebook等互聯網企業,他們很少甚至沒有特定的項目流程,通常怎么敏捷怎么做,具有濃厚的工程師驅動文化。敏捷團隊的自組織特性弱化了團隊技術領導這個角色,強調自我管理和自我驅動,對于每個人的能力和素質要求更高,但是會讓我們做的更高效、更敏捷,可以走的更穩、更遠。
(2)追求一體化
一體化團隊作為敏捷開發方法中最具精益思想基因的實踐,是指每個項目團隊包括分析,開發,測試等角色,使團隊滿足一個需求從設計,開發到測試各個階段順利完成,達到符合質量標準并滿足需求的軟件。每個一體化團隊一般都依附于某個產品,每個角色都為產品的發展貢獻著自己的智慧。
(3)追求全功能
這里所指的全功能是希望項目團隊能打破工程師角色之間的邊界,如研發、測試和前端工程師的界線,消除開發、測試流程中一些潛在浪費,提高效率。在項目團隊內部通過角色互換,不限角色的結對工作,加強不同角色,不同模塊間的知識傳遞,打破技術壁壘,幫助員工從不同視角理解項目,鍛煉技能,進而增加團隊均衡生產的能力。
為什么要提倡打破邊界?
項目整體效率依賴于項目過程中各環節的工作效率,而整體效率的優化往往依賴于均衡生產,即消除生產的波峰(過度生產)和波谷(生產不足),只有局部效率的增加無法直接轉換為整體效率的增加(就象桶能裝多少水,決定于最短的那塊板)。
整體效率的優化要求IT團隊消除技能壁壘,培養多面手,根據計劃的的變動,彈性地調整任務,達到各角色和流程之間的平衡。(對小團隊尤其重要,這也是風險管理所需要的。大團隊每個角色和崗位都會設置若干人,通過人數的優勢達到了均衡生產,但對于小團隊,某個角色可能只有一個人力,如果這個人工作受到影響,整個團隊的鏈條都要受到很大的影響,打破角色的界限,最大限度的降低了這些風險。)
技術團隊的建設首先要從兩個方面入手:一個是專業化分工,二是梯隊作戰模型。追求全功能或者均衡生產,并不是說每個人不分主次的全面發展,而是在保證一定的專業分工、深入專研的基礎上,在技能上要有適當的廣度。比如在我們團隊,按照技術領域可以做以下組織模型:
目前團隊成員還比較少,如果每個人都均衡發展,對于技術體系就不會深入;但是如果都劃定清晰的方向,只走專業化路線,意味著每個方向只有一兩個人,項目開展就很難調動人力,這也是不可能的。所以每個方向固定第一梯隊的人員,在該方向上能夠專業化發展,同時每個方向的第一梯隊的人員又將是其他方向的第二梯隊,保證人力資源能夠均衡的被調配,滿足各種項目的開展。
同樣在崗位上,我們依然是按照這個思路來進行,每個人都應具備“架構設計”、“程序開發”、“質量測試”的部分能力,打破角色之間的界限。這對每個人的整體素質要求是非常高的。
7年前,我所帶領的團隊規模較小,成員不超過10個人,在這樣的規模下,我優先打造全功能團隊,每個人幾乎都是全棧的,能夠兩三個人一個小組快速敏捷,同時相互之間可以快速補位。但是今天,我所帶領的團隊是上百人的研發團隊,研發的產品或平臺也比之前更加復雜,所以此時我更強調的是專業化的分工,前后端的分離階段不同,規模不同,我們的組織方式不同,切記慣性思維。
除了專業化分工之外,我們還需要建立梯隊模型,將人力資源和時間分配的更加均衡。如下圖所示:
這是一個漏斗模型,在人力和時間分配方面,自上而下優先級逐級遞減。項目開發直接面對著需求,它的核心是“快”,要有快速響應需求的能力,以最快的進度完成產品的增量交付。
為了更快的響應,在架構設計、程序開發方面遵循“適可而止”的原則,不要過度設計,在可容忍的范圍內可以適當降低程序的質量。
如果僅僅只做這些,我們的產品和系統是早晚都會出現問題,所以我們還需要下一個環節:產品優化。這個環節的核心是“精”,精益求精,將以前的瑕疵、隱患去除掉,考慮到更久的將來,不斷地調整我們的架構,不斷優化我們的程序,整個改進的進程和系統的發展進程相呼應,保證系統的平滑發展。
僅僅這些就夠了嗎?顯然不夠!項目開發如何快?產品優化如何精?源于我們深厚的積累,研發的重要性就是體現在厚積薄發,全面提升整個團隊的技術厚度,提高開發的效率。我們團隊有自己的框架和平臺,大大的加快了我們項目開發的速度。
通過這個漏斗模型,我們將人力和時間按照這個層次結構,進行均勻的分配,保證我們的計劃進度的執行非常平滑,沒有過分的緊張,也沒有過度的松懈。將以往我們的開發如過山車般的進程變成在一條平路上勻速前行。
思考:如何打造一個優秀的研發體系?
在研發體系的建設上,7年前的自己和現在的自己如出一轍,是不忘初心還是不思進取,等年底看效果吧。o(* ̄︶ ̄*)o”
談談CMMI
公司最近在搞CMMI3,過程的持續改進是我們一直都需要去做的,引入CMMI,可以幫我們更好的進行過程的改進。我們的團隊涉足企業信息化,軟件項目和互聯網項目,其實每件事物都有它自己特定的環境,都有自己繁衍的土壤,我們在這個過程中一定要有區別的對待,真正的遵循事物發展的規律,否則好心不一定能做好事。
各大軟件公司搞CMMI 基本都是招標用的,這是中標的一個有力的砝碼,更適合TO B的公司。而互聯網公司,他們根本的生存法則不是依賴外包項目,產品銷售進行的,而是針對終端用戶推出的服務產品,提供非常好的使用體驗,獲得用戶的認可,從而獲得公司的發展。所以這就是為什么做互聯網的企業很少去評CMMI,很多一流的互聯網公司的產品研發過程甚至都達不到CMMI的要求。
網上對于這方面的討論也特別多,但是我們既然要做CMMI,是因為我們還有軟件開發的業務范圍,我們也真正的想通過CMMI提升整個團隊的研發水平,改進我們的過程。但是我也真心的希望CMMI在進行的過程中,一定是能深入到不同的項目團隊,探究每個項目和業務方向的特點,找出適合每個團隊發展的業務流程和管理模式,而不要凡事一刀切,一個標準,一個模式,或者更可怕的是將以往實施的案例不加考量的就轉移到我們身上,反過來成為我們前進的阻力。
談談技術
作為技術團隊的負責人,我一直在思考我們需要什么樣的技術,特別像我們整個團隊和領導都具有企業應用開發的背景,如何適應互聯網應用開發的需要,如何要轉變觀念,用合適的技術解決特定領域的問題。
在談具體技術之前,我想還是和我們以前一直從事的企業應用開發做一個比較,這樣我們能更加直觀的知道我們需要做哪些改變,哪些才是我們未來的技術方向。
根據這個表格,我們非常明顯的看到企業應用和互聯網應用的巨大不同,應用的不同決定了技術的差異,企業應用要求系統的穩定性、程序的復用性、數據操作的嚴謹性、業務的集成性,而互聯網應用要求高并發、高擴展、高可用性。
對于我們團隊,我們的業務主要在互聯網領域開展,但是我們的管理又屬于企業應用的范疇,我們的開發領域基本囊括了企業應用和互聯網應用。所以對于技術團隊的要求是非常非常高的,我們不僅僅根據不同的領域進行專業化劃分,我們更需要學習更多更實用的技術解決各個領域的問題。
談談架構設計
我們張口閉口的談架構,但是何為架構,可能誰也說不清楚,因為大家對架構的理解不同。從字面的意思來講,架構就是確定一個事物的骨架和結構,從整體上勾勒出事物的意識形態。架構又分為很多種,管理企業需要進行組織架構。
就IT而言,實施系統需要系統架構和業務架構,開發軟件需要軟件架構,還有信息架構、基礎架構、數據庫架構等等。我們在討論架構時,總是意見分歧很大,是因為我們并沒有為“架構”設立邊界,不同的人對架構的定義是不一樣的。下面我談的架構主要集中在系統架構和軟件架構。
我對架構和架構師的一些認識和觀點:
- 軟件架構設計需要以長遠的眼光以宏觀視角從整體出發,深入分析外部環境、競爭對手與內部資源,明晰各方面的關注點,并平衡他們之間的利益,使大家可以明確目標,達成共識,解決主要矛盾。
- 架構師一定要有全局意識,不能過多的糾纏于細節。架構可以不過多關注功能,但必須考慮系統運行的場景和所處的領域,明晰關鍵點。
- 架構是一種平衡的藝術,最好的架構不是最完美的架構而是最適合未來一段時間的架構,架構要考慮到未來發展和當前資源的平衡,將性價比放在第一位考慮。
- 架構的確不容易改變,一個易變的架構不是好的架構,但是一個不能改變的架構也不是好的架構。架構的可變性也應該是架構設計的一部分。所以架構師要致力于設計一個可容易擴展的架構,在這方面如果我們經常拿蓋房子作為比較是不合理的,軟件架構的可伸縮性本身就是區別于傳統行業架構設計的魅力所在。
- 架構師不僅僅有深厚的專業知識和技能,架構師必須具備必要的廣度,特別是當前一個信息爆炸的時代,我們所遇到的各種情形都在當前的信息池中找到相應的解決方法和案例。架構師一定要掌握更多的信息,對信息進行系統的加工整理,在架構工作中首要想的是如何使用現有的解決方案,而不是閉門造車,不開放的醉心專研,重復發明輪子?,F在有這么個說法,“掌握信息比掌握知識重要”,不是沒有道理。
談談運維
單談運維他是一個很泛的概念,有人認為很高深,有人可能沒啥概念。其實運維是IT管理中一個很重要的環節,我們生產的系統如果沒有運維的支持,它便存在著巨大的風險。我們一直在談企業應用和互聯網應用的區別,其實兩者的區別也決定了這兩個領域的運維也存在著很大的區別。
傳統企業內網運維關注點是在安全、權限管理等重點,以及舊IT資產利用率,如何利用好現有的IT資產是他們目前迫切需要解決的問題。傳統的企業內網,使用大量的小型機(IBM Power小型機、HP小型機、Sun小型機等)、高端網絡和存儲設備(Cisco、EMC、日立等),使用大量的商業數據庫、ERP和中間件技術(IBM DB2、Oracle、SAP等)。
企業的核心業務運行于這些設備和軟件之上,業務年限長、歷史遺留問題多,數據安全、業務連續性等是這些企業的生命線,往往通過購買廠商和集成商的服務來保證其IT業務的穩定性。對于互聯網運維,如何快速有效地部署,如何保證可利用率,如何處理大并發訪問等是他們的頭等要事。
現代的互聯網企業,大量使用PC服務器、普通硬盤盤陣和集群、先進的SSD技術,大量使用Linux、MySQL等開源軟件。業務模式單一,軟件技術、硬件設備更替迅速。性能優化、部署靈活、提升IT硬件利用率是他們的工作重點,業務領先的互聯網企業背后都有一個強大的IT運維技術團隊。
運維是一件極其繁瑣,極其復雜的管理工作,這就要求運維工程師具有很廣博的知識體系,不僅僅熟悉網絡、硬件,還要了解開發,了解各個系統使用的技術和軟件,通過大量的運維數據可以有效地指導架構和系統的優化,運維工程師一個典型的復合型的人才。
運維工程師的崗位職責:
- 負責機房業務服務器的配置、維護、監控、調優、故障排除等;
- 大用戶量下高性能服務器系統部署方案的制定及實施;
- 保障服務器與數據庫安全,檢查并消除安全漏洞;
- 數據監控、應急響應、故障排除、編寫數據分析報告等。
就像我在談架構時認為架構需要關注運維,指導開發一樣,我還認為運維是關注開發、指導架構,一個好的架構師需要經過運維的過程,他才能深刻的預判到一個系統在未來的演變,以便今天可以實時可以擴展的架構。一個具備較高開發水平的運維工程師是向架構師進階的最好路線。
7年前就開始重視運維,但是限于資源和應用規模,運維這部分一直沒有做好。今年其實也非??粗剡\維,但是依然限于資源和規模,還是把幾乎所有的資源投入到研發中。但是未來隨著產品規模越來越大,打造專業的運維團隊依然是一個目標!
談談云
當前云是一個很熱的話題,所有的軟件服務都盡可能的和“云”搭上邊,但是具體什么是“云”,相比很多人都“云里霧里”的,不知所以。
“云計算”的概念應該是谷歌在5年前提出來,并得到快速的發展?!霸啤钡恼Q生有其發展的必然性,而谷歌、亞馬遜這樣的互聯網巨頭是催發它的催化劑。
這些互聯網公司的核心的商業模式就是利用提供互聯網相關的服務,從而帶來巨額的營收,他們必然希望越來越多的人和企業接受互聯網服務的模式,讓一切服務都能通過互聯網替代傳統的方式,所以宣揚“云”,也是為了更加優化自己的商業模式。
其次,這些巨頭企業經過這么多年的發展,他們在服務器,數據中心,分布式計算方面建立起成熟的有效的解決方案,僅僅是為了支撐自身的服務,資源勢必不能很好的利用,推行云計算,將自己的基礎設施和平臺以服務的方式出租出去,將閑置的資源加以更加合理的利用,這也是推行“云”的原因。
“利”字當頭,任何一個事物的發展怎能少了一個“利”。當然 “云”的發展給我們的信息生活帶來了翻天覆地的變化,推動著整個信息產業的變革。
- “云”讓基礎設施的建設更加集中,互聯網服務更加的規?;Y源的分配更加的合理,避免了巨大的浪費。
- “云’讓我們的觀念發生了轉變,讓我們更加接受互聯網服務模式,為人類的生活提供了更大的便利。
- “云”的誕生更加優化了互聯網的服務模式,提升了互聯網服務的盈利能力。
“云”其實就是“服務”,一切傳統的信息處理的手段都通過服務的方式進行交付。而在服務上,又分為幾個層次:IaaS(基礎設施既是服務),PaaS(平臺既是服務),SaaS(軟件既是服務)。
而在IaaS和PaaS層面上,一般由大型的廠商承擔著,比如亞馬遜、微軟、谷歌等等,他們擁有天生的資源來做這些底層的,具有規?;幕A設施建設。
而在中國,這些一般由政府驅動,由大型廠商來承接。中小型的公司只能在SaaS上,提供更加細分、更加個性化的軟件服務,才是生存的王道。
我們張口閉口談“云”,我們是“云筆記”,“云相冊”,如果服務不具備規模化效益,沒有將服務轉化為盈利的能力,這個“云”只能算是一個普通的互聯網服務,和個人博客和個人相冊有什么區別。
所以我們要做“云服務”,我們需要在基礎設施、大數據計算方面有一定的掌握能力,這些不需要我們去創造,而是能很好的利用,將“云”相關的技術(虛擬化,mapreduce分布式計算,海量數據存儲、負載集群等)很好的運用起來,這是支撐云的基礎。在這個基礎上,一定要做細分的“云”,有特點的“云”,提供用戶最專業的個性化服務和解決方案,服務產生價值。
“7年前,云也就剛剛興起,但今天我們已經離不開它了,云讓我們更加的單純,把精力完全聚焦于自己的核心業務。我的團隊也做了幾款云的產品,但只能是云的概念,還不具備云的規模,希望我們能把規模盡快做出來?!?/p>
談談移動應用
上面談了“云”,有“云”必然有“端”,“云”是服務的提供,“端”是服務的消費。目前最重要的兩個端是PC端和移動終端,未來物聯網建立,所有事物都儼然是“端”,在PC端,依然是傳統的瀏覽器和客戶端。
隨著移動互聯網的發展,越來越多的服務已經開始向移動終端傾斜,利用移動終端的便利性,服務的提供和消費也變得越來越快捷。未來移動應用將帶來一個嶄新的時代,一個屬于移動互聯網的時代開始了。
在移動應用的技術領域中,我們需要面對多個平臺(ios,android,wp等),每個平臺可能還需要面對不同設備的規格,移動開發也面臨這很多很多的問題。很多廠商也在致力于利用一些中間的語言和技術來統一移動領域的開發,比如目前以html5、javascript、ruby等中間件平臺也開始蓬勃發展起來了。
最近google推出了將java轉化為object-c的工具,未來的移動開發必然要面臨也需要我們考慮如何解決跨平臺的問題,特別對于中小企業,處于成本的考慮,我們也將不得不面對。
目前,我們要解決的是如何將原生語言和跨平臺語言的結合,因為一個服務,多個終端,業務處理邏輯都是相同的,不同的更多是在UI層面和交互層面上。所以通過和中間語言的結合,比如javascript、lua等,可以更加優化移動應用的開發,降低開發和維護的成本,而且多個端都可以在一個統一有序的環境中發展。
跨平臺的移動應用在剛開始的確做了一些嘗試,但是實際運行效果并不是太好,所以這部分這幾年是沒有更深入的發展,移動開發依然以原生開發為主。但是隨著前端技術的日趨成熟,跨平臺的解決方案也越來越成熟,這方面我們應該再重新出發,配合移動中臺的建設,把端上面的技術好好的沉淀下。
2012年10月7日 一個十一假期的思考沉淀
#專欄作家#
菜根亂譚,微信公眾號:CGLT_TAN,人人都是產品經理專欄作家。經歷程序員、技術負責人、產品經理等多種崗位,現在負責百洋智能科技的研發管理。關注醫療,早教領域,擅長技術應用型產品的設計和運營。
本文原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
又五年過去了,期待分享一下相關的理念是否有變化和升級
干活
作者寫的非常好
謝謝