在 ChatGPT 已然橫空出世的年代,要獨自開發一個能夠正常運作的網站已經不是什麼難事了,然而,一個面面俱到的網站也絕非簡單列出幾點需求就能夠依照我們真實的想法產出。
因此,這系列文章的目的就是將我這些年學習、實戰,以及各種花式踩雷的經驗匯總起來,分享給對全端開發、產品設計的全過程有興趣的各位。
涉及的內容會包山包海,從需求怎麼開到如何測試、驗收;開發工具、框架的選擇;再到 Hardcore 一點的技術類知識,如演算法、網路、系統設計;以及團隊內與跨部門的溝通、管理及攻防(?)等等的相關內容。
而正如副標題「小團隊的產品開發大小事」所述,這系列的內容會著重在較小規模的全端產品上,在從無到有的開發過程中,有什麼是我覺得最值得花心思去琢磨的知識、技術或工具。
但內容上,並不會過多的將焦點放在實作細節,因為我相信在有了 ChatGPT 等工具的幫助下,這些直接且明確的問題能夠輕鬆被解決。其他不那麼具體、不那麼明確的問題,才是我所期待和大家分享的:全端開發的血與淚。
接下來讓我們簡單聊聊,如果要開發一個完整的產品,有什麼基本的流程可以遵循嗎?
我覺得大致能分成以下五個階段:需求、開發、建置及測試、部署及發布、維護。後續的文章中則會基於這幾個階段詳細展開。
*產品開發生命週期
我們首先會聊到確認「需求」時有什麼需要注意的,像是如果花了大把時間來滿足低效益的需求,反而有可能會排擠到產品核心功能的開發。舉例來說,為了開發加入購物車的介面,卻選擇 UI Library 沒有提供的元件,硬是手刻可以拖曳來選取商品功能,這個需求可能就被過度滿足了,這時應該想想這真的是客戶不能缺少的功能嗎?
再來要確認如何「驗收」需求,一個購物車的功能怎麼叫做「做完了」?不僅僅要實作出需求所列的內容:可以加入商品、選擇數量等等,可能還要考慮商品數量為負數怎麼辦、商品的名稱太長怎麼辦,甚至要考慮我在兩台電腦同時登入能夠看到相同的購物車嗎?
有了需求和驗收項目,就進入到「開發」環節。我們會聊到理解演算法、時間複雜度有什麼幫助,像是排序這個簡單的 Function,幾乎所有程式語言都幫你包好了,知道原理又能做什麼?又或是一些商業邏輯的實作,像是商品的狀態從已付款到出貨,我們有沒有除了 if else 之外的方式能夠更系統化的管理狀態的變換。
每當開發到一個階段,就需要「建置及測試」,我們會聊到所謂的 CI/CD 怎麼幫助工程師們減少處理雜事,將定版的流程處理好可以在後續怎麼方便我們定位錯誤;又或者 Unit Test 的撰寫雷區,像是每次測試時都呼叫類似 now()
的 Function 取得系統當前時間,可能導致 Side Effect。
有了可執行的程式,就要「部署及發布」給客戶使用了,而在這之前我們需要考慮自己架設 Server 或是使用 AWS、GCP 等等的雲服務;另一個重點是,要考慮分散式系統嗎?例如 Database 拆成兩座,這樣可以讓資料同時存兩份並分配讀取流量,但又可能有資料不一致的情況產生。
最後則是「維護」,我們會聊到如何監控已經上線的系統,當硬碟快滿的時候可以收到通知提前處理,也可以在實際程式發生錯誤的時候,有足夠完整的資訊方便我們 Debug 並盡可能快速修復。
這些大概就是從無到有的全端開發,可能需要考慮的幾大重點了,讓我們接著聊下去。