架構師和專案經理的基本職責問題
本文給新上崗的部分團隊的模組架構師和專案經理提供一些實踐指導。
大部分模組架構師和專案經理都是從開發團隊的開發人員轉崗的,甚至在剛開始的時候,他們都是兼職的,同時負責架構和開發,或者同時負責專案管理和開發。這導致很多新人總會把過去的工作習慣帶到新的工作崗位上,這樣是做不好這些工作的。
架構師和專案經理都是做“未來”工作,開發工程師做的是“現在”的工作。這是兩個獨立的工作,開發工程師的工作是“填坑”:少了一個功能,把這個功能做出來;發現一個Bug,把Bug修復;效能達不到,把它提升上來……這些問題都在眼前,問題不一定容易解決,但出不出問題很容易判斷。
但架構師的工作不是這樣的,架構師的工作是未來。某個特性現在根本沒有人用,架構師要求做出來,做出來了,還是沒有人用,但後面有人用,如果現在不做,到後面想做也做不了了(沒有留下設計餘地),這個架構考量就成功了。
想用證明開發工程師的作用的方法來證明架構師的作用是不行的!架構師的工作是挖坑,不是填坑。在沒有坑的時候挖出(未來必然會發生的)坑來。系統啟動,偶爾出現一次coredump,開發工程師在心理上會有意忽略它,因為大部分時候這個東西不影響使用。但架構師需要敏銳地捕獲它,推演它背後意味著什麼,會要求團隊花大力氣把這個Bug挖出來,因為開發階段1%可能性的Bug,在上線的時候它的可能性就可能是100%。
我並非說架構師的工作就是這種把所有問題都要上升,上綱上線。這是個綜合考量問題。我前面這個例子只是個例子。它說明架構師的工作為什麼和普通工程師不一樣。所以,架構師無法用表象來考評,只會上綱上線這個白痴都能幹,不需要架構師。架構師需要知道什麼時候需要上綱上線。所以,如果一個架構師天天都在輸出,填了團隊一個又一個的坑,但從來不挖坑,這個架構師肯定出問題了。但反過來,如果我們考評架構師挖了多少坑,這個架構師就算天天挖坑,他也肯定是個失敗的架構師。
專案經理同理。架構師考量的是軟體的發展問題,他眼中盯著的是那個軟體的未來。專案經理看的是另一個維度,他看“計劃”和“投資”的發展。怎麼時間應該拿到什麼資源,什麼任務和人力應該開始動作,這個動作不能按期發出,後面的行為就要發生改變。所以,專案經理也是挖坑的,如果專案經理也是每天都說:“今天又完成了XX”,“這個月又完成了XX”。這個專案經理肯定出問題了。專案經理不是給團隊報功的,專案經理是發現團隊現在這樣發展下去,在計劃和投資上會掉哪個坑裡的。
所以,開發工程師天然會掩蓋問題,會向架構師和專案經理報告“坑已填平”的。而架構師和專案經理天然會暴露問題,向團隊報告:我們這樣下去,會掉XX坑裡。
現實中,通常資深的工程師才會轉崗為架構師和專案經理。所以,人們很容易把架構師和專案經理看做是“領導”和“彙報物件”。但從團隊定義來說,架構師、專案經理只是團隊中兩個完成獨立工作的角色。在精英團隊中,基本上這些角色的地位是完全平等的。他們好比一群在同一條船上的人,有人負責看路,有人負責划槳,缺了誰都不行。所以,架構師和專案經理不是開發工程師的“升級”,但在很多情況下,他們值得尊敬,因為如果他們正確履行了他們的職責,那麼他們就是放棄了“求禮”的機會(“這個程式碼是我寫的”),為團隊做出了貢獻。
所以,初上崗的架構師和專案經理們,你們首先要準備好犧牲,而不是把這個作為一種榮耀。但這個世界,都是以其無私,所以成其私的。你放棄寫程式碼的禮,收穫的是另一層邏輯上的經驗:這個系統這樣搭建,它的效果將會是這樣的。不要收益都放在你面前了,卻棄如敝履。