世界越來越小,變化越來越快。企業環境更是如此
從2015年底的弊案開始,東芝一連串的裁員新聞便在網路上出現(參考這裡,這裡)。最近,由於有要徵約聘員工,通常是很難在約聘的職位上找到有經驗的軟體工程師,通常也很願意找剛畢業雖然能力不足但很願意學習的年輕人。可是,這位林先生卻是個例外。他是自願前來面試約聘職缺,而且有十幾年工作經驗的專案經理。經過詳談才知道,他也是東芝海外大幅裁員的其中一員。過往,林先生充足的筆記型電腦專案管理經驗,讓他幾乎沒有其他的資訊科技能力,對於軟體開發自然也是完全沒有經驗。環境的變動,不是他的錯,但沒有先針對可能變動而準備,會讓他失去工作之後的6個月內仍然難以找到足夠幫他解決房貸問題的方式。是不是雇用林先生?還不一定。每個人都應該針對不預期的組織變動而有因應準備,這才是重點。
在一個超過150人的組織裡,一般的員工其實很難對企業環境的變化做出正確的因應。更直接地說,組織重組(re-org)目的各有不同,但一定會順帶調整人員,而作為資訊科技的組織的一員,在重組時很可能會受到不預期的影響。
可能發生的最糟糕的情況是「被汰弱」,其次的情況是「改變工作」,最佳情況是「被留強」。
而作為資訊人員,軟體研發人員,除了隨波逐流,隨遇而安之外,對於組織的變動,能夠有正確的因應作法會是最好不過。
變動因素
組織變動的因素很多,而絕大部份通常都非單一個人所能控制(除非你是CEO)。
好的情況有:獲利太多,而跨大經營範圍;獲得額外投資;併購其他企業。
壞的情況像是:賠錢要砍部門;被別人併購;移轉工作地點到低成本的地方。
不好不壞的情況也很多:改變經營策略;將寶貴的人力資源移到別的地方;停掉某些產品研發等等;組織汰弱留強,調整人力品質。
對個人影響
組織變化對個人的真正重點在於「因組織變動產生的行為」,當然不外乎以下四項:
離開組織(資遣/開除/離職):無論是被迫,自願,或者被自願。
執行讓員工離開團隊的任務(執行資遣/開除):通常是中低主管的任務,也許是會執行讓人離開組織的任務,也許是更換工作內容以及更換部門。無論是被迫還是自願。
改變工作內容環境:做其他專案,升遷,換到其他部門,換老闆,更換工作地點,改變工作時間等等。
改變工作報酬:加薪,減薪,更改薪資計算方式,更改其他相關福利等等。
如果不是CXO,幾乎不太可能在很早之前,事先知道組織變動。不過,對於資訊的技術人員(程式設計師之類),即便是一般員工也能有比「隨波逐流」更好的因應作法:
做法一:事先因應。
首先,所謂事先因應,並不是事先知道各種變動因素發生。通常你知道變動因素發生的時候,一定已經是「太晚了」。
事先因應,指的是因應「黑天鵝事件」,也就是試圖因應未曾發生過的,但是一旦發生,會有劇烈變化的事情。但是,既然是黑天鵝事件,就不可能事先知道事件的種類,發生的原因,發生的時間地點。
事先因應指的是,培養自己,因應「未知」的事件。
作為資訊科技技術人員,相較於其他行業,培養自己比較簡單。剛出社會的新鮮人,當然就繼續學習新的技術,不管是程式語言,系統工具,開發流程,都有極大的學習空間。
稍微麻煩一點的是,工作7-10年左右,在可能不上不下的階段。這個階段,必須要先確實「認知」自己對現在組織的價值,並且透過這樣的認知,
乍聽之下很抽象。例如,你現在可能是軟體公司的技術小組長,帶領3-4同事進行軟體開發,這時候顯而易見的有兩個未來的選擇,(1) 你可以往技術方向前進,未來成為架構師(architect)或者技術長。這時候,培養優勢就在於,應該有意識的讓自己的知識範圍,隨著時間越擴展越大,並且不會僅侷限在這個組織之內。(2)你也可以朝向專業經理人前進。未來成為帶人的主管。這時候,培育的優勢方向在於:必須要同時兼備技術能力和判斷決策的能力。判斷決策能力的自我培養,必須要是有意識地進行。
找到自己的價值,發揮優勢,培育優勢。並且試圖擴展的優勢,讓它不僅限定在特定時段,特定組織,特定產業,甚至特定國家,。
做法二:創造選項。
至少在台灣,絕大部份的人,在任何事情上都有「選擇」。
有些選項,顯而易見。例如,有個選項是:覺得不喜歡組織的某些事情,就「選擇」離職了。
有些選項,因為認知偏誤,不容易看見。例如,有個選項可能是:覺得不喜歡組織的某些事情,就「選擇」去改變這個事情。
大部份的人,都可以輕易看出既有選項。但是,能「創造」選項的,或者看出非既有選項的。其實不多。
軟體技術上,能創造選項的例子比較多。例如,即便到今天為止,在很多企業仍有winXP的存在,但是他所使用的IE(8)很老舊。如果你的網站應用程式,一定要給這些企業使用,擺明著選項有兩種,一個是苦幹實幹,讓網站遇到IE8的時候,用比較老舊的javascript library,另一種是說服企業升級winXP。不過,只要稍微想過,很多技術人員都可以「創造」其他選項。例如部署新的firefox/chrome到winXP上。
然而,非技術的選項,能「創造」的可能性變少很多。但其實,這僅是受限於自己的目標錯置,認知偏誤,或者錯覺。
以組織變動的情況而言。也許你是「被自願」離職的員工,似乎也只有自願離開一途,但如果真的很不想被自願離開,首先需要知道你不想離開的真正目的,和你真正想要達到的目標。例如:或許是因為家庭因素,你需要穩定的收入,而非真的喜歡這裡;或許是你喜歡這個工作環境;或許是你一時之間找不到其他工作。原因可能有很多,但如果你的目標沒先想清楚,能創造的選項自然受限。
如果是因為家庭因素,你需要穩定的收入,而並非真正喜歡這個組織。你的目標應該是「在短時間能創造有穩定收入」,對於有技術背景的人,這並不難達到。難達到的是:「短時間創造極高收入」
如果是你一時找不到其他更好的工作。你需要「創造」找到更好工作的機遇。到linkedin上認識headhunter,加入open source社團,到社福機構提供技術能力當義工...等等都是可創造選項的機會。
做法三:根據事實。執行。
執行選項,特別是執行不那麼容易的選項,需要克服很多心理上的障礙。
特別是以非技術選項而言。突破個人心理上的障礙,執行最適合的選項是知易行難。
遺憾的是,沒有人能夠代替你執行。因此在此只能提出幾個參考點,協助克服認知與心理障礙。
(1) 只有自己才能負責自己的職業生涯。
(2) 軟體技術人員,在技術上都有過度自信的傾向。
(3) 沒有人剛生下來的時候是會寫程式的。
(4) 學習特定的軟體工具,平台,程式語言很重要。但要注意的是,不能把雞蛋放在同一個籃子裡
(5) 組織領導者(主管)的優劣與否的判斷很難。不過,試圖讓所有相關人等都滿意,大家歡喜的領導者,反而容易引導至糟糕的結果。
在不到十歲的年紀,有一次流感重症去看醫生。那時候還沒有健保,醫生通常還是會跟家長講一下治療方式可能的價格。當然,如果打一針可以好的比較快的話,多花個幾百塊可能也是值得的。但是!小時候的我很害怕打針。也許恐懼的神情被醫生發現了,他就好意地問『有比較大筒的針跟比較小筒的針,看你要打哪一種?』小時候的我,毫不猶豫的當然回答『小的針。』。結果,最後護士是拿出「兩隻」小的針筒,左右兩邊各打一針。
這個慘痛的經驗,後來讓我學習到,要完整考慮「問題」,至少要從三個方向思考:
1.問題可能不能代表真正的問題
無論是一般工作進行,還是特定專案,通常都有各式各樣的「問題」產生。有些可能是單純的疑問,例如「這個功能什麼時候可以完成?」。有些看起來比較複雜,例如「帳號如果被管理者停用,則正在登入使用中的session是否要立刻中斷?」
單純的問題,可能要考慮的更多。以「這個功能什麼時候可以完成?」為例。可以循用5 Whys 五個為什麼,來了解看似單純問題的真正本質,
例如:
「這功能完成的時間已經在系統有紀錄,為什麼要額外詢問?」--- 原詢問者回答:「只是想要知道有沒有意外」
「為什麼會想要知道有沒有意外?」 --- 原詢問者回答:「之前某高層詢問專案進度,我覺得這個功能因為比較複雜,不知道會不會有風險」
「為什麼高層會詢問專案進度?」 --- 原詢問者回答:「因為高層覺得專案預計完成時間太晚,想要用一些方式提早」
「為什麼會覺得預計完成時間太晚?想要哪種方式提早?」---原詢問者回答:「我也不知道,不要再問了!!」
2. 真正的問題很難找到
事實與真相就像船頭和船尾,首先會看到船頭,然後根據整個情況有多大多複雜,才會在最後看到船尾。
要找到真正的答案,必須要先找到真正的問題。
在許多軟體專案中,經常會有專案管理者以「人力不足」作為問題並試圖解決。但是,這個問題在絕大部份的軟體專案中,根本不真正的問題。
真正的問題也許是:
(a) 許多專案成員另有其他任務,導致投入專案的時間太少
(b) 專案需求不明朗,時常增刪變更,導致時間浪費
(c) 「人才」不足,而非「人力」不足,像是:
(C-1) 專案管理者沒有看透技術關鍵的能力
(C-2) 專案成員訓練不夠
(C-3) ...其他...
而每一個問題, 背後又隱藏其他的問題。絕大部份的專案中,問題看似很多,但最重要的可能只有幾個。
專案經理的重要任務在於:決定真正重要的問題(忽略不重要的問題),並且優先解決最重要的問題。
3. 真正的問題才能找到真正的答案
要找到真正的答案,必須要先找到真正的問題。
一旦找到真正的問題,等於已經產生一半的答案。不過,另一半的答案可能也不見得很簡單。
假設認為真正的問題是「專案需求不明朗,時常增刪變更」,答案的選擇可能有:
(a) 採取Scrum開發模式,確保每個Sprint的需求不會再改變,讓真正的專案擁有者能參與每階段的決定
(b) 暫停所有開發活動,在沒有完成細部設計與需求規格書之前,先不開始開發
(c) 再花時間去找到為什麼專案需求不明朗的背後原因,
最終,每一個成員,需要為自己找到最適切的真正答案。
隨波逐流,最終只能忍受左右兩邊各一針的結果。
軟體專案的Scrum的一次sprint之後,照例的檢討會議(retrospective)中,張經理收集了成員的意見,經過投票整理與排序,發現"不夠專注在重點上"是成員們最希望改善的地方。於是,張經理發表他的見解:「看起來大家可能是覺得瑣碎的事情太多,沒辦法專注於工作,這次新的sprint開始,大家試著把心思專注在重要的事情上」,接下來,張經理開始順道交代其他事情:「呃,上次要給法務部門的3rd party版權清單,老馮你準備一下;明天我們要定個下午茶,小陳你有空的時候幫個忙...」。....於是乎,最希望改善的地方就從未改善過。
Pareto Principle,又稱為80/20法則,指的是80%的結果來自20%的原因。這個法則是取名字義大利的經濟學家帕雷托。他觀察到1906年義大利的80%總資產屬於20%的人口。而此一情況被學者們,在其他領域也觀察到重複類似情形,因此被簡約成此法則。
80/20法則中的數字,有時候,會和實際領域不同而有所改變。例如,絕大部份的軟體,其90%的執行期間,執行的是其中10%的程式碼(參見這裡)。
在軟體專案管理中,能掌握80/20法則,等於是掌握80%的成功。
以程式撰寫為例:最重要的10%程式碼,關係到軟體運作的90%時間,掌握最重要的10%的效率與品質,就掌握系統的本身。當然,80%的bug來自於20%的程式碼。(參考這裡)
以測試為例:1000個測試案例(test case)如果能有效掌握哪20%的測試案例可以測出80%的潛在問題(bug),就可以有效縮小測試。
以人員管理為例:在有一定人數的情況下,30%的程式設計師完成70%的主要功能。而有追蹤問題(bug)的來源時,80%的問題來自20%的模組撰寫者。
因此,掌握並改善20%重點,是任何專案的成功關鍵因素。
不過,這件事情知易行難。以反面來看,作為專案管理人,如果整個專案過程的每天都忙得焦頭爛額,隨時都有不同的人來進行不同的會議,螢幕旁邊有數十張待辦的便利貼。這很明顯的表示你一定沒有掌握到20%的重點,而你雖然很努力的想要完成任務,但並沒有朝向正確的努力方向。更慘的是,假如你認為這種忙碌可以顯示自己在組織的價值與貢獻,這種想法做為專案的領導者只會害死大家。
每個專案都是獨一無二,因此每個專案的重點20%都有所不同。然而,掌握關鍵的「20%」倒是有三個共同切入點。
1. 目的 - 真正目的
軟體專案的真正目的各有不同:有些是新產品開發,有些是既有產品增加新功能,有些是客製化專案。大部份的情況下,其目的通常不是「技術目標」,而是「達成效果」。
例如,網路商店需要開發mobile app,其目的鐵定不是為了要有一個Android APP或是iOS APP,而可能是要讓客戶在智慧型手機上也能購物。但也有有可能目的是要讓客戶在智慧型手機上容易查詢訂單。當然也有可能兩者兼具。但無論如何,技術目標:也就是有Android/iOS APP,與達成效果通常有相關,但專案管理者必須清楚兩者的不同:
達成效果是勢在必行不可或缺,但技術目標永遠都有其他選項。
網路商店不見得需要有APP才能讓使用者在智慧型手機上購物,可以使用符合智慧型手機規格的網站(所謂的響應式設計),讓使用者利用手機瀏覽器進行購物,也可以透過簡訊或者撥打電話的方式購物,開發APP只是其中一個選項而已。
掌握真正目標之後,列出這個目標中的所有使用情境(user story)中最重要的20~40%的功能,而軟體開發的重點就放在這20~40%重要功能。集中力量完成最重要的20%,才不會「先」耗費力氣在無謂的事情上,「最後」才做真正重要的事情。
2. 時間 - 不倒退的沈默成本
時間是不會倒退的(參考這裡)。軟體專案裡的時間成本一旦投入,都屬於不會退還的沈默成本。也因為時間無法退回,一旦投入就是投入。因此,必須要確定「先」運用時間在重要的事情上。
80/20法則的重點在於:計劃先運用「未來的時間」,在有效果的事情上以先達到80%的產出。
舉例來說,一個程式設計師,在早上抵達辦公室,打開電腦的第一件事情,應該試圖確認「今天什麼事情對我最重要」,而一個開發團隊,每天第一件事情應該是「今天團隊完成什麼事情最重要」。因此,典型的scrum都會在一早展開standup meeting(快速會議),以15分鐘的簡單開場讓專案團隊確保先投入在最需要進行的事情。
這也是一個聽起來簡單,執行起來並不容易的概念。有很多情況,團隊成員並未「徹底」實踐快速會議時的精神。
例如:某甲陳述:今天會開始開發模組A,預計今天會完成,而這也是他今天最重要的事情。然而某甲可能無意識地忽略掉昨天他的功能B的程式碼尚未簽入版本控制系統,因此實際上會議結束,其實他花了一早上在簽入程式碼,並且執行合併/建構系統。某甲並非不應該完成昨天尚未完成的事情,而是他對於「未來即將使用的時間」沒有腳踏實地的認知。
80/20法則運用在專案的時間管理上,最重要的精神在於「腳踏實地」,並且「確實展現事實」-- 缺乏這兩者,會讓80/20法則淪為壓榨程式設計師的幫兇。
3. 激勵因素與保健因素
激勵保健理論(參考這裡),將影響人工作時心裡的滿意度因素分為兩類:激勵因素與保健因素。簡單的說,保健因素是「沒有會死,但是有也不會很高興的因素」,激勵因素是指「沒有的話不會怎樣,但有的話會很高興」。
激勵與保健理論,乃是在軟體專案管理中,80/20法則運用的最容易忽略的一環。特別是在兩個面向上:(a)軟體團隊經營
(b) 技術決策
(a)軟體團隊經營:
保健因素(薪水,電腦設備,工作環境):無論加碼到什麼程度,對程式設計師的績效成長極端有限,然而一旦失去基本下限 - 例如減薪,則其他的激勵方式會突然失效。軟體專案負責人,應該在一開始,就先確保:保健因素是成員可以接受的。爾後專案執行過程,不要特別關注它即可。
激勵因素(個人成長,價值觀,成就感):激勵因素才是大部份軟體開發專案成員「願意保持工作熱誠」的真正原因。負責人或者領導者,應該將團隊經營的80%重點時間放在保持激勵因素。然而每個人的激勵因素皆有不同,因此了解團隊成員個別的「真正需求」,才是需要花時間的地方。
舉例來說,有些團隊成員可能會抱怨沒有雙螢幕,雙螢幕對於撰寫程式的確很重要,專案經理想辦法弄給他雙螢幕之後,千萬不要以為這樣就會讓他心甘情願賣命。雙螢幕只是保健因素,是必要取得,但不是重點。專案領導者在團隊經營上,應該花20%的時間快速搞定保健因素,而後,花80%的時間確保激勵因素的存在。
缺乏激勵因素的團隊成員,並不代表一定會離職,也不一定代表任務不能完成。一個能力很強的人,可能因為暫時沒有其他選項而在現在的位子上滿足最低限度貢獻。這樣成員,反而成為一個潛在的問題,他隨時有可能因為任何短暫膚淺的因素而離開,更糟的是不離開而成為團隊困擾。而這種情況並非是該團隊成員的問題,而是團隊領導者,沒有辦法找到並維持適合的激勵因素。
(b)技術決策:
既然是軟體開發專案,必然會歷經各種技術決策。80/20法則一定是技術決策的主要運用重點。
以功能而言,如果有A功能與B功能在短時間之內,只能選擇完成一個。則技術決策應該從幾個方向考量:
方向一:中大型軟體專案一定有20%的重要功能,會滿足80%的使用者需求。哪一個功能屬於這類。
方向二:如果A與B都滿足方向一,則考慮哪一個功能會直接滿足「專案目的」。
方向三:如果A與B都滿足方向一與二,則考慮兩者哪一個對於此專案是屬於保健功能(沒有會死的功能),哪一個屬於激勵功能(有的話會很高興的功能)。並且考慮專案目的,是屬於維護且保守的專案,還是開創性的新專案。開創性的專案自然優先考慮激勵功能;而維護型或保守的專案,當然要先考慮保健功能。
80/20法則的有效運用是判斷一個優秀的專案領導人的條件。以反面例子而言:有很多15年以上專案管理經驗的所謂專案經理,他所有的經驗可能都在於無謂的忙碌與焦頭爛額中度過,這樣的15年和1年沒有什麼不同。如果你是這樣的專案經理,為了團隊好,或許應該考慮轉換適合的工作跑道。