最近我們住的大樓很不寧靜。樓下施工裝修好幾個月,最近聽說因為變更設計要延長施工期間。同人在大樓公布欄看到公告,說工期要延長到十一月底才結束,並且要在這幾天要進行噪音施工的工程,為期三天,時間從早上九點半到十一點半,下午則是從二點到五點。
但沒想到第二天,不到八點半同人和老婆就聽到電鑽和榔頭敲打的聲音了。這個時間出現這些聲音,會干擾女兒的睡眠而影響她的正常發育與成長,這實在令我們十分困擾。 Read the rest of this entry »
最近我們住的大樓很不寧靜。樓下施工裝修好幾個月,最近聽說因為變更設計要延長施工期間。同人在大樓公布欄看到公告,說工期要延長到十一月底才結束,並且要在這幾天要進行噪音施工的工程,為期三天,時間從早上九點半到十一點半,下午則是從二點到五點。
但沒想到第二天,不到八點半同人和老婆就聽到電鑽和榔頭敲打的聲音了。這個時間出現這些聲音,會干擾女兒的睡眠而影響她的正常發育與成長,這實在令我們十分困擾。 Read the rest of this entry »
本周一同人在新公司 on board,公司事先訂好餐廳為我舉行迎新聚餐。在這場聚餐當中的一道菜,讓大家開啟談論品質流程的話題。 Read the rest of this entry »
最近同人看到有一則噗浪提到「一個穩定的程式並非必然,而是偶然」在此噗浪的回應中,發送這則噗浪的噗友表達他對程式穩定性的看法。
先問自己一個問題,一個程式有幾個 Bugs?如果是不可數,那~~它的穩定是相對非絕對,所以穩定不是絕對的,也不是必然的。
同人覺得這位噗友的觀點很有趣,於是加入這則噗浪的討論。我問如果最開始的程式都是穩定的,那麼是什麼原因讓後來的程式變得不穩定?對這個問題,一些噗友提出了他們的看法,其中有一位噗友回應「是我的機器弄好的程式,跑到別人機器就不穩定了」,發送此則噗浪的噗友認為還蠻接近實際的情形。
他提到 Bugs 在自己的機器沒產生,在別人那邊可能會產生,問題可能是因為自己的機器有 Bugs,而不是別人的機器,他說假設機器不會出問題是會有副作用的。
那麼為什麼不在應用系統要運作的目標環境下直接開發程式呢?因為,嚴格來說,開發者不可能有完全一致的環境,因此開發者只能假設環境是不會改變。但實際上,在不同的機器上、甚至在相同的機器上,不同的時間可能也會出現難以預料到的變化,結果使得程式變得不穩定。
這位噗友認為,當我們愈信任一個系統,其實可能是一個災難,因此程式的穩定非絕對而是偶然,它是由一連串的偶然所累積而成的。同人發現這個觀點讓人很難反駁,在我過去程式開發的經驗中,並不乏遇到原來運作正常的程式,在不同時空環境出現問題的現象。正如同這位噗友提到的,作業系統與程式語言它們本身也都是程式,很難確保它們不會出問題。
相信很多人都曾遇到過,程式發生失常通常只因為一個令人難以捉摸的小錯誤,因此似乎真的可以說「穩定的程式是偶然的」。不過,如果穩定的程式真的是偶然的,程式的穩定就只能依賴運氣而不是人為努力,事情真的是這樣嗎?其實這位噗友太過強調環境變化的隨機性,卻忽略了適應環境變化,程式開發必然會經歷複雜演化的過程。穩定的程式是演化而來的,雖然演化的過程是偶然、但其最後結果卻是必然。換句話說,穩定的程式是偶然下的必然。 Read the rest of this entry »
本篇文章是投稿 ZDNet 的文章原稿,並以〈專案不確定導致焦慮與迷失〉與〈專案不確定性導致焦慮與迷失(下)〉兩篇文章刊出。原稿未經 ZDNet 編輯,其內容可能會與刊登的文章內容有約略的不同。
專案經理常會面臨天人交戰的情境。當專案「計劃總是趕不上變化,變化總是比不上老闆的一句話」之時,許多專案經理總是會擔心專案無法如期完成或害怕資源不足,而拒絕或延後專案變更的要求。但這樣的行為,卻往往造成工作成果無法符合專案實際需要的結構性因素,而使得專案的失敗機會大為增加。這對於具備智慧及膽識的專案經理而言,當然並不會樂見專案發生這樣的事情。
筆者前一陣子看到喲哪桑在〈換了屁股,我也換了腦袋〉的分享,提到他在時間緊迫的情形下,接受了專案的功能變更要求。那個變更要求原來是由他所提出,當時前任專案經理以時程緊迫為由而答應延後處理,而一直到他接任專案經理仍然還留在原處。但他認為他不能任由「行為造成結構」的情形發生,於是決定不要再讓這個專案變更要求再次拖延下去,並在當下對專案進行變更。
筆者認為喲哪桑的作為令人激賞,並且覺得那篇文章值得推薦。其原因並不是因為他針對專案變更做了什麼樣的決定,而是欣賞他在決策過程中,展現出面對自己的勇氣與解決問題的思考。不過,卻有其他讀者對那篇文章抱持相反的意見。
某位網友對喲哪桑的分享,批評他是靠感情衝動來管理專案,甚至用了「發瘋了你」、「不適任該離開的時候」等情緒性的字眼來指責喲哪桑的不是。他指出喲哪桑的文章所傳達的意念,實在有不可思議的謬誤,並且擔心那篇文章會透過 ZDNet 的報導,將不正確的知識與觀念誤導一般社會大眾。
然而,他對這篇文章的批評卻使人感到困惑,那位網友認為喲哪桑文章傳達的意念有不可思議的謬誤,但看在專業人士眼裡,這樣的觀點又何嘗不是相當嚴重的偏頗呢?筆者認為他的觀點傳達的意念本質上是一種面對不確定性的焦慮感,進而對改變的抗拒而產生無知的迷惘。
身為專案經理固然不應該因為個人一時的感情因素而使專案陷入危險之中,但在對專案缺乏可供客觀評論資訊的情況下,只憑專案經理接受專案變更的決定,就加以批判其決策感情衝動是否真的恰當?專案管理並不是神學或是玄學,而是屬於管理科學的範疇。因此,如果有人要批評某個專案經理是用感情衝動來管理專案,必須提出具體的事實根據,否則那只是無憑無據的推論而已,而這樣的推論多半只是源自於自我的偏見與扭曲。 Read the rest of this entry »
本文係投稿於 CNet / ZDNet Taiwan 的初稿,並分為上下兩篇文章刊出,未經 ZDNet Taiwan 編輯,其內容可能會略有差異。
軟體專案開發常常會面臨時間不足的問題,尤其在台灣,Price on Cost更是不容易達到的理想,迫於現實,開發者只能硬著頭皮上陣去執行不可能的任務。但最後的結果卻常常是賠了夫人又折兵。即使透過不斷地加班,任務依舊還是無法完成,而且還會造成團隊士氣低彌,使得開發者缺乏工作的成就感與滿意度,甚至使專案開發人力大量流失。
其實大多的軟體開發者都期望專案能爭取到足夠的開發時間,不希望他們的青春浪費在無意義且永無休止的加班上。然而,軟體開發的現實就是如此殘酷,受到開發組織的營運面影響,通常專案總是很難爭取到足夠而充裕的開發時間。專案常會受限於市場競爭壓力的考量,為了爭取專案的機會常常會不得不遷就營運觀點而放棄工程與技術的堅持,因而使得專案無法爭取到合理的開發時間。
在台灣,軟體的定價通常是由市場供需機制所決定的,而不見得可以考量到軟體開發的成本。當市場競爭愈激烈時,軟體的價格就相對地會降低。開發者為了獲利,於是就必須想辦法降低開發成本,才能獲取相當的利潤,於是軟體的品質就會受到影響,因為軟體價格實在太低了,開發者只好捨棄一些可以增進或維持軟體品質的作業。結果軟體品質就會變成時間允許才能夠達到的一個理想,而現實通常是「時間總是不夠」。
當軟體專案把軟體價格當做專案成本估算的基礎時,這樣軟體開發就會沒辦法重視專業,只能讓外行(市場因素)領導內行(研發設計專業),軟體開發者的痛苦夢魘於是從此開始。
所以,Price on Cost 的理想是很難達到的,現實就是這樣,專案就是難以爭取到足夠的充裕時間。但這樣要如何才能達到專案不可能的任務呢?從筆者在工作上的觀察中發現,不少的管理者會將這個問題焦點放在團隊生產力上,以提昇軟體的開發效率來縮短開發時間。不過,實際上卻不見軟體開發成果獲得到顯著地提昇。
通常,管理者會希望軟體開發者加班或是增派開發人力,來提昇軟體開發的生產力。軟體開發每日的總工時增加了,照理說應該是可以增加軟體開發的效率,但卻也因此引發出新的問題,也就是軟體開發出錯的機率也會隨每日工作時數或開發人力增加而增加,反而降低了軟體開發的效能。
為什麼會這樣呢?綜歸一句話,增加了生產力卻讓軟體開發變得更複雜,使得團隊無法有效整合、發揮綜效。 Read the rest of this entry »
本文係投稿於 CNet / ZDNet Taiwan 的初稿,並分為上下兩篇文章刊出,未經 ZDNet Taiwan 編輯,其內容可能會略有差異。
軟體專案團隊在專案開發的過程中,常會面臨許多問題,例如需求的不斷變化、資源的短缺、時間的急迫性、以及技術的難以掌握等。這些事件雖然都將直接影響專案的產出與品質,並且會令開發者會感到相當困擾,但只要存在希望,問題都還是可以有解決之道的。然而,在什麼情況下,專案發生了什麼事會讓開發者完全失去希望,並且感到他的世界相當悲慘呢?
相信許多人都會同意,總要等到專案驗收前,才發現程式品質有問題是一件很令人沮喪的事情。 Read the rest of this entry »
軟體專案後期的變更會讓團隊無法按照既定計劃進行,然而因應現實需求變更又勢在必行時,我們又該如何取捨呢?學長喲哪桑在〈Late Changes Can Be Good〉提出我們必須認清專案初期的需求規格永遠是不完整的事實,因此好的經理面對專案後期變更應該要懂得取捨,發展出良好的適應變更的機制。他提到:
大家都不喜歡 Late Changes,我也不例外。不過,也不要有受害者的心態,把 Change 當做誰的疏失、誰的錯誤、是誰害的。我們還是得認清事實,就是專案初始時的需求規格永遠是不完整的。
好的機制,是要讓產品專案能夠快速應變,而同時間又能把品質的傷害、生產力的影響降到最低。
好的 manager,要懂得取捨。Late Changes Can Be Good.
學長所提的觀念其實並不難理解,但依據同人實務上的觀察卻發現,在面對壓力時,專案管理者往往無法做適當的取捨。理想上,大家都會以為加一點東西、做一點小改變,程式應該不會有什麼問題才對。但事實往往是「千金難買早知道,萬般無奈想不到」,改變對軟體品質的傷害、生產力的影響總是超乎我們的想像,更可怕的是變更所造成的災難似乎永無止盡。當初取捨時的樂觀,事後我們才會發現那其實是無知。 Read the rest of this entry »
本篇文章係投稿於 CNet / ZDNet Taiwan 的初稿,主要是探討開發者及管理者在軟體開發過程中,對專案時程與進度的過度樂觀現象的解決之道。不過,在投稿之後,因應在網路上也興起對專案收尾巴的討論熱潮,同人因此在網誌發表了一篇〈當軟體專案計劃趕不上變化時〉。
那篇文章提到期待專案問題藉由收尾巴的過程而得到解決的想法,往往是要付出很慘痛的代價的,但很多人卻無法從這些寶貴的經驗中得到教訓。同人在那篇文章提到一個觀念,就是不根據需求的變動或軟體的現存問題規劃出合適的架構與概念設計,現存設計很難會有足夠的空間來容納新功能。因此,最好還是採取務實的做法,針對變化而適時修正計劃,不要樂觀而天真的以為收尾巴就可以解決問題。
在那篇文章的迴響中,志威兄與可樂魔也分享了他們的經驗。志威兄提到了,專案的控管真的是一門藝術,需要累積許多豐富的經驗。每次專案的歷史重演,真的會讓人抓狂。可樂魔則提到,他看到他們公司的眾家 PM 們,他們的心態還是希望在這最後的階段可以「修復所有問題」,但真的有價值的「記取錯誤經驗」和「再利用經驗」都像是狗屁一樣。
對於他們的分享,本篇文章正巧提出同人因應相同問題的實務做法。我認為如果那篇文章指出了對待樂觀主義的心態問題,那麼本篇文章所討論的則是如何處理軟體專案樂觀主義的問題。本篇文章在 CNet / ZDNet Taiwan 分為上下兩篇文章刊出,未經 ZDNet Taiwan 編輯,其內容可能會略有差異。 Read the rest of this entry »
軟體專案在「收尾巴」之前,很多專案的利害關係人都會很樂觀地認為,軟體的問題可以在收尾巴的過程中得到修正。然而,當大家發現專案後期因為需求變更與軟體本身所存在的缺陷產生複雜的交互作用,使得軟體問題不斷地發散,才會發現,收尾巴?!這應該還沒開始吧!
對此,志威兄提到,從程式設計者、網站委外服務之業主、專案管理者之間,存在了觀點的差異。而他指出,讓專案順利及圓滿完成的解決方案就是找到一個稱職、有能力的專案經理。志威兄認為良好的專案經理除了具備相當的領域知識與時程控管能力外,最重要的就是溝通協調能力,他提到了:
他必須將老闆時長過於遠大的夢想,找到執行與實做的方法,更要能溝通協調把像在各星球各自為政、不同部門的理性嚴謹工程師與行銷、美工等創意人員,通通揉合在一起朝相同目標前進。也能夠事前就規劃好整個專案的時程,並且設定適當的check point,隨時掌控進度與各部門狀況。
事先做好規劃,按照時程追踪進度無疑是確保專案成功的基本動作,相信大家都能了解這個道理。但事實上,在軟體專案的開發過程中,要完全做到卻又發現窒礙難行,因為軟體開發本身存在著抽象性與變動性,要事前就規劃好整個專案的時程,恐怕只是個無法實現的理想。
然而,雖然「計劃趕不上變化,變化比不上老闆一句話」,但趕不上或比不上並不代表要放棄計劃,否則專案的成功也只是聽天由命的偶然罷了。同人認為,軟體專案要成功,關鍵不在於如何照計劃進行,而是要「計劃」當計劃趕不上變化時該怎麼辦。換句話說,當軟體專案管理者把計劃當成死的名詞時,他將不會成為稱職的專案管理者;稱職的專案管理者會把計劃當動詞,用以採取適當行動,才會讓專案走向成功。 Read the rest of this entry »
本文係投稿於 CNet / ZDNet Taiwan 的初稿,並分為上下兩篇文章刊出,未經 ZDNet Taiwan 編輯,其內容可能會略有差異。
如眾所週知的,軟體開發專案具有高度不確定的特質。因此,為了降低需求變動的風險,在專案初期,軟體開發者往往會花費許多的心思,設計出具有彈性的軟體架構以適應未來可能的需求變化。大部分的開發者都了解軟體需求是不可能不改變的,但他們希望不管軟體需求如何變化,軟體開發的設計概念都不會因此受到影響或改變,如果可以做到這一點,軟體開發就會變得比較有效率,同時也能確保所開發之軟體的品質。
然而,現實總是和理想存在著一些落差的,專案的演變往往會超乎開發者事先的預期。尤其是當專案的驗收日期愈來愈接近時,專案可運用的資源也會愈來愈少,專案或許已不如剛開始時充滿了未知與不確定性,但相對地,專案的可變動性也愈來愈小。因此,在專案後期出現專案問題,或是需求的變動,相較於相同專案問題或需求變動在專案初期出現而言,會顯露出更為嚴重的危機與壓力的。
每個人都希望寧願事前多做一些風險管理,勝過事後的危機處理,而且後者的壓力是很容易讓做錯事的。然而,軟體易變的特質及專案環境的不確定性讓人難以捉摸,更不用說預測變化了,卻只能在事後才徒然留下「千金難買早知道,萬金難買後悔藥」的感嘆。但問題還是要解決的,到底軟體開發者在遇到這種危機時該如何處理呢? Read the rest of this entry »