新晉CTO的工作總結:我在第一年學到了14個經驗教訓

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"新年好!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對我們很多人來說,2020年是艱難的一年,我們與COVID-19戰鬥,並開啓了遠程辦公模式。這一年,因爲我們所有人只能呆在自己家裏,幾乎沒有去旅行,所以我們有了大把的時間。我們認爲理所當然的東西被奪走了,我們擔憂會失去親人朋友。希望2021年,我們能自由地生活。但現在更需要我們的責任感和警惕性。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在現在的公司,我擔任首席技術官(CTO)已經有一年有餘。值此歲末之際,對我這一年的工作做簡單總結。回顧這一年的歷程,過程很艱難,收穫也很大。有些時候,我會認爲我不具有領導能力,應該回去做一個個人貢獻者。但是,非常感謝公司對我的支持以及我個人的學習(書籍、博客、觀察),我開始享受這個角色,並直面它帶來的挑戰。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在談論我獲得的經驗教訓之前,先回顧下我的軟件工程師職業生涯。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"我的軟件工程師職業生涯"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2005——2008:軟件工程師"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2008——2012:高級軟件工程師"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2013——2014:首席技術專家"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2014——2019:首席工程師\/架構師(在此期間,我的角色是總監,但我仍然會花很多精力在代碼編寫、系統構建和技術諮詢方面)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020——至今: 首席技術官(我的第一個領導\/管理職位)"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是我第一次擔任領導和管理職務。從個人貢獻者到首席技術官的轉變不僅意味着壓力變大,責任也變大了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這次轉變帶來機遇的同時,也讓我面臨很大挑戰。儘管如此,我還是冒險開始,並摸着石頭過河。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"何爲CTO?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當知道我將成爲下一任CTO時,我的第一個想法是找一份指導手冊,看看CTO要做什麼,以及怎麼做才能成爲一名優秀的、成功的CTO。我想爲這個角色做好準備,於是去研究了網絡上我能找到的所有與CTO相關的文章。你猜怎麼着?這種指導手冊壓根就不存在。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"直到今日,我仍然只能在工作中學習並確保同樣的錯誤不要犯第二次。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我想知道的第一件事是首席技術官(CTO)的定義是什麼。顯然,這是最難以說清的首席類角色之一,每個CTO扮演的角色都稍有不同。對這個角色最好的描述我是在馬特·塔克(Matt Tucker)的"},{"type":"link","attrs":{"href":"https:\/\/www.linkedin.com\/pulse\/five-flavors-being-cto-matt-tucker\/","title":"","type":null},"content":[{"type":"text","text":"一篇文章"}]},{"type":"text","text":"中看到的。根據Matt的說法,CTO角色由五個特徵組成。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/55\/55744cdb074a63aa93aeee58f40a7013.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"馬特·塔克的CTO框架表格"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我認爲上述框架爲我們理解CTO角色提供了一個很好的思維模型。大多數情況下,CTO是上述兩種或兩種以上特徵的組合。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"介紹一下我的CTO職責。Matt Tucker框架描述的CTO 是產品研發公司的CTO。我是一家提供IT服務公司的CTO,因爲下面的一些原因,這類職位更加碎片化和更具挑戰性:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在任何組織中,人都是重要的資產。對於提供IT服務的公司來說,業務增長率與人員數量成正比。但如果你想成爲好的服務提供商,情況就有所不同了。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你必須讓那些還沒有準備好應對變化的大型企業能成功應用先進技術。在過去5年中,大多數組織都在進行數字化轉型。以我的經驗來看,現階段的組織比以往任何時候都更願意嘗試新的技術(React、Golang、Flutter、Cloud、Kubernetes)和架構風格(微服務、事件驅動、無服務器)。這是一個好消息,但是,很少有組織能理解採用先進技術棧要付出的代價。他們想成爲他們行業領域的Google,但基礎工作做得並不夠。這個在我的文章"},{"type":"link","attrs":{"href":"https:\/\/medium.com\/xebia-engineering\/11-reasons-why-you-are-going-to-fail-with-microservices-29b93876268b","title":"","type":null},"content":[{"type":"text","text":"《使用微服務會失敗的11個原因》"}]},{"type":"text","text":"中有所提及。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在先進技術領域,真正有經驗的優秀軟件工程師並不多。好的軟件工程師都很昂貴,而且他們更傾向於去產品研發公司。作爲IT服務公司,很難給出產品研發公司相同的薪水。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"介紹IT服務組織CTO的文章並不多,也沒有明確誰是你遵循的榜樣,下面我將在Matt框架的基礎上,結合自身情況,給出我對IT服務組織CTO的理解。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是我結合自身情況對Matt框架做的修改,並且對於去年我在各部分花費的時間給出粗略的估計 。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/be\/bef4ff2e0fb8314925267f7f96322bb0.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"修改後的CTO框架"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"正如你在上述表格中看到的,我無處不在。幸運的是,我在不同任務間切換所消耗的精力較少,這主要是因爲同一時間我參與的任務不會超過兩個。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在我擔任CTO的這一年時間中,我建立了一套任務授權體系架構。希望在第二年,我能更專注於做一些重要的事情。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"第一年學到的經驗教訓"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"到目前爲止,我分享了我的職業經歷和對CTO角色的理解。下面我將和你一起回顧下這一年中的經驗教訓。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1.相信自己並積極爭取"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很多軟件工程師都夢想有一天能成爲CTO,這被很多人視爲軟件工程師職業生涯的頂點。但是,公司並不會僅僅因爲你是最有能力的軟件工程師\/架構師,就任命你爲CTO。你需要自己去爭取。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我花了2-3年的時間去爲CTO這個職位做準備。讓我一直有所顧慮的原因之一是彼得原理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"彼得原理是一種經驗理論,即在各種組織中,如一個公司,由於習慣於對在某個等級上稱職的人員進行晉升提拔 ,因而僱員總是趨向於被晉升到其不稱職的地位。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我一直以豐富的軟件開發和架構經驗而自豪。擔心自己有一天會跟不上技術發展的腳步,所以我一直向着技術專家的方向努力,而非向管理方向發展。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"後來,我想通了,如果我不競爭這個職位,其他人就會。我的優勢是對公司有足夠多的瞭解,並且具有領導能力,所以爲什麼不試一下呢? 對我來說,最困難繁榮是主動爭取。可悲的是,如果你不主動爭取,別人就不會給你。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我發現了一個規律,大多數人因爲羞於開口而錯失很多良機。一直以來,我從沒有碰到過不願幫助自己的人,只要我開口,基本上沒有人會拒絕我。——"},{"type":"link","attrs":{"href":"https:\/\/www.youtube.com\/watch?v=zkTf0LmDqKI","title":"","type":null},"content":[{"type":"text","text":"史蒂夫·喬布斯"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2.合理規劃時間"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"幾周前,一位同事問我, 在參加這麼多會議的情況下,你還能完成需要投入較多精力的工作嗎?我發現,一旦人們發現我在會議時間段沒有安排,他們就會讓我參加會議。在2020年上半年期間,我一直在會議的泥潭中掙扎,一天中大部分時間都在開會。在這段時間裏,大部分需要思考的工作我只能在下班或週末完成。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下半年,在意識到需要對時間有自己的規劃後,我改變了工作方式。現在,我每天會抽出幾小時,甚至半天時間,專注於一些需要全身心投入的工作。這樣,我就能夠在製造者日程表(maker schedule)和管理者日程表(manager schedule)之間"},{"type":"link","attrs":{"href":"http:\/\/www.paulgraham.com\/makersschedule.html","title":"","type":null},"content":[{"type":"text","text":"自如地切換"}]},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一方面,我也避免成爲日程表的奴隸。我採用的方法是,和會議組織者確認是否有必要參加。其他情況下,如果有我團隊的人已經參加會議,我就不參加了。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3.凡事不必親力親爲"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"大多數新晉的管理者都會面臨這個挑戰。你知道這個任務自己可以做得又快又好,所以傾向於自己完成任務。但是這無法發揮團隊的力量,你很快就會成爲團隊的瓶頸。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"發揮團隊力量的最好方式是充分授權。包含兩個方面:授權什麼和授權到什麼地步。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"授權什麼"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"確定"},{"type":"link","attrs":{"href":"https:\/\/hbr.org\/2017\/07\/how-to-decide-which-tasks-to-delegate","title":"","type":null},"content":[{"type":"text","text":"哪些任務需要授權"}]},{"type":"text","text":",珍妮·布萊克(Jenny Blake)將任務分爲6類,她稱之爲6T。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"瑣碎任務(Tiny):非常小的任務,看起來不重要,但會慢慢累積。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"無聊的任務(Tedious):相對簡單的任務,利用瑣碎時間完成。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"耗時的工作(Time-consuming):雖然這些任務可能很重要、有點複雜、需要花費時間,但最初的80%的研究工作並不需要你做。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可指導的任務(Teachable):乍一看很複雜,但可以被分成幾個子任務的任務。這類任務可以分配後交給團隊成員去做,你只要做好質量檢查和最終裁判即可。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不擅長的工作(Terrible At):不僅不是你的強項,而且也是你不想幹的。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有期限的工作(Time-Sensitive):當你手頭有其他任務,而且沒法在截止日期完成所有的任務,你需要把某些重要且有明確時間要求的任務分派出去,從而保證所有任務能在截止時間內完成。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"像組織內部技術會議、辦公網絡環境的維護、代碼審查、招聘初級工程師等任務,我都分派給其他人去做。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當你清楚了哪些任務需要分配後,接下來需要考慮的是分配級別。你需要明白按什麼級別分配任務以保證任務能100%完成 。我在網站“管理30“中學到了7層分配級別。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"告訴(Tell)"},{"type":"text","text":":分配任務,並告訴下屬一步步怎麼做"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"轉交(Sell)"},{"type":"text","text":":我先做一部分,再移交給他們"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"顧問(Consult)"},{"type":"text","text":":我作爲顧問,並做出決策"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"協商(Agree)"},{"type":"text","text":":我們一起做出決策"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"建議(Advise)"},{"type":"text","text":":我給出建議,他們來決策"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"詢問(Inquire)"},{"type":"text","text":":他們決策後我詢問結果"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"分派(Delegate)"},{"type":"text","text":":只分配任務"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"到最後,你需要使用足夠的管理手段來確保事情按計劃進行。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4.減少混亂"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不管你喜不喜歡,每個組織都會有混亂髮生。混亂可能是軟件交付出錯、導致客戶系統掛了的要命bug、系統性能問題或者和人相關的問題。當你作爲領導參加這樣的會議時,人們期望在會議結束時,事情變得清晰,團隊有一個可執行的計劃。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲領導者,你的工作就是減少混亂,讓事情變得清晰。下面是我經常使用的減少混亂的操作步驟:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過問問題來讓事情變得清晰。這樣可以去除不重要的信息直達問題的核心。作爲領導者,你的目標是引導人們思考。所以,你需要問一些深刻而寬泛的問題,如你爲什麼選擇這種設計?這個度量指標能告訴我們什麼?現在用戶在想什麼?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"創建一個小的、清晰的todo清單。例如,這是一個修復性能問題的todo清單:"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"觀察APM工具中的性能指標,找到問題原因"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在模擬環境重現問題"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"看看需要性能調優的單元是否存在對應的測試,如果沒有,就編寫測試"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"修正問題並保證單元測試通過"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"部署到更底層的環境並觀察補丁的效果"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"發佈到生產環境"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"觀察APM性能指標確認問題已解決"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將任務分配給負責人"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在wiki上做記錄"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我發現另一件有趣的事情是,許多人無法靠抽象概念來開展工作。一旦有人在任務上開了個頭,很多人就知道該怎麼做了,你需要將事情分解成可操作的具體步驟。這意味着在你將任務移交給其他人前,你需要進行大量的思考。作爲一名領導者,隨着時間的推移,你會明白不同類型的任務,在開始之前需要思考到什麼程度。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"5.你有時候需要表現出不滿"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲一個領導者,你不應該感情用事。我同意領導者在90%的情況下都不應該。但是,有些時候你需要表現出你對事情的不滿。你不滿的警戒值應該很高,不應該經常達到。如果有人把事情搞砸了,你必須做出反應。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"舉個例子,有一次,一位高級開發人員(接近10年的開發經驗)在團隊羣裏發了一條消息,說他們從昨天就被卡住了,一個REST API java客戶端不能調用,但Postman(一個API調試程序)可以。這個問題很奇怪,所以我和團隊成員一起開會來研究這個問題。這位開發人員先是展示了Postman的調用情況,然後是Java代碼。最終找到的原因是JSON格式的請求參數中有一個應該是username,但java程序傳遞的是userId,在Postman中傳的是username,所以可以工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我知道這件事微不足道,很多開發人員可能會犯同樣的錯誤。但令我失望的原因是:如果Postman可以工作,而你的代碼不能,你不應該在不檢查代碼的情況下就認定API有問題。你不能在一天什麼也沒幹的情況下,在第二天的站會(standup)上告訴客戶其他人寫的API有問題,客戶可沒那麼寬容。有一些自動生成REST客戶端的工具(如Insomnia)可以幫你驗證假設。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我這裏提到的表現出不滿並不是要責罵某人。只是意味着你需要表明期望,讓他們知道你希望他們把事情弄清楚。同時,教他們調試這類問題的方法。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"同樣的,也有其他情況下,你需要表現出不滿,但正如我所說,你的警戒線應該更高,這樣的情況不應該經常發生。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"6.從其他人的錯誤中學習"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"經常聽到有人說應該從自己的失敗中吸取教訓。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你善於觀察,就能從別人的失敗中學習,從而減少自己的失敗。換句話說,你可以從別人身上學到經驗教訓。這是非常有用的技能,而且它能幫你更快地達到目標。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,它要求你仔細地觀察其他人,瞭解他們的特點和他們失敗的背景。一旦你瞭解了這些人,知道了他們失敗的原因,你就能夠避免犯同樣的錯誤。在組織中,多個領導都試圖做出同樣的改變,這很常見。理解前任領導爲什麼失敗,可以幫助現任領導更容易實現成功。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"7.你不可能有所有答案,這沒什麼大不了的"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我給自己施加了很大壓力,爲所有問題都提供答案。我調試錯誤,考慮問題的解決方案,併爲別人做大量的研究工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我越努力解決問題,別人給我的問題就越多。我原以爲人們會學着面對自己的問題。但是,人們更願意從我這裏得到完整的答案。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我意識到部分原因是我處理問題的方式有問題。我想成爲一個無所不知的好領導。我們都知道這是不可能的,但當你成爲一個領導者,就有這種成爲英雄的傾向。所以,我改變了方法。我開始給人們一個谷歌文檔模板,他們需要先填寫,然後我纔會與他們一起解決問題。這份文檔需要他們寫明 :問題的定義、對問題的理解,做了哪些嘗試以及哪些沒有成功。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"於是產生了三種結果:有一些問題,他們真的不能解決;我參與並給出建議,他們作爲負責人解決問題;一些問題沒有迴音了(我認爲他們寫文檔的過程中,把問題解決了)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲領導者,你的工作不是爲人們尋找答案,而是幫助他們找到答案。說我不知道,讓別人承擔責任,是成熟領導的標誌。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"8.你培養的人有可能離職"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在過去幾年中,我僱傭了很多有潛力的工程師。我和他們結對編程,指導他們,給他們機會。但是,他們後來離職了。對很多優秀的工程師來說,產品研發公司纔是他們夢想的工作。這很無奈,但卻是事實。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有時候,我甚至認爲一個好的IT服務機構,其工作之一就是爲產品研發公司培養工程師。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我認爲以下是工程師想加入產品研發公司的原因:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"他們希望有一天能創立自己的公司,而在產品研發公司工作能學到很多東西。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很少需要在不同的工程間切換。你可以在一個團隊工作很多年。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你可以在某個領域持續鑽研。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"產品研發公司比IT服務組織工資高。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"到目前爲止,在我的職業生涯中,我主要是在IT服務機構工作。我認爲在IT服務機構工作有一個好處是:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"您可以在很短的時間內在多種技術和多個領域間都有所涉獵。我開發過DevOps工具、實時定價引擎、多租戶SaaS應用系統、社交平臺、幫助銀行進行數字化轉型(架構、DevOps實踐)等等。"}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"9.可以編程,但不要做出承諾"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你在網上讀到討論技術經理或者CTO是否應該編程的問題,你會發現很多人都"},{"type":"link","attrs":{"href":"https:\/\/medium.com\/cto-craft\/back-away-from-the-keyboard-should-ctos-code-80ae1d7ccfa3","title":"","type":null},"content":[{"type":"text","text":"反對編程"}]},{"type":"text","text":"。反對編程的兩個理由是:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你有很多更重要的事情,而編程並不在其中。你可能不能及時完成任務,而這會拖累你的團隊。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"屈服於“對編程的愛”的危險在於,在追逐“令人驚歎”技術的慾望之下,會漸漸遺忘你的業務目標。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在我擔任CTO的第一年中,我與交付團隊一起工作,交付代碼。這是在三個重要項目中我做的工作:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"向交付團隊明確我不是任務的負責人。如果我的時間允許,我會交付代碼,但他們不能指望每次我都能按時完成。這意味着除我之外,每個項目都應該有一個技術負責人。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以防我沒空,我總是和一個能推進任務的團隊成員結對編程。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過審查代碼和工程設計文檔而不是編寫代碼來貢獻價值"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"優先爲被困的人排憂解難。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我喜歡編程。爲了編程技能不至於荒廢,下班後我會參與項目。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"10.只有很少的客戶看中質量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很多客戶希望他們的供應商能夠提供:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"一個高質量的產品"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"敏捷需求管理"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"在約定的時間和費用內完成交付"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們都知道,構建滿足這三個條件的產品是"},{"type":"link","attrs":{"href":"https:\/\/medium.com\/@harpreet.dhillon\/iron-triangle-triple-constraints-of-project-management-e818e631826c","title":"","type":null},"content":[{"type":"text","text":"很困難的"}]},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這些條件中,當團隊面臨時間和成本壓力時,質量是首先被犧牲的。質量需要花費時間和金錢,與功能相比,它的優先級並不高。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"客戶以爲軟件是以工廠模式交付的,在這種模式下,團隊人數越多,功能開發越快。根據我的經驗,按照工廠模式交付軟件是有問題的,你並不能使用這個模式構建好的產品。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"11.我喜歡你,但不會向着你說話"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在我擔任首席技術官的第一年裏,這種情況發生過很多次,如果你和某人工作關係很好,他就希望你能向着他說話。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我意識到,職位越高就越孤獨。在人際關係和工作關係間保持平衡是很困難的。當你和一個人關係好時,你很難在不傷害他的情況下質疑他。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"12.聰明地選擇要參加的戰鬥"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我意識到只有少數問題是值得我解決的。去解決所有的問題,這只是你的美好願望。我在卡米爾·弗爾涅(Camille Fournier)的"},{"type":"link","attrs":{"href":"https:\/\/skamille.medium.com\/opp-other-peoples-problems-d7eb174724ee","title":"","type":null},"content":[{"type":"text","text":"文章中發"}]},{"type":"text","text":"現了這個流程圖,它提供了一個很好的框架來幫助你選擇要參加哪一場戰鬥。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/64\/641d961f4904a65f08d9a539a1c8b935.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"13.持續推進事情"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是作爲領導者應該牢記的重要教訓。你不應該成爲系統中的瓶頸。有兩種情況,你會成爲瓶頸:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"停下系統並試圖一次性修復它。這行不通。最終你會把自己壓得喘不過氣來,並且反對的聲音會越來越多。你必須以一種小確幸的方式來做——朝着你的最終目標,每次只做一小步。你甚至不需要告訴別人你的最終目標。保持小的戰術改變,並牢記大的戰略目標。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"不要太快做出決定。如果你還沒習慣做出的決定會影響到其他人,當你處於這種情況下,你會感到壓力和不知所措。很多人都希望把決定推出去而自己一點都不要碰。作爲領導者,你必須明白不是所有的決定都是一樣的,不做決定也是一種決定。我喜歡傑夫·貝佐斯(Jeff Bezos),他是亞馬遜決策心理模型(mental model on decision making)的創立者。他說,你應該問問自己,這個決定是可逆的還是不可逆的。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有些決定是順序的、不可逆轉的或幾乎不可逆轉的——這是一扇單向的門——這些決定你必須有條理、仔細思考後、緩慢地做出,並經過大量的審議和協商。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你推開門走出去,不喜歡你在另一邊看到的風景,卻無法回到原來的地方。我們稱之爲第一類決策。但很多決定不是這樣的——它們是可變的、可逆的——它們是雙向的門,這是第二類決策。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於第二類決策,如果你的決定不是最好的,你不需要承受太長時間的後果。你可以再次打開門,重新再來。第二類決策應該由高判斷力的個人或小團體迅速做出。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事實證明,我們做出的大多數決定都是可以逆轉的。這樣我們就能快速地做出決定,推動事物向前發展。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"14.你說的話會影響其他人,你需要承擔責任"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不要讓別人強迫你做你不認同的決定。他們之後可能會追究你的責任,並且他們的做法是對的。做出決定需要承擔責任。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/shekhargulati.com\/2021\/01\/03\/being-chief-technology-officer-lessons-learned-in-my-first-year\/"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章