iT邦幫忙

2021 iThome 鐵人賽

DAY 28
2
Modern Web

Javascript 從寫對到寫好系列 第 28

Day 28 - Clean Coder 時程與承諾

前言

今天會接續著昨天的主題,來聊聊 The Clean Coder 的另一個主題。

在我過去的工作經驗中,寫過的程式性質各有不同,有充滿前端互動UI邏輯的(著重在 DOM 操作),有透過資料、狀態驅動的(著重在管理狀態),也寫過後端,一點畫面都沒有的(?),因此我的技能樹也一直亂長。

但其中不管哪一份工作,都會有一個靈魂人物 - PM,會不斷幫助我鍛鍊,一個到哪都用得上的技能。

預估時程

對於很多 developer (以下簡稱 RD)來說,經常都會有被 PM 要求預估時程的經驗。

因為公司只要開著,每天都在燒錢,晚一天交出程式,公司就晚一天從客戶手上賺到錢,意味著多燒一天錢。

尤其是新創公司,不像大公司可能有其它產品線,可以來養這個 team,新創完全就是只能靠自己。

而做為一個 PM,一定是被上層第一個追問狀況的人,所以當然就再往下詢問 RD 時程囉!

真相先行

不是所有 PM 都是從工程背景出身,甚至可以說滿大多數都不是,若真的遇上能溝通又是工程起家的 PM,請好好珍惜。

因此,最了解程式的 RD,是有責任要在預估時程的時候,跟 PM 報告「真相」的。

「真相」就是:「客觀中立的時程預估」、「預估背後的原因」

不樂觀、不悲觀,預估一個以目前的能力,最有可能的完成時間,以及為什麼需要這麼多時間,背後有哪些困難與阻礙

尤其當 deadline 愈緊,PM 會愈著急,畢竟如果沒有如期交付,要直接面對客戶,被噴一嘴口水的人不是 RD,而是 PM。

所以在溝通時程的時候,往往會帶一絲緊張,但需要切記,愈是緊急,就愈是要將真相說清楚,踩住立場

==== Round 1 ====

PM: 明天就是 deadline 要交付給客戶了,你的程式還要多久!?
RD: 我預估還要 2 天的時間,因為現在這個 bug 牽涉到系統底層的架構,也就是說,如果沒處理好,很有可能會造成其它本來正常的東西壞掉,所以我需要時間謹慎處理。

==== Round 2 ====

PM: (瞪大眼睛)兩天!客戶當初說明天就要看到成果,我們也答應過他了,你知道這個客戶對我們來說非常重要嗎!? 我們真的丟不起這個客戶欸!有機會一天嗎拜託!
RD: 我理解,但如果因此趕工,很有可能會導致其它客戶受到影響,到時候我們反而要花更多心力去彌補,我想這也不是我們要的結果。

==== Round 3 ====

PM: 唉!真的沒辦法?(用眼角餘光偷瞄你)
RD: 真的沒辦法。(堅定)

==== FINAL ====

PM: 好吧,那我打通電話跟明天的客戶說一聲,麻煩你立刻開始開發吧!

你的 PM 不一定這麼快就結束,可能還會來回個 4、5 round

PM 的視角

但要再次聲明,不是 PM 天生愛壓榨人,所以才逼 RD 加班擠出來,而是因為 PM 負責將產品交付給客戶,因此對於客戶而言,PM 就相當於是這間公司的代表

若是晚一天交付,透露出這間公司不重視承諾
若是交付有瑕疵的產品,透露出這間公司沒有品質把關

因此當我們也站在 PM 的視角去看這件事,一切就非常合理了,甚至 PM 是非常為公司著想的。

總之可以從上面的對話中看到,由於 PM 通常不會了解程式的細節,因此要預估出時程的話,當然就是 RD 的責任囉!如果 RD 沒有堅守住立場,強行將時程「樂觀化」,很容易就踏入「一坑補完再一坑,柳暗花明又一坑」的輪迴中。

常見的「承諾系」辭彙

  • 今天主要執行 A 任務,希望下班前能完成
  • 嗯嗯你這個提議很不錯欸,我們下次可以來做
  • 試試看

先聲明,這個小節沒有貶意,而是單純要來點出真相(?)

是不是覺得上述的語句很常見?即便你沒有說過,應該也看其它人說過。

希望、下次、試試看,這些辭彙不是不能用,只是呈現出來的 「肯定度」不高,相對地給人的信賴感就不會高

如果是在不那麼急的專案,PM 只是想大概了解一下 RD 沒有在偷懶,這些說法都沒什麼問題。

但如果是火在頭上燒的那種專案,明天一早要上線,如果 PM 聽 RD 說「希望下班前能完成」,你看 PM 會不會先跟你要電話號碼XD

尤其,「試試看」這三個字特別容易出現在 RD 口中,原因也很單純,因為程式的東西,常常不是想怎樣就怎樣的,如果誇下海口說「今天會完成」,到時候如果第三方服務斷線,或者官方技術文件有缺漏,不就開天窗了!

真正的承諾

我將在 {某個時間} 之前,完成 {某個任務}。

看到這裡很多人會想:「那麼厲害!? 啊如果第三方服務不給力,或者同事之前留下的隱藏 bug 炸開怎麼辦?」

你覺得呢? (( 起碼想一個答案再往下看吧!

如果你假日跟朋友約在公園見面,結果公車遲遲不來,你意識到「自己的承諾快要無法兌現了」...

你會怎麼做?

思考 3 秒

2 秒

1 秒

你可以有幾種選擇:

  • 付出金錢,改搭計程車
  • 詢問住附近的朋友載你
  • 提早打電話跟你朋友說會遲到
  • 繼續等待

因此,回到寫程式的場景,如果跟 PM 說好的承諾快要無法兌現了,你可以怎麼做?

  • 付出時間,加班
  • 詢問有空檔的同事幫忙
  • 提早跟 PM 說
  • 繼續埋頭寫程式

你會發現當承諾無法如期兌現時,是需要付出代價的,付出更多時間,或者欠同事人情,甚至挨一頓罵。

蛤?聽起來太不划算了吧!那我一開始就說試試看就沒那麼多問題啦!

承諾帶來的好處

三個面向可以看:

如果從自己的觀點出發,因為我承諾給 PM 了,我說什麼都要完成!會有更多動力從心底湧出,比較不會遇到一些障礙就放棄,也更容易激發自己,嘗試各種方式來完成任務。

如果從 PM 或主管的角度出發,他們會看到這個 RD 是值得信賴的,說到做到的,即便可能有些任務沒辦法如期完成,起碼是做過各種努力,並提前告知有心理準備的,未來有更重要的案子,才比較可能給這樣的人。

如果從團隊的角度出發,當團隊中有一個人,每次預估時程的時候,都願意宣告與承諾,久而久之,大家都會更看重時程的預估。

整體來說,願意下承諾並落實的人,通常都是值得信賴的人

成為值得信賴的人不是免費的,但好處絕對是有的

結語

今天整篇下來有點長,所以總結一下:

  • 預估時程要基於「真相」,不樂觀不悲觀
  • 當你覺得快要跟 PM 吵起來了,請站在 PM 的視角來看事情
  • 「承諾系」的語彙保有更多彈性,但也少了信賴感
  • 承諾不是免費的,但好處絕對是有的

其實寫完才發現,書中的東西其實講得有點少,大部分變成我自己的經驗談XD" 所以如果可以,還是盡量去買書來看啦~

小小的燭火
在愈深的夜裡
愈有力量

參考資料

The Clean Coder


上一篇
Day 27 - Clean Coder 時間管理與專業人士
下一篇
Day 29 - 淺談測試 - 令人安心的保護網
系列文
Javascript 從寫對到寫好30

2 則留言

0
juck30808
iT邦新手 2 級 ‧ 2021-10-14 12:09:52

恭喜即將邁入完賽~/images/emoticon/emoticon08.gif

ycchiuuuu iT邦新手 5 級 ‧ 2021-10-14 20:07:29 檢舉

謝謝!你也是啊~奔向終點!

0
TD
iT邦新手 4 級 ‧ 2021-11-06 10:30:03

願意下承諾並落實的人,通常都是值得信賴的人

好句!

我要留言

立即登入留言