程序員做領導需要的一些特質
背景:
我們公司有一位COO,Yahoo過來的,做產品經理出生。下面有2個SVP,一個技術,一個產品經理。技術的SVP性格比較溫和,不強勢,最看重的是make things done。產品經理的SVP性格強勢,是COO從Yahoo招過來的。
網站的流量也不大,一個站點16臺應用服務器就搞定了,不是那種技術要求非常高的公司。
以上的背景就決定了,我們公司文化并不是工程師導向。很多事情,還是PM話語權比較大,公司策略,開發資源調動,主要是由PM來驅動。甚至有時候需要多少開發人員,也是PM那邊直接給建議。
我們出現過的一些問題:
1. 我們有一個頁面,是網站最重要的頁面,因為長期在這個頁面添加各種功能,這個頁面的代碼已經非常復雜,每次做一個小改動,開發人員會不經意間弄壞其他功能,而QA測試跟bug修復的時候都要幾周。
2. 我們有個功能很獨立的組件,作為本地代碼放在我們網站應用里面,于是出現了這個組件跟整個網站的代碼耦合很深,代碼互相牽扯。屢次想花時間把這個組件分離成單獨的web service,但是總是因為business需求的緊迫性,這個項目分不到人手。
3. 諸如此類的,以上種種的技術負債,就導致了我們有時候會在正式環境上出現一些很嚴重的技術問題,或者有一些簡單的需求卻花費了巨大的開發代價。而最終為這些問題買單的,還是技術部門。
4. 有些PM會給一些所謂的“完成”的需求文檔,或者以我們要agile為借口寫一些不夠詳細的文檔。在開發過程中,開發人員花了很大的精力來討論這些需求,導致項目不斷拖延,開發人員因為工期拖長,出現人員變更,而新來的開發人員又帶來了更多的bug,于是更加拖延了項目,結果就是,項目合作很不愉快。
去年美國那邊來了一位技術副總,在Oracle跟Collabnet呆過,我跟他一同負責Platform的開發工作。經過大半年的合作,經??梢栽诟恼務撝?,感受到他一些對我們很有用的想法:
1. 技術需要marketing
我的部門除了有Platform開發的團隊,還有一個團隊是負責架構的,跟Platform不一樣的是,架構要做的項目都是技術部門自己催生出來的,所以經常PM端,COO都不太了解我們做的項目。不知道為什么做這個項目,有什么好處。我相信在一個工程師驅動的公司,這樣的問題并不是大問題。但是問題是我們是業務型公司。
比如我們最近在做的一個組件化的項目。
于是有一回,這個VP在跟我打電話的時候,談到這個組件化項目,他說,”XXX,你知道,你們現在在做的這個組件化項目,很危險!“
我說,”怎么講?“
他說,”你覺得XXX(Platform的PM,是個VP)知道你們在做什么嗎?“
我說,”他應該知道一些,我有跟他說過?!?/p>
他又說,”你覺得XXXX(我們的COO)知道你們在做什么嗎?“
我說,”他應該不清楚,這個太技術了?!?/p>
他又說,”那你覺得XXXX(PM的SVP)知道你們在做什么嗎?“
我說,”他應該也不清楚?!?/p>
他說,”那如果你這項目出現一些問題需要幫助的時候,或者說需要resource的時候,你覺得他們會幫助你嗎?“
我說,”看來不會?!?我心里想,肯定不會,現在就出現問題了。)
他說,”如果有其他項目需要人,你覺得他們會第一個從你這個項目中抽調人手,還是從其他他們了解的項目抽調人手。如果現在他們發現開發部門的開發資源不足,他們第一個challenge的項目是哪個?“
我沉默。
他又接著說,“我們都是XXXXX(技術的SVP)的人沒錯,但是說白了還是XXXX(COO)的人,你現在拿COO的人,在做一些他不懂你們在搞什么的事情,你覺得這樣是不是很危險?”
我說,“嗯?!?/p>
他說,“我可以幫你。首先,你應該以PM能夠懂的語言,解釋這個項目能給他們帶來的好處。你說說,你這個項目可以帶來什么好處?”
我倆Balabalabala了一陣子。
(用XXXX代人名太痛苦了,之后我還是直接用職位吧。)
然后他說,“所以你這個項目,Front End的PM VP,Platform的PM VP都可以從中帶來這個益處對不對?“
我說,”是的?!?/p>
他說,”所以你現在不用他們的人手,卻在做對他們有好處的項目,對于這樣的好事,他們歡迎還來不及呢,對不對?“
他又說,“如果COO知道了,哇,原來架構組還做一件對公司這么有好處的事情,那很好啊,這個組很棒!”
他繼續說,”可是,現在沒有一個人知道這件事情,所以,很明顯,你們做的marketing不夠?!?/p>
他說的很對。只要稍微懂技術的人都知道架構的重要性,但是以前我們一直沒有固定的人員去做我們架構組自己想改進的東西,直到去年,我才說服我們技術的SVP,騰出固定的人員做架構自己的項目。而如果我們有人能夠為我們架構的項目做好marketing的話,我相信業務負責人會主動為我們增加改進架構的resource,支持我們的項目而不是像目前這樣睜一只眼閉一只眼的不管不問。而且也不會出現,個別PM以他一知半解的技術知識,把我們網站的架構錯誤的描述給公司的業務負責人。
2. 處理技術負債
我們技術部門跟PM有約定,在制定roadmap的時候,會給出20%的時間解決一些技術負債。但是我們一直沒有一個合理的流程來使用這20%。
最近技術部門在想辦法促成一件事情,就是從每個產品線的開發部門里面抽出一些比較強的開發人員,組成一個團隊,專門用來處理技術負債。這可能是一種變相的使用20%的方法。但是這件事情一直不好推進,因為從業務端來說,這個團隊做的事情對他們不透明。
而這位VP的做法是這樣子的。把處理技術負債的項目加到PM的roadmap進去。
(我們的Roadmap其實就是每個產品線的年度工作計劃,什么時間做什么項目。)
我們以20%的時間,算出每一年用來解決這些技術負債的人周。然后根據這些總人周,列出用這些人周可以完成的項目再制定計劃。這其實跟PM要做的項目很類似,從什么時間到什么時間,花多少人,做哪些事。但是我們在提議這些重構項目時,要清清楚楚的以PM能夠理解的語言寫出我們具體要做什么,這個項目做了有什么好處。
這個方法,跟前者我們提議的方法比起來,從開發管理來看,更透明,也更可控。也更容易讓業務端接受。
3. 約定大家都接受的規則,然后大家嚴格按照規則來做事
比如說在項目管理里面,他會先說好,我們用SCRUM的方式來跑,大家同意了。于是就嚴格的按照SCRUM的方式來跑。當在一些問題上有分歧的時候,就參照SCRUM流程來解決。
我們在準備這個spirit的時候,PM必須要提前準備好足夠的backlog給大家看。這樣我們就不用再從一個很粗略的很大的PRD去痛苦的找出開發人員要做的需求。
每個backlog都要有acceptance criteria。還要有對應到PRD的地方。這樣開發人員就可以直接去了解他要做的任務。
開發人員在把功能交付給QA測試的時候,必須運行QA提供的一些基本測試。這樣就防止了開發人員交付沒完成的功能。
這樣大家都有了清楚的,自己要達到的標準,做得好,做不好,也很清楚。
最近他還做了一件讓我很贊成的事:
我們很多項目都會有一些所謂的consultor的角色,他們并不做具體的事情,所以很難界定他們做得好不好。但是在說明每個project花費的時間的時候,他們又說有30%之類的時間在這個項目上。我注重實際的產出,所以我不太喜歡這樣子光說不做的角色。表面上很忙,但是具體對項目有多少的幫助,又很難說清。
于是我們在談論某個“consultor”要做什么的時候,他會問清楚,這一位,扮演的是雞還是豬的角色。(不懂豬或雞的,請去了解SCRUM流程)如果是豬,那就是具體的開發人員。如果是雞,卻又找不出他是雞這個角色的理由。于是最終界定,他是豬的角色,也就是要參與具體的開發。我相信,這樣就避免了前者我說的那種不喜歡的角色。
我經常在想,他為什么可以把很多事情推動起來,而且讓大家都認可,即使他有時候是贊同了一些人,而反對了另一些人,但是所有人還是都對他信服的。
我們再把上面一條一條的回顧。
1. 我們在跟業務溝通的時候,用擴展性,穩定性,易維護性,但是這不是雙方都能有個直觀印象的語言。做了對公司有什么好處,不做對公司有什么壞處,這才是雙方都有直觀印象的語言。
2. 如何處理技術負債。成立一個專門的小組去處理負債,這并不是一個雙方都能理解的做計劃的方式。Roadmap才是雙方都有個直觀印象并且都認可的做年度計劃的方式。
3. 需求清不清楚,這是個很不直觀的判斷,每個人判別的方式不一樣,得出的結論也不一樣,但是有沒有acceptance criteria就很明了;
開發人員做到什么程度才算完成呢?跑完QA提供的基本測試才算;
SCRUM里面有個Consultor要做什么?人們可以很容易的說,他要幫助什么……,推進什么……解決什么……,可以說出一堆一堆。直接問一下,是雞?還是豬的角色?非常的清楚明了。
這就是我想說明的這位VP的特質,不管跟什么人溝通,CEO,COO,還是PM,開發人員,他都是以雙方可以有直觀印象的語言來做溝通,他想知道你的意見的時候,提出的問題,盡可能的,不是給你出主觀題,而是選擇題。而要達到這個目標,我相信他在問每一個問題,每一次談話之前,都會先把思路理得井井有條。
VIA:難得簡單
- 目前還沒評論,等你發揮!