文章首發(fā)公眾號:慧響 (withounder)
從去年夏末至今,我一直在閱讀《架構(gòu)即未來:現(xiàn)代企業(yè)可擴展的Web架構(gòu)、流程和組織(原書第二版)》這本書。該書從組織、管理和領導,擴展技術(shù)平臺的過程,技術(shù)和架構(gòu)的可擴展性,云計算等新技術(shù)和如何計算常見技術(shù)指標等方面,對一個持續(xù)成長的公司如何面對系統(tǒng)、組織和流程的擴展性問題進行了有價值的意見指導。全書闡述了經(jīng)過驗證的信息技術(shù)擴展方法,對需要掌握的產(chǎn)品和服務的平滑擴展做了詳盡的論述。具有一定的參考價值。
本書中文譯版厚達六百頁,由于期間穿插著閱讀了很多例如《深度學習》、《灰度決策》、《SRE Google運維解密》等其他書目,加之此書看待事物的層次已然到達一定層面,因此書到目前為止僅僅看了二三百頁,只是將近書的一半。為了不因時間線拉得過長導致書目前后邏輯阻塞,從今天起,我將逐步總結(jié)之前所看內(nèi)容,以饗讀者,也以便自己回顧。文章既有摘轉(zhuǎn)錄,又有自我理解批注。
本文是該書的第一部分的上半部分,是書中的第一章、第二章,主要介紹了組織中人員的可擴展性配置的理論與實踐經(jīng)驗。
人員和領導力對擴展性的影響
人、組織的作用、特質(zhì)及其重要性
產(chǎn)品所帶來的價值和出現(xiàn)的責任都是人為的結(jié)果。人對擴展性具有重要作用。如果想要確保產(chǎn)品可以擴展,人是最為重要的因素。在擴展性方面,忽略人的因素作用是錯誤的,這有可能是產(chǎn)品無法滿足用戶需求的根本原因。
既然人是可擴展性的核心因素,我們就應花大力氣去吸引和留住最好的人才。不僅僅是要找到技能最好且付得起工資的人才,更要有合適的人、合適的行為、合適的工作、合適的時間來引領成功。例如,1985年,喬布斯是一個合適的人,但遺憾的是當時他沒有合適的行為。在1996年回歸時,他就是個合適的人,且有合適的行為,并在合適的時間做了合適的工作。進一步說,合適的行為意味著喬布斯行為的綜合結(jié)果,對蘋果成長的影響基本上是正面的。
但,如果人是系統(tǒng)擴展中最重要的因素,那么如何把人組織起來完成工作也就同樣重要。而成功設計組織首先要明確組織的產(chǎn)出是什么。
關(guān)于組織是否容易增加人的問題。好的組織支持增加或少或多的額外人手,允許形成新的團隊或者把人加到現(xiàn)有團隊中去。當公司狀況不佳的時候也能靈活地縮小規(guī)模。
而有關(guān)指標的問題也很重要,因為組織的產(chǎn)出取決于規(guī)模和效率(多少人工作和每個人或團隊的產(chǎn)出),即“每個人做更多的工作”或者“以相同的規(guī)模有更多的產(chǎn)出”。而如果沒有關(guān)鍵性的指標來幫助我們度量達成期望的結(jié)果,那么我們就不應該去管理它。管理意味著度量,度量失敗即管理失敗。如果組織很難度量每個人的表現(xiàn),那么你就無法度量產(chǎn)出。如果你無法度量組織的產(chǎn)出和工作的質(zhì)量,你就無法應對突然發(fā)生和快速發(fā)展所帶來的問題。
另一方面,擁有足夠授權(quán)的團隊,通常比授權(quán)不足的團隊有更高的士氣、較低的跳槽率和較快的市場響應速度。授權(quán)的基礎是為達成目標,有可以獨立作出必要決策的能力。授權(quán)程度最高和對目標擁有度最高的是那些跨職能而且擁有達成目標所需要的全部技能的團隊。
組織的內(nèi)部沖突類型分為情感型和認知性。情感型沖突是以角色或控制為基礎的沖突,經(jīng)常發(fā)生在團隊之間。而認知性沖突常常是關(guān)于“誰”做,或者“怎么”做。認知型沖突擴大了策略的可能性范圍,通過結(jié)合不同的知識、技能和經(jīng)驗來覆蓋那些相互交叉的部分,從而增加了正確決策的概率。
在《人月神話》(The Mythical Man-Month)一書中,弗雷德里克·布魯克斯曾經(jīng)指出,在軟件項目開發(fā)的過程中,有一個時間點,給項目組增加人員實際上會導致項目的進一步延遲,即更晚交付。布魯克斯指出延遲的原因之一是團隊每增加一位新成員都會帶來溝通上的額外負擔。隨著團隊規(guī)模的增長,增加成員所帶來的額外溝通復旦呈線性特征。換句話說,人增加的越多,每個成員的單位溝通和協(xié)調(diào)成本也就越大。
基于上面的認識,亞馬遜創(chuàng)始人兼CEO杰夫·貝佐斯的解決辦法是建立“兩張披薩團隊”規(guī)則:任何一個團隊的規(guī)模不能大過兩張披薩所能喂飽的人數(shù)。這條規(guī)則的含義是,溝通主要發(fā)生在團隊內(nèi)部,因此額外的溝通負擔就大大地減小了。
管理和領導的重要性
管理是與“推”(Pushing)相關(guān)的活動,而領導是與“拉”(Pulling)相關(guān)的活動。領導設定的目的地和通往目的地的路線圖。管理設法到達目的地。一個人的“管理風格”使其更像一個領導或更像一個經(jīng)理。風格代表著個人對領導或管理任務的理解。
管理這個“推”的活動是把適當?shù)娜蝿辗峙涞饺?,并且確保這些任務可以在指定的時間內(nèi)以適當?shù)某杀就瓿?。管理與人相關(guān),需要確保合適的人,在合適的時間,以合適的行為,做合適的工作。
領導這個“拉”的活動就是選擇山頭,鼓勵員工一起努力翻越山頭。領導激勵員工和組織做正確的事并好好做事。好的領導創(chuàng)造文化,聚焦打造具有高可擴展性的組織、流程和產(chǎn)品而取得成功。這種文化靠激勵體系來確保公司能夠在成本可控的情況下擴展,同時不影響用戶體驗和出現(xiàn)擴展性問題。
這里所說到的,其實就是人、組織、管理、領導等基本概念的含義、特質(zhì)、重要性等內(nèi)容??偨Y(jié)起來就是人是重要且核心的因素,用合適的、可衡量的、可擴展的、能夠化解或避免沖突的組織框架,用以選擇山頭般的拉式領導和恰當分配任務方法的推式管理。
可擴展性技術(shù)組織的角色
此內(nèi)容對大公司,可以作為一個清單確保厘清與擴展性相關(guān)的技術(shù)和執(zhí)行人員的角色和責任。對小公司,幫助開啟定義與可擴展性相關(guān)角色的過程。對技術(shù)新手,可以作為了解技術(shù)組織如果工作的入門。對于經(jīng)驗老到的技術(shù)專家,可以幫助大家回顧組織的結(jié)構(gòu),以確認可以滿足擴展性的需求。
角色和責任的無界定與多指定
定義清晰的角色是領導和經(jīng)理的責任,不管是獨立貢獻者還是組織都需要角色的清晰性。而當你加錢根據(jù)色清晰度的時候,要注意避免責任的重疊,這會造成無效的努力和價值損毀的沖突。
要認識到,角色和責任不清意味著有些事情沒人去做。例如服務器容量,缺乏團隊或者個人來負責系統(tǒng)的容量規(guī)劃,對一個快速增長的公司是災難性的。即使公司指定了負責系統(tǒng)容量規(guī)劃的人或者組織,往往因為系統(tǒng)過去沒有數(shù)據(jù)積累而無法規(guī)劃。
而相對的,“無人負責”問題的另一個極端是有多個組織或人被賦予了同樣的目標。請注意,這和“共享一個目標”并不是同一件事情?!肮蚕怼币馕吨献?,而此問題不是。這種問題存在于很多大公司中,而且當它發(fā)生時,不僅浪費金錢,而且還破壞股東的價值,同時在組織之間產(chǎn)生長期的怨恨,降低員工士氣。造成團隊士氣低落的最大原因,莫過于某個團隊對某項任務負全責,因為團隊成員一位其他人在負責某個部分而沒有去做,結(jié)果造成整個任務的失敗。多人負責的問題是剛剛描述的基于情感沖突的核心問題所在。而且通常情況下,團隊會變得極端化,甚至在辦公室ZZ斗爭上浪費更多的時間。
定義高管團隊和獨立貢獻者角色與執(zhí)行人員的責任
任何的組織結(jié)構(gòu)決策都有利有弊。重要的是在組織的設計中要包括全部的責任,不僅要清楚地定義誰是決策者,還要搞清楚誰負責為決策提供信息,決策和行動方案都應該通知誰,誰來負責執(zhí)行決策。盡管我們無法徹底消除沖突,但是合理的組織結(jié)構(gòu)可以幫助我們限制一些因為缺乏清晰度而造成的沖突。
首席執(zhí)行官
對于擴展性,CEO是最終的決策者和擴展性的仲裁者。一個技術(shù)公司,好的CEO需要精通技術(shù),但是這并不意味著他必須是一個技術(shù)專家或者主要的技術(shù)決策者。CEO的工作就是提出合適的問題,讓合適的人參與,并且協(xié)調(diào)外部的支持或建議來尋求正確答案。在技術(shù)世界里,CEO的工作是了解一些基礎知識,知道該問什么問題,知道去哪里和在什么時間可以得到幫助。對于沒有技術(shù)經(jīng)歷的CEO,這里給出如下建議:
- 提出問題并從答案中尋找一致性:你的部分工作就是尋找真相,盡管我們不認為團隊會說謊,但是事實經(jīng)常會有不同的解讀。發(fā)現(xiàn)事情看起來不太對勁的時候,就要提出質(zhì)疑。如果你能夠戰(zhàn)勝自我或戰(zhàn)勝驕傲,提出一些看起來容易被忽略掉的問題,那么就會發(fā)現(xiàn)不僅學到了很多東西,而且也磨練出了發(fā)現(xiàn)真相的重要技能。同時,懂得在什么時候去調(diào)查、去哪里調(diào)查, 支支招除螨儀的答案也很重要。同時這種技能不僅限于CEO,經(jīng)歷和獨立貢獻者也應盡早磨煉出這種技能。
- 尋找外部的幫助:在可擴展性方面,要從朋友或者專家哪里尋求幫助。建議與技術(shù)公司建立專業(yè)或個人的關(guān)系,依靠這些關(guān)系來幫助你提出正確的問題,并且當你要深究的時候,協(xié)助你評估答案。
- 加強對可擴展性的理解:列個清單,把你自己在技術(shù)方面的弱點都羅列出來,特別是那些有問題的,然后尋求幫助使自己變得更聰明。更好地提出和評估問題。
首席財務官
預算辦公室責任重的一個關(guān)鍵人物,就是要確保團隊和公司能有足夠的資金來擴展平臺、產(chǎn)品和系統(tǒng)。因此,適時地采購和部署系統(tǒng)及解決方案會優(yōu)化公司的凈收入和現(xiàn)金流。CFO可能需要問清楚,在制定預算的過程中是否考慮過其他的可擴展性方案,在確定預算方案的時候,做過什么樣的權(quán)衡安排?因此,比較好的回答是“我們評估了所有的可能性,這個方案用相對較低的成本來水平擴展,為未來的擴展搭好一個框架,使我們可以持續(xù)擴展。”
業(yè)務部門的負責人、總經(jīng)理、產(chǎn)品線負責人
這些要對平臺、產(chǎn)品和系統(tǒng)的業(yè)務增長做好需求預測,需求預測對確定擴展計劃至關(guān)重要,這可以避免在公司的實際業(yè)務沒有發(fā)生之前,安排過大的預算。這里,需求指的是系統(tǒng)承受用戶并發(fā)請求的數(shù)量。預測或許不準,特別是在公司發(fā)展的初期,但是開啟這個過程至關(guān)重要,預測的準確度會隨著時間的推移而逐漸成熟。
首席技術(shù)官/首席信息官
CTO/CIO必須要有公司的整體技術(shù)愿景,而且這個愿景要包括可擴展性,同時還負責為團隊噢配置合適的人員以確保其能完成可擴展性的相關(guān)使命,CTO/CIO責任還包括發(fā)展可擴展性的企業(yè)文化和過程。這里,CTO絕不應該把指定可擴展性發(fā)展愿景的權(quán)力下放。同時,對出來乍到的CTO同等重要的是贏得技術(shù)人員的信任,沒有手下的信任,CTO無法有效的領導。
另外,盡管CTO不必是一位資本市場的專家,但最好還是需要理解公司業(yè)務運作的基本情況,例如應能分析和理解損益表、資產(chǎn)負債表和現(xiàn)金流表之間的關(guān)系。在一個像互聯(lián)網(wǎng)公司這樣的以技術(shù)為中心的公司,CTO通常擁有全公司最大的預算。這樣一位高管經(jīng)常負擔著非常大的投資任務,所以缺乏對財務計劃的了解會給公司帶來很大的風險。CTO應有市場營銷的基礎知識,,只是希望CTO對這些方面有基本的了解,從而為可擴展性做好商業(yè)安排,同時可以有效地在商業(yè)界溝通。
獨立貢獻者
架構(gòu)師:確保系統(tǒng)的設計和架構(gòu)是可以隨著業(yè)務的發(fā)展而擴展。架構(gòu)師需要在業(yè)務需要發(fā)生之前就想好,遠在業(yè)務部門的預測超過平臺的容量之前,就已經(jīng)對如何擴展系統(tǒng)深思熟慮了。架構(gòu)師也負責制定代碼設計和系統(tǒng)實施的技術(shù)標準。架構(gòu)師負責設計系統(tǒng)并確保其設計能解決任何的擴展問題。架構(gòu)師也可以負責信息技術(shù)的管制、標準和過程。
工程師:工程師是戰(zhàn)斗在第一線的,真槍實彈的基層人員。工程師團隊是最有可能真正了解系統(tǒng)局限性的僅有的幾個團隊,他們也是發(fā)現(xiàn)未來可用性問題的關(guān)鍵人員。
DevOps:即系統(tǒng)和服務既需要軟件也需要硬件,由此軟件研發(fā)和系統(tǒng)管理混合成DevOps。通常,DevOps的人員負責研發(fā)和測試環(huán)境,包括研發(fā)和配置腳本、監(jiān)控、日志和其他系統(tǒng)工具。DevOps的人員負責輸出報表展示一個階段可用性的發(fā)展趨勢,分析出問題的根源并給予糾正,確定各類問題的平均解決事件和平均恢復時間。不管團隊的構(gòu)成情況怎么樣,都是DevOps負責監(jiān)控、報告應用與系統(tǒng)的健康情況和服務質(zhì)量,在解決可用性問題的時候起著關(guān)鍵性的作用。架構(gòu)和工程團隊嚴重依賴DevOps來幫他們確定在什么時間解決什么問題。
基礎設施工程師:基礎設施橫跨很多個敏捷團隊。有些大企業(yè)為了研發(fā)端對端解決方案把他們放在敏捷團隊,但在大多數(shù)中小企業(yè),則集中在基礎設施部門來支撐多個工程團隊,包括DBA數(shù)據(jù)庫工程師、網(wǎng)絡工程師、系統(tǒng)工程師和存儲工程師。不論基礎設施人員團隊的大小,其主要責任都包括設計共性資源的架構(gòu),定義全局的存儲架構(gòu),確定關(guān)系型或非關(guān)系型數(shù)據(jù)庫的解決方案。
質(zhì)量保證工程師:理想情況,質(zhì)量保證工程師主要是指那些負責應用測試,確保測試結(jié)果和公司期望的結(jié)果一致的工程師,在可擴展性測試過程中也同樣起著重要的作用。質(zhì)量保證一定要聚焦自動化的測試,而不是手工測試。不僅僅生產(chǎn)系統(tǒng)要可以擴展,而且當添加新功能的時候,測試的過程也要可以高效擴展。
系統(tǒng)容量規(guī)劃師:有系統(tǒng)容量規(guī)劃責任的人可以在任何團隊工作,但是他們需要能夠取得最新的系統(tǒng)、產(chǎn)品和平臺的性能數(shù)據(jù),系統(tǒng)容量規(guī)劃是高效擴展和成本控制的關(guān)鍵。
RASCI工具
RASCI是一套用來確定責任的表格:
- R:負責(Responsible)對項目或者任務的完成負責的人。
- A:批準(Accountable)項目關(guān)鍵決策的批準人。
- S:支持(Supportive)為項目完成提供資源的人。
- C:咨詢(Consulted)為項目提供數(shù)據(jù)或者信息的人。
- I:知情(Informed)需要了解項目相關(guān)情況的人。
RASCI可以用在矩陣當中,每個活動或者任務標在Y軸上,每個獨立貢獻者或者組織的名字標在X軸上。活動Y軸和組織X軸的交叉將會有R、A、S、C、I中的一個字母。如果交叉處什么都沒有,那么相關(guān)的獨立貢獻者或者組織就不是這個任務的一部分。
在理想情況下,一個任務會有一個R和一個A。一種更為吻合的說法是分給幾個人負責的項目等于沒有人負責。而這并不是說其他的人不允許為項目或者任務提供建議。同時,A在R就方案的正確性咨詢所有相關(guān)人之前是不應批準的。當然,如果公司文化好,R不僅可以尋求人們的幫助,而且會讓那些被咨詢的人感到自己有價值,其價值已經(jīng)被考慮到?jīng)Q策支持的過程中。
只要你愿意加,覺得有價值,或者對完成項目來說是必須的,可以增加多個C、S和I。但是,同時要注意不要過度知會。新的公司往往假設決策應該讓每個人都參與或者知會,在這種信息的發(fā)布機制是沒有可擴展性的,結(jié)果是大家花時間讀郵件,而不是去做他們應該做的,能為股東產(chǎn)生價值的事情。
下圖是一個RASCI矩陣示例:

