(「一如既往」,我又拖稿了……😅這次是雙月刊稿)
一如既往
最近讀完Morgan Housel的新書《一如既往》(Same As Ever),Morgans在透過大量的閱讀與訪談並參照自己的人生經驗,整理出許多珍貴的原則與常理,而這些常理在百年的過去即是如此,在長遠的將來也會是如此,非常值得大家思考並套用在各種領域與事務上。
我特別喜歡書裡相當精彩的第五章:瘋狂的數字。
你是否覺得這個世界越來越糟糕,發生壞事的日子越來多了?其實不然。Morgan用很基本的數學與機率很清楚地解釋了,跟一百年前比起來這世界發生壞事的機率並沒有特別變高或變低,而是一直都很高。
但為何人們會有一種世界越來越糟的錯覺?這是因為網路與社群媒體的發明,現代的資訊流通相當地廣泛與快速,你幾乎可以知道發生在世界上每個角落的大小事;比起樂觀的事件,悲觀的事件總是能獲得大家的注意力,感受更迫切,而媒體也附和群眾的口味大肆報導。最後就是,人們在心理層面上感受到的強度(這個世界越來越糟)要遠大於事實(數學與機率)所呈現的結果。
從Morgan的書裡可以獲知在生活上長久以來不變的道理,但工作上呢?身為軟體工程人,不論是軟體工程師(Software Engineer),軟體測試工程師(Software Test Engineer),軟體工程主管(Software Engineering Manager),產品經理(Product Manager),專案經理(Project Manager),在軟體工程的世界裡有什麼觀念與技能是一如既往的嗎?有什麼是值得永遠放在心上,只要學過一次後,不論換了什麼業種、領域、技術、規模、都可以套用並見效的經驗嗎?有什麼技能是每個老闆都希望他們的下屬擁有的呢?
軟體工程人的恐懼與憂慮
我在軟體業界打滾近二十年,從一個單純依照規格書(specification)撰寫程式的軟體程式員(Software Programmer)、到進入設計與開發通包的軟體開發工程師(Software Development Engineer)、進化到「設計開發測試發布維護支援」通通自己來的全端軟體開發工程師(Full-Stack Software Development Engineer)、直到最近的軟體工程主管(Software Engineering Manager),在不同的商業領域得學習使用不同的的技術來開發產品,工作上需要兼顧的領域越來越廣,工具與框架也日新月異。
疫情後進入AI新時代,新的工具再度推翻了我們習慣十幾年的軟體開發習慣,人人忙著摸索如何跟AI這個新朋友打交道,看能怎麼好好利用AI加強自己的優勢,深怕一沒跟上AI新時代的腳步自己就會被淘汰。
The only thing that doesn’t change is change itself.
我們不知道將來會有什麼新奇的變化,難以準備什麼以因應變化。但人類這種動物天生就是想要排除不確定性(Uncertainty),因此我們總會想著:究竟有沒有什麼技能是長期不變、永遠重要、放之四海皆通用的?
讓我試著列舉三點……
了解公司的商業模式需求與同領域的業界
沒有商業(Business)的話就不需要技術(Technology)的存在。
如果你在一家商業公司(Commercial Company)工作,一件非常重要的事情就是,充分了解公司的商業模式,獲利方式,產品及其使用者,公司當前所在的發展階段:從初創、轉型、茁壯、成長、擴張、縮編、掙扎到守成,及其未來的展望。
在不少的傳統軟體公司裡,軟體工程師是不需要參與產品方向與需求討論的,因為有產品經理負責嘛!軟體工程師只要確定產品經理有確實地把產品需求規範清楚,最終的產出物(Outcome)長怎麼樣就夠了,剩下的就是軟體工程師的事了!
但在這個2020年代,前述的想法已經過時與不切實際了。為什麼?就以我個人經歷過的軟體工程師之路,公司要求軟體工程師做的事情愈來越多,除了產品經理與專案經理的職責以外,軟體工程師幾乎通包了。對有些公司的資深職等的軟體工程師來說,是必須緊密與產品經理與專案經理一起合作的。當你不深入了解公司的業務時,便無法對他們提出正確的建議,一起做出更好的產品開發決策。
我覺得這也是為何比起一二十年前,現在軟體工程師的薪水大幅提升的原因之一:要懂要做的事情變更多了。
工具日新月異,能幫軟體工程師節省不少的精力與時間,也能大幅提升工作的生產力。那多出來的時間要做什麼?有一類公司會賦予更多的專案讓軟體工程師開發更多更進階的產品與功能(縱向發展),另一類公司則會要求軟體工程師往本份以外的領域擴張,例如產品經理與專案經理的職責(橫向發展)。
怎麼做?
首要便是了解你的(或是公司的)使用者,把自己放進他們的鞋子裡(Put yourself into their shoes),知道他們喜愛與討厭公司產品的什麼部分。唯有清楚了解使用著,你才能做出更正確的產品決策。
再來是擁抱一個產品導向的心態(Product-minded),嘗試與非技術背景的人一起工作,跟他們解釋產品裡的技術觀點,並從業務、產品、使用者的層面來思考並提問,在經過充分討論後才進行技術方面的議論。
最後一點是,先別去管什麼最新酷炫的技術與工具了,專注於解決使用者的問題。使用者們並不在乎這產品背後用了什麼酷炫技術,他們只在乎這產品能不能解決他們的問題。
推動團隊合作
唯有超棒的團隊才能開發出超棒的產品。
用某種角度來看,軟體開發的過程也是一種社交活動,因為各種方向與策略都必須透過與人溝通後才能決定。開發工具只會越來越進步,如何在團隊裡取得共識(alignment)則是越來越重要。除非你是一人團隊,否則你必屬於某個團隊,甚至必須與多個團隊一起開發,而你需要的就是如何讓團隊之間能取得共識,互相配合,順利合作。
怎麼做?
如果你是團隊的主管,首要便是建立正確的期望(Expectation),這樣每個人才會知道自己該如何行動以及自己的考績是如何評估的。適時地給予回饋(Feedback),讓成員知道自己做的好或不好,了解那些行為應該繼續,那些行為應該停止或修正。
最後身為一個主管,你必須以身作則,不能說一套做一套。要知道,團隊成員每天都根據你的行為來修正自己的行為,所以你想從他們身上看到某些行為的話,自己就得先身先士卒展現這些行為。
如果你是團隊的成員,試著在工作以外與其他團隊成員也有一些活動,一起吃飯,一起運動,一起玩遊戲,甚至一起聊天,這些都將會成為工作上的潤滑劑。另外要帶著同理心(Empathy)工作,透過觀察一些徵兆試著預想可能會發生的問題,並主動提供協助來解決這些問題。
別只是專注在自己的事情上,看看有什麼可以幫助整個團隊變得更好,更接近目標的事情,然後捲起你的袖子著手這些事情。試著解決不斷重複出現的問題,這會讓每個人(同事,主管,公司)視你為好的團隊成員,因為你解決了每一個人的問題。
團隊之間的話,首要是建立良好的關係,這是進行各種跨團隊合作事務的基石,會讓你更容易地進行跨團隊合作、提供建議、以及找出一個可行的互助模式。這講的有點模糊,實務上該怎麼做呢?答案是:先伸出你的手,主動協助對方。當你先提出協助並解決對方的問題時,這會自動地在他們的心中替你建立了一個好風評(Reputation)與可信度(Credibility)。
良好的團隊合作關係就是當雙方都展開雙手並互相協助的時候,而你會想要從自己先做起,之後其他人就會效法。另外透明性(Transparency)也很重要,別給對方不受歡迎的驚喜,從初期的規劃階段就邀請對方一起進行,確定方向與結論都是一起經過共同討論的,這樣的話大家便會更加地投入與承諾付出。
協助他人
為何我們需要以團隊的形式進行開發工作?因為大多數的時候,單槍匹馬是沒辦法在有限時間內完成產品開發的,所以我們需要其他人的協助,一起將產品做出來。另外,每個人都是不一樣的個體,每個人的見解與能力也不一樣,我們需要互相協助以彌補自己的不足。與前面的「團隊合作」提到的一樣,幫你的同事,主管,公司解決問題,大家都會愛你。
有了團隊,就會衍生出其他問題與需求,而你,身為團隊的一員,就是要伸出手協助他人。
怎麼做?
能做的事情太多了,這邊就列一些我覺得很重要的:
- 確保團隊是正在做對的事情:把自己當作是一位產品經理,對於產品需求提出疑問並試著了解其背後的所有細節。
- 專注在替別人去除障礙:可以是解答別人的疑問,排除問題與障礙,指引別人到正確的方向或其他可以提供協助的人。
- Review(Code Review, System Review, Document Review):這不用多說了,你如果可以快速做完並提供有用的意見,大家會愛死你的。
- 適時地提供回饋(Feedback):回饋不是只有主管才能給,每個人都可以給他人回饋,你也應該給你的主管回饋。回饋是一門大學問,但它實在太重要,每個人都應該誠實給予他人回饋(但請以尊重對方的態度給出有建設性的回饋),而每個人都該虛心接受來自他人的回饋。
- 對於新進團隊成員,協助他們有一個愉悅並順利的入職過程(Onboarding Experience):這對新人來講非常重要,對於他們在進公司後的成功與否影響很大。
- 撰寫文件:文件,文件,文件!撰寫文件又是另一門大學問,但真的太重要了,先相信我,撰寫文件的好處遠多於壞處,有機會再寫一篇文章介紹(握拳)!
- Mentor(抱歉我真的不喜歡導師這個翻譯,硬要翻的話,引導或是督導可能好一些)其他成員,提供他們在職涯發展上所需要的協助。
- 分享知識與經驗:當你有辦法輕鬆分享知識與經驗時,表示你對此主題已經瞭若指掌,其他人也能得到寶貴的經驗,一整個雙贏的局面!
以上的所作所為都是為了傳承知識與經驗,讓團隊能不間斷地正常運作,不至於因為一兩個成員的離開而嚴重受創,就算主管不在一段時間團隊也能自行運作。同時這樣做也間接建立了一個良好的團隊文化,也讓新成員一加入團隊就會自動遵循並且從中受益。
結語
以上三點是綜合我多方閱讀及個人工作經驗所歸納出來的三點,希望對你有些幫助,也歡迎你提出不同的看法與觀點,一起討論!