別再丟連結了,工程師如何做專案規劃?可以先從這幾個方向入手。

金天
Mar 20, 2023

是否有過這樣的困擾,當主管和你說個問題,請你回去想想,結果開會時,你給出一個連結,說那是你找到的「資料」,就當作完成「任務」了呢。

這就跟你去了某家店用餐,你問店員有什麼推薦適合不愛吃辣的人享用的呢?店員跟你說,

「牆上都是我們的菜色,你自己看哪一個是你喜歡的呢?」

第一直覺就是,這個店員不但沒有回答到你的問題,還有一種讓人無法信任,也會有讓人覺得他不想負責任,不想要做任何決定的感覺。

或者,那真的是你想法,或許不是,你是真的「不知道」如何開始,那麼你可以往以下幾個角度出發。

意圖和目標

意圖是我們執行某件事的動機和背後的原因,你必須要馬上理解這個背後的邏輯才能事半功倍。

目標則是為了實現或解決這個問題,所設下一個或多個的明確定義的項目,這一切的項目意義都只有一個,達成或解決背後的意圖。

規劃,則是理解意圖後,設定目標的過程。

思路圖

這個就是規劃事情的底層思路,並沒有什麼很複雜的學問。

關鍵問題

知道了意圖之後,那就要知道自己在這個故事中的那一個結點,這個事情可能牽涉很多人,你可能是其中一個節點中的某一環。

但眼前的問題是,你要知道自己的問題是什麼,才能對症下藥啊。

所以必須要稍微理解背後的故事之後,分析出自己在那一個步驟上。

假設整個故事的脈絡是這樣

整個故事

那麼往往到你的手裡的時候(其實不管組織的什麼職位,都會是一個結點的問題),就是一個結點的問題。

你的關鍵問題,就是你的問題的原因,然後給出建議和組作法。

給出建議

當針對一個問題的時候,我們可以給出原因,同時給出建議,規劃,則是這些建議的具體執行方式罷了。

花了那麼大篇幅,其實就是為了介紹,規劃到底是在做什麼,所以如果當有人請你規劃一些事,不要再零零碎碎的給一些資訊就草草了事。

那我們真的下手要做規劃,就是要有了以上那個思路之後,開始下手設計。

有效的實驗方法

在報告前,先自己進行實驗,證明自己的想法是對的,如果時間關係無法證明,就給予規定的時間。

實驗可以是時間,可以是單位項目,可以是任何一個單位,例如:

1,我們用方法A執行10次

2,我們用半年時間使用方法B。

3,我們有一個人做方法A,一個人做方法B,

這些都是為了更好提供一個參考單位讓評估你方案的人,如何配合你,或如何和其他人配合。

共存和退場

當然,在真實的場景中,我們都要處理新舊交替的局面,所以就必須會有一段時期,出現新舊共存的過渡期。

要具體提出如何執行和細節,兩個新舊系統如何可以替換工作,當然還要解釋當中的風險和解決辦法。

有效的掌控的流程是計畫中很重要的一環,如果計畫中完全體現不出掌控力度,那麼整個計畫可能會在哪裡出錯,就成為整件事的風險管理中明顯的漏洞,因為也沒有想要一直提心吊膽。

當然每個計畫都會經歷時間的洗禮,總會有一天他會滅燈,又或者過程中不如預期,是如何執行退版,又或者整個退場,維持舊有的系統。

邊際切割

假設是新設計的系統,這一步必須要做好;假設是舊有的系統,這一步更要做好,即便它很難做。

為什麼?因為多數系統再上線後,為了應付各種需求,就會開始模糊了邊界,為了達到效果,技術債不斷累積,那都是因為對於這種「邊界」毫無概念的後果。

以下是一個非常經典和簡單的新聞網站,按理說,我們會將APP設計成這樣。

一個前後分離的SPA新聞網站

但其實你可能會問,為什麼要那麼多餘,我們可以這樣,像下圖那樣,直接打API,直接顯示;或者我們可以在Server做一層,前端直接顯示HTML更快。

其實不管那一個方案,都對,但最後我們必須釐清這些方便的邊界在哪裡,在很多架構設計的書或者理論上,我們都會把一些「複雜且不穩定的」因素集中在一個地方管理,其他相對的模組都是穩定且單純的。

這都是為了更好釐清APP的整個資料流動和結構,另外要不要加一層cache並不是邊界要在乎的,對整個系統來說,cache也就是邊界其中一環,有沒有它,都不應該會影響整個系統運作,而不是把cache加進來,他才能運作。

前後分離很常被使用,是因為那是最簡單且好理解的分割點,我們可以獨立測試API; 但我相信,會去測試UI的人是佔少數,會去真的找出UI中的錯誤更是少數中的少數。

介面,是介於API和UI之間的一層轉換層,你可以很好的利用它來控制進入和出去的數據長相和錯誤處理。

以上只是一個舉例說明,真實情況遠比這個複雜的多,但這也是極大多數人在設計APP時最常忽略的事,拿到API就直接用了,API錯,你的APP也跟著錯,沒有例外。

風險控制

一個完成的計畫,會涵蓋很多重點,無法一一說明,但是有一個重點是必須要要有的,那就是有什麼風險?

可以思考看看:

1,執行這件事,困難的點(技術上需要克服)什麼?

2,有什麼事情你事做不到的,什麼事情是做得到的。

3,做這些事情需要花多久時間,投入多少人和成本。

4,如果這事情中途有什麼變卦,可以怎麼應對。

5,如果執行完畢上線,最佳的狀況是什麼,而最糟的狀況是什麼?如何避免發生最糟的狀況。

總結上述所說的,一個工程師的項目規劃,可以有以下內容

1,我們面對的問題和困難是什麼,如何解決,代辦項目是什麼。

2,每個代辦項目中,又有什麼困難和代辦項目。

3,整個計畫中,一個有幾個模組和區塊,如何劃分,如何分開測試。

4,有什麼風險,時程,成本投入,預期結果。

為了節省開會時間,請務必準備好「精簡」易懂的圖文並茂簡報,讓人能很短時間內知道你的想法。

先說結果和結論,再分析你的觀點和想法。

--

--

金天

[徵求出版社合作] 我預計今年寫一本工作方法類書籍。 現任台積電前端工程師,Ex-街口 Web Lead | 作者 | 大馬人,現居台北。愛邏輯推理,行動派,複雜的事簡單做,簡單的事仔細做,喜歡講故事。