喜歡長跑步的人都知道,跑步跑的好不好,除了和體能、肌肉能力等顯而易見的因素之外,像有沒有控制好「節奏感」,也會影響到最後的結果。

「節奏感」相較於體能、肌肉能力等等的因素,是稍微有點不那麼具體。節奏感的控制,是為了控制均勻的速度,尤其在長跑的情況下,在不同的階段,會採用不同的速度,若是前段節奏感沒有控制好,到了後段很有可能過於疲勞而體力流失過去。此外,像手臂和腳的擺動協調,也是會影響到節奏感的感覺,若是手臂和腳的擺動不能協調,容易造成力量的無謂消耗。

以馬拉松為例,節奏感好的跑者可能可以速度很平均的方式跑完全程,這種就算是平均型的跑者。而也有些選手偏重在前半段或後半段,不同的跑者特性不見得相同。但無論如何,能在全程或不同階段分別以清晰或固定的節奏,同時匹配體力消耗的情況來向前奔跑,都有助於提升整體的速度。

而節奏感不佳或凌亂的跑者,不易維持穩定的速度,或是是前段太快,導致後段流失過多體力,反而整體成績更不好。我們可以說,好的節奏感是可以和跑者的體能情況相匹配,並且發揮最好的速度出來。

軟體的開發在好一些面向上也和跑步,尤其是長跑很類似,我們可以找到一些比喻來類比軟體開發及跑步,其中有一點就是前段中提到的「節奏感」。跑步需要節奏感,軟體開發也需要節奏感。

掌握軟體開發時的節奏
跑步的過程中,節奏感讓你持續以同樣的速度揮動你的手臂、邁開你的步伐,並且讓二者保持協調一致;節奏感也可以讓你以自身體能所能負荷的情況下,以穩定的最高速度跑向終點。軟體開發也是同樣的需要節奏感:開發團隊的成員需要清晰的節奏感,使得他們知道在什麼時間點應該要做什麼事情,也知道彼此之間如何相互合作,以保持彼此間動作的協調及一致。整個開發團隊也需要透過明確的節奏感,來維持穩定的開發速度。

我們一方面學習了在軟體開發中各種活動,如何讓特定的活動做得更好、更快,例如把程式架構設計得更好、利用工具輔助我們來得到更好的生產力、等等。這些就如同在跑步的運動中,要努力把體能鍛鍊得更好、把技巧訓練得更精進一般,但是,處於無形之中的節奏感,還是會影響到最後的開發速度。

正如前段文中所提到的,節奏感講的並不是速度的快與慢,而是維持一個穩定的速度,而且在過程中建立起明確的時間點,讓每個成員都知道在什麼時間點應該做什麼事,而且成員彼此之間的工作應當如何協調一致,不會因為凌亂的步調,而使得速度因此而減慢。

有好的節奏感可以帶來穩定的速度。在開發上維持穩定的速度,有不少優點,其中有一點就是,讓每個開發成員,尤其是專案經理,都可以預料到專案前進的方式,以及每項工作可能的完成時間。因此,不論速度的快與慢,「可以預期」是一件很重要的事。

有些開發專案的進程忽快忽慢,當成員情緒處於高檔時,火力全開,開發速度看起來突飛猛進,一旦進入低潮,整個進程卻又停滯不前。能夠維持穩定的速度,其實比時快時慢來得好,即使後者在快的時候可能很快。

讓彼此更能在預期的步調下合作

開發的節奏感,很自然的就像音樂上我們打拍子一樣,你會知道什麼時候是一拍的開始,什麼時候是一拍的結束;你會知道以幾分音符為一拍、譜上的音符應為幾拍、以及一小節究竟有幾拍。演奏的樂團因為有著共同的一份樂譜,因此能夠依照相同的節奏感演奏出和諧美妙的音樂。

軟體開發團隊也應該一樣,能夠照著同樣的一份樂譜,以既定的速度、有節奏的彼此相互合作,進而完成開發的工作。

想想在你的開發工作中有沒有過類似的經驗?你正在撰寫一個新的功能,此時,有一個新需求插進來,要你修改之前已經寫好的一個需求,沒過幾分鐘,測試的人員又發了一個臭蟲的報告給你,都是希望你可以盡早完成。

這時候的你,想必覺得自己的工作很混亂,新的程式碼撰寫、舊的程式一方面又要修改功能,另一方面還得修正錯誤,每天都可能不斷有新的需求、或程式的錯誤必須修正。

若是你有過類似的經驗,會不會覺得自己的開發步調相當的缺乏「節奏感」呢?你很難知道、預期在某個特定的時間點,究竟會做些什麼工作,因為這些工作是如此沒有秩序的安排。

對專案來說,你很難預期處於上述情境的一個開發者,何時可以完成他的工作,因為他的工作內容多變、不固定,而且時時刻刻被中斷,或是在多項工作間切換,處於這種狀態的開發者是很難回答究竟每一項工作何時能夠完成。

對管理專案的人來說,當增加新的功能、修改舊有的功能、修正現有的錯誤,全部混雜在同一個時刻在專案中時,一方面不容易預料各項工作何時完成,另一方面更難預料整體的工作何時能夠結束。

開發步調凌亂、缺乏節奏感的後果,不單只是工作的完成不容易預期,大家會覺得怎麼天天都還在修臭蟲、但又好像有做不完的功能。另一方面,讓開發者失去節奏感,也會影響到他個人的生產力,進而又影響了實質的開發速度。

建立節奏感的方法
使用一個清楚的開發流程或方法,無論是那一個流程、什麼樣的方法,只要符合團隊的需求,都有助於讓團隊成員建立起節奏感、也有助於整個開發專案的進行建立起節奏感。當然,這並不是說,我們把開發流程或方法當做官樣文章來做,最後徒具形式。

清楚明確的開發流程和方法,就像是一份清晰的樂譜一樣,記載著每個演奏者在每個時間點上該做的事情,因而得到一個和諧的結果。就好像在很多開發流程會定義開發的生命週期,每個人都知道這個生命週期裡該完成什樣的目標、每個不同的角色應該在什麼時間點完成什麼事情,以及不同的角色之間應該如何協同合作。每個開發團隊中的成員都會知道究竟有那些狀態,而自己現在正處於那個狀態。狀態是清楚的,而不是混雜不清的。

所以說,開發者可能在這個星期專門都在撰寫新的程式碼,而下個星期是修改舊有的程式碼,接下來的兩個星期,則是專門在解決測試團隊在這一回合中所測出的臭蟲。他明確知道,自己在現在的這一週以及未來的幾週要做的事情,也不會在同一週裡混雜著其他工作。如此一來,個人的生產力不會因為失去節奏感而降低,而專案的產出也會因為階段的畫分而較容易估計。即使估計不正確,也比較容易做修正。

節奏感當然是有層次的,小到每個開發者也可以定義在自己在一天中的節奏進行方式,例如在早上撰寫測試案例,在下午撰寫實作的程式碼。而對專案的管理者來說,除了讓每個成員每天都能夠有節奏感的工作之外,也要讓專案的每個階段都以有節奏感的方式進行。

當每個人都熟悉自己、團隊既定的節奏感之後,就會對前進的速度愈來愈能掌握,愈來愈能知道做每一項工作需要花多少時間,也愈來愈能預測專案的開發工作何時可以結束。

專欄作者

熱門新聞

Advertisement