5xRuby 的開發堅持與它為什麼重要
軟體開發是否能順利進行,取決於許多因素。除了要配合客戶的商業策略,也應慎重考慮軟體是否能持續維護及更新。也因此,開發軟體並不該永遠以速度做最優先考量,而應以品質為出發點,思考如何在有限時間內將有意義的事情做好,達成商業需求,建立穩健而能長期維護的軟體服務。
因此,技術夥伴對於「軟體開發」的 mindset,甚至我們可以稱之為「堅持」或「美學」,雖然看似與客戶追求的結果無關,最後卻常常會左右專案品質甚鉅。所有專案都是為了成為某個「問題」的 soultion,俗話說魔鬼藏在細節裡,而細節就藏在團隊的自我要求裡。
在五倍紅寶石,我們一直以來都對開發品質非常注重。此篇文章,我們會分享我們對於專案開發的美學。
在有限的時間內做對的事
企業在開發軟體時,經常遭遇時間與預算如何平衡的兩難。資源有限,如何優先進行最有價值的任務就變得格外重要,在我們過去的專案中,我們會盡可能理解客戶想打造的產品特性、目標群眾及產品任務等資訊,來幫助客戶選擇適合的開發方案。
舉例來說,客戶有十個功能想開發,但預算只能雇用 Junior 等級的工程師,而且時程非常緊急,需要在一個月內完成。我們並不會一昧直接執行,讓十個功能都蓋成搖搖欲墜的違章建築,而是先跟客戶討論和替客戶進行分析,協助篩選出最有價值的功能,才進行開發。
軟體開發充滿不確定性,時間的預估會不斷因為規格變更、遭遇技術問題等障壁,使時程不斷改變,影響交期,甚或犧牲品質,產出無意義的開發成果。但我們如果選擇最核心而且有價值的功能進行開發,就能夠大化減少這種風險。在我們多年的開發經驗裡面,有非常多功能是因為競爭對手或者參考範例有提供才被加入規劃,而並非是因為商業模式本身需要,或能為使用者體驗加分。若客戶將過多資源投注在這些非關鍵項目上,將會造成成本浪費,這些是非常可惜的。
目標導向的專案管理
軟體專案的進度管理在這幾年有非常多流派和形式,我們採用的是在結合實戰經驗後,非常精簡的敏捷開發法。大多數時候,我們會設定好在固定時間內手上資源能達成的目標,然後不斷朝這個方向前進。在這段時間內,根據專案規模和實際開發情況,團隊以一到二週為單位,即時確認狀況並調整優先度及功能規劃。透過敏捷開發方式,除了能讓團隊成員快速習慣我們獨有的開發流程,也能夠更彈性地對應客戶的臨時需求調整。
除此之外,我們會建立一系列評估參考來進行進度評估。多數時候,我們會快速針對每一個需求,參考 Scrum Poker 的評估方式給予每個功能複雜度評分,並以接下來一或二週,實際開發狀況所反映出的點數消耗,來預測專案開發的進度。在這之中,我們會持續在每個檢查點修正進度預估,並隨時和客戶溝通,以達到在有限時間內完成更多高價值功能開發的目標。
用高品質的程式設計加速開發
在五倍紅寶石的開發流程中,會需要經過設計、開發、撰寫測試、程式碼審查、品質測試等等階段,也因此多數時候我們的開發時間,看起來沒有比他人更短。為什麼呢?
一個軟體難以擴充的原因,大多是在設計階段就使用了不適合的資料結構、處理邏輯所造成。我們會選擇先投入時間分析系統設計跟實際在商業上的關聯,並選擇適合的架構進行規劃。也就是要蓋好一棟沒有公安危機的 101,勢必從良好的地基打造、地質評估開始。而不是在往上蓋到第 80 層樓時,才發現地基根本不足以承受 101 層的重量。
開發中,我們會要求工程師撰寫測試以及重構程式碼,讓每一個被提交出去的程式碼都維持在最穩定也最新的版本,有了測試輔助,在修改或增加功能的時候,就能更大膽進行。重構也能幫助我們在開發過程中,修正對商業模式上的理解問題,並精簡和優化舊有程式碼,以提供客戶更優質的程式碼,未來客戶若想自行維護,也會發現依循這樣邏輯完成的專案,將會使客戶自己的團隊更易接手與擴充。
在這種模式下,雖然初期會花費一定時間搭建開發環境、測試環境以及撰寫測試等看似繁瑣的工作,但隨時間累積以及系統不斷長大,變得更為複雜之後,有測試的驗證與保護,反而能讓後續的開發更能放開手腳去做,減少大量人為失誤所導致的、需要透過人工反覆嘗試才能驗證的錯誤。另一方面,也能減少品質測試階段所使用的人力,只需專注在測試核心的功能即可。
小結
軟體開發可以很輕鬆的只從「功能可動」為前提來實踐,也能像我們的堅持一樣,以永續發展的角度來製作高品質的軟體。縱然表面呈現看似沒有太大差異,但實際上就像工藝品跟快速消費品的差別。好的工藝品,除了具有可長久保存的特質外,也存在非常多巧思,能在每一次軟體改進中,持續為商業模式貢獻價值。消費性產品只是單純為了讓消費者掏出錢,品質難以期待。而就算是消費品,也因為品質控管、是否設計成能長久使用、製作團隊品質等因素價格多有差異,要買到品質好的消費性產品,還是需要投入最基本的成本才能取得。在五倍紅寶石,我們對於軟體開發的態度是以工藝品等級為目標,對每一個客戶,都遞交獨一無二的設計與品質上的堅持。
想要閱讀更多來自五倍紅寶石軟體開發的技術分享?歡迎訂閱我們的月報,每月將自動幫你送上最新文章。