正當我在麥當勞吃著嫩煎雞腿堡配著無糖綠邊看漫畫「關於我轉生變成史萊姆這檔事」時,突然耳朵不由自主的補捉到了後方不遠處傳來的一段對話
小明:「唉~我真搞不懂 PM 在幹嘛,整天只會出張嘴,啥都不管,死都死其它人」
小華:「總會安排需求跟時程管理吧?」
小明:「需求就是客戶說的照單全收,問為什麼要這功能不清楚,問使用的情境也說不明白;時程就是說下星期要給,要大家儘量趕;唉,常常連規格書都沒有」
小華:「疑?那老闆不管的嗎?」
小明:「老闆只聽他的啊,還幫他說話呢,說都他一個人在承擔客戶的壓力,要多幫忙他」
小華:「有個狀況外的老闆當他靠山,那我想沒救了」
小明:「唉,別提了,再講下去我都要哭了」
聽完對話,感覺就是一個無能的 PM 加上一個可憐的工程師,面對這種情況,我想身為工程師是無能為力的。反正是別人的事,正當準備將注意力拉回手邊的漫畫時,突然靈光一閃,想到了程式設計原則,下面為了方便說明,給對話中的 PM 起了小王這個名字。
從對話中分析,小王有六個功能
小明有一個功能
畫成 UML 是這個樣子
基於單一責任原則,我們可以把面對客戶的部份跟面對專案的部份分開,小王被拆成小王1跟小王2
一個人怎麼可能會變成兩個?這明顯不可能。幸好,我們還有接口隔離原則,將功能從人上抽離出來建立角色,小王1是面對專案的部份,角色為專案經理,小王2是面對客戶的部份,角色為業務,小明的角色是工程師
好的,就算拆解完 UML 圖,好棒好厲害,那對這件事情有什麼幫助?
因為上面這張圖是理想中的畫面,回頭看對話,其實會發現小王對於 PM 這個角色的功能實現幾乎沒有
看到這邊,也許你會發現,原來小王根本不是 PM 啊!這是在程式設計中很常發現的壞味道,一個類別做的事情跟名稱不符,這時候就會需要進行最簡單但重要的重構,rename
不過這還不是我想表達的重點。分析完畢後,我的疑問是,小明真的無能為力嗎?
本文同步發表在部落格 利用程式設計原則解釋職場困境 - Jian-Ching 記事本