老曹:面向全棧的技術管理
研發管理有著廣義和狹義的定義,總的來說,研發管理就是在研發體系基礎之上,借助信息平臺進行的團隊建設、流程設計、績效管理、風險管理、成本管理、項目管理和知識管理等活動。 簡單來講,研發管理是面向結果,過程敏捷的一種實踐。作為一名技術管理者,既需要培養團隊的ABC,又需要管理你的老板,保持團隊的新陳代謝,因為一切都是人的競爭。
全棧,不是全能,和所選擇的技術棧甚至業務棧相關。例如以LNMP(Linux + Nignx + MySQL+ PHP),那么掌握了這四種技能,算不算一個全棧工程師呢?個人覺得可以的。全棧工程師就是技能涵蓋了系統中所采用的技術棧。但是隨著技術棧的變化,例如引入了緩存Memcache乃至其他分布式緩存,那原來的全棧工程師還是全棧么?全棧是否要隨之變化呢?這是一種動態性演進,從而衍生出了所謂全棧架構師的概念。
面向全棧的技術管理試圖從采用系統思維的方式來探討研發管理尤其是技術管理的可行性和方法。從系統的角度看,包括時間,空間 和人三個維度。對于研發而言,人是核心競爭力,可以把技術棧劃分為面向空間的技術和面向時間的技術,然而時空又是密不可分的。
這是個人設想的全棧技術棧,面向空間的技術就象庖丁解牛,是對問題本身的分解和實現;面向時間的技術,主要是效率,開發的效率,程序運行的效率等等。
面向全棧的技術管理主要是通過系統性的思維方式解決技術研發管理的問題。這是典型的九宮格矩陣,從時間和空間的維度提出了系統思考的維度??梢钥s放系統的概念范圍,例如到模塊的層面,會發現很多有意思的結論。
全棧的動態根源主要有兩方面的原因,商務驅動和技術驅動都會導致架構設計的優化。商業需求是個大話題,超出了很多技術人的領域,這里主要看研發中技術管理的全棧思維方式。用一句高大上的詞,就是技術前瞻性。 如何考量技術的前瞻性,可以借鑒TRIZ的方法。
TRIZ 是工程領域的神人阿奇舒勒提出的,關于TRIZ的相關知識推薦創新算法一書。
TRIZ 中直接可以借鑒的就是技術系統的9個演進方向,可以指引我們對系統架構的演進思考。
技術的完備性是思考的第一因素,我們的系統是完備的么?如何定位我們系統架構的完備性?沒有監控的系統是完備的么?Bob 大叔的Clean Architecture 給出一種完備系統的參考。
有始就有終,每個系統或者每種技術都有者自己的生存周期,或者自己成長的S曲線。技術選型的時候需要對所選技術所處的階段予以考慮。
系統自身的動態性包括三個方面,第一就是移動性,從互聯網到移動互聯網,從web到手機APP, 不是一種偶然,而是技術系統發展的必然。柔和性說明系統的可塑性強,簡單地說,可重用性是柔和性的一種具體體現??煽匦钥煞裼成涞脚渲没蛘邊祷?
系統的傳遞性強調了通信的重要性,上圖給出了大神AliStair 的六邊形架構,指出了對外接口的作用,被當作了微服務架構的理論基礎。引申一下,為什么會有“Social for Anything” 呢?
子系統的不均衡正是差異性的具體表現,每個子系統都有著自己的進化曲線, 這是我們關注系統瓶頸的一種思路。
回顧上面的九宮格系統思維,最高層就是超系統。主機托管IDC資源逐漸演變為IAAS,負載均衡、集群服務等進化為PAAS, 應用軟件進化為SAAS,后臺的服務進化為BAAS,連數據報表類的服務都在往DAAS上演進,所謂的平臺化或者構建生態系統都是在向超系統的演化。
九宮格系統的最底層是子系統,子系統在向微觀場的方向演進,正像“社會化大分工不斷細化”那樣,職責的原子化,顆粒度的細化等。舉個例子,使用高效資源中的SSD 硬盤, 鑒于SSD的高效,衍生了RocksDB等匹配的存儲引擎。更普遍的是,就是現在如日中天的微服務。
協調性直接影響的是系統的效率。流程,工具,子系統,最重要的是人與系統直接的匹配,也是大家熟知的康威定律。
系統架構設計的時候,我們往往強調以終為始。所謂終,延展一下就是心目中的理想系統。系統的組成是復雜的,架構的約束存在著自身的矛盾,提高理想度中有用對無用的比值是提高核心約束的過程,將部分功能轉移是一種借力打力。
如何匹配系統演進的方式呢,這可能是就是全棧小團隊的用武之地。全棧團隊也有著狹義廣義的說法,但基本都是業務線分割,高度自治,覆蓋技術棧支持DevOps的小團隊,自身就是一個完備的系統。
全棧團隊的管理包括《老曹眼中的敏捷開發》中的ABC,如何促進團隊的動態流動,通過敏捷過程完成連續性交付,同時提高DevOps及工具支撐。
敏捷過程往往會帶來一些副作用,例如技術債務。技術債至少可以分為6類,甚至可以更細。我們能算一算每項技術債的利息么?
馬丁大叔的《重構》是一種經典,但代碼層面的重構并不適合架構或者系統層面的重構,因為重構的前提條件在系統層面往往是不成立的。因此,refactor 會演變成refine。
全棧團隊的分享是提高系統流動性的有效方法??梢杂袌F隊內部的周期性分享,專業的技術技能培訓,內部社區的建立,投身外部社區等等,讓團隊做自己的主人。
以上,是分享的全部內容。研發管理或者技術管理的分享一般都會充滿爭議,管理本身就是面向結果的實踐。因為時空的變化,人員的不同,很多的成功和最佳實踐往往無法復制,我們企圖探索一些可以實踐的不變的東西,但只是,在路上。
【本文來自51CTO專欄作者“老曹”的原創文章,作者微信公眾號:喔家ArchiSelf,id:wrieless-com】