CTO可擴展性愿景的顧問包括那些需要依賴CTO來實現(xiàn)生產(chǎn)系統(tǒng)可用性或公司運營后臺系統(tǒng)的人。CTO的組織(架構(gòu)、工程、運維、基礎服務和質(zhì)量保證團隊)全部都是愿景的支持者,其中一個或幾個部門也可能是咨詢者。CTO的技術(shù)背景越差,就越需要依賴其團隊來制定可擴展性的愿景。
最后指出,需要把可擴展性愿景知會董事會。
另外,和矩陣相關(guān)的一個要點是我們已經(jīng)把任務分割以避免R部分的重疊。然而,這樣做的結(jié)果是組織向縱向條塊化發(fā)展,與我們長期的發(fā)展方向不符。矩陣型的組織團隊,不但可以避免團隊內(nèi)部存在的圍繞功能或組織的責任而產(chǎn)生的獨立心態(tài),而且可以從RASCI中獲益。既要有單一責任的組織,又要確保合作。通過C特性的使用來落實RASCI。
有關(guān)角色和責任的一點是,不應該有任何一個團隊把角色和責任作為無法完成工作的障礙。當員工履行職責時,完成的任務超過了定義好的責任范圍。如果能夠幫助公司完成實名,那么員工可以,也應該自愿跨越邊界去完成工作。重要的是,當這種情況發(fā)生時,他們應當和領導一起去找出到底無人負責的地帶在哪里,領導應該承諾在未來糾正這些問題。
關(guān)于權(quán)力下放
權(quán)力下放就是授權(quán)別人做你該做的事情。你可以下放任何權(quán)力,但是必須對其結(jié)果承擔所有的責任。接受你全力下方的個人或團隊最多承擔連帶責任,雖然你可以解雇、提升、獎勵或懲罰團隊,但是必須清楚自己要對最終的結(jié)果負全責。好的領導本能地明白這個道理,他們總是把贊揚留給團隊,承認失敗并公開地承擔責任。相反,差的領導在失敗時找替罪羊,在成功時搶功。
但這并不是說你自己去做所有的決策,事實上,你可能沒有資格去做決定。例如,一個不懂技術(shù)的CEO或許不應該去做架構(gòu)的決策,一個200人的工程機構(gòu)的CTO不應該去寫最重要的代碼。你必須找到最好的人,然后才有可能把權(quán)利下方給他,并對這些人以最高的標準來嚴格要求。