Archive for the ‘專案風險’ Category

上個月 24 日應 MaoYang 兄之邀,分享我在敏捷開發的實戰經驗。這場分享會還找來了 David Ko 兄分享他在公司導入 scrum 開發管理方法的經驗,同人則負責分享我之前在專案中推行 extreme programming 工程實務的經驗。分享會在台北市電腦公會舉行,看到現場互動氣氛的熱絡,以及會後學員們給予不少正面的評價,感覺大家收穫都不少。其實包括我自己在分享會結束之後也產生了一些想法,倒是想藉由此文章分享我的分享會後心得。

同人很喜歡 David Ko 兄提到愛因斯坦為 Insanity 這個字所下的定義:「Doing the same thing over and over again and expecting different results」我認為這個定義很貼切地描寫許多人在軟體開發過程所展現的心態;過去做過行不通的做法,卻認為在今天可以行得通,結果讓人一直瘋狂或是不斷地精神錯亂。

但為什麼人們要盲目地做些行不通的事呢? Read the rest of this entry »

這篇文章是投稿 ZDNet Taiwan 的文章原稿,由 ZDNet Taiwan 以〈如何在系統異常前發現錯誤?〉、〈如何在系統異常前發現錯誤?(下)〉兩篇文章刊登。文章原稿未經 ZDNet Taiwan 編輯,內容可能與 ZDNet Taiwan 約略有所不同。

前一陣子有兩個與資訊系統失常有關,而且眾所矚目的新聞事件,也就是戴爾電腦網路購物系統與台北捷運內湖線的系統異常。相信很多人都認為這兩個系統會發生系統異常相當離譜,在系統上線之後才發現系統無法正常運作,造成系統使用者的困擾,同時也會讓人對系統可靠度與穩定度失去信心,而增加系統的失敗成本。

雖然平心而論,想要事前預料系統可能發生的問題,並加以預防或因應其實並不容易,因為開發系統,尤其是軟體開發常會碰到事先難以預料的問題。但如果能在錯誤造成危害之前,就能夠發現問題並採取適當的行動來解決它,應該就能減少系統的失敗成本。因此,看到戴爾與台北捷運內湖線的重大系統異常,讓筆者想探討如何在系統失敗前發現錯誤,以避免系統失敗的巨大損失。 Read the rest of this entry »

Kenming Wang 在〈寫好使用案例 (Use Case) 有什麼好處?〉中提到寫好使用案例的好處。文章提到有位其中一位較為資深的程式開發人員在他在工研院授課時表示感覺不到寫好使用案例有什麼好處。這問題讓他思考許久後回答,他認為寫好使用案例最直接的關鍵是,影響整個專案開發流程的節奏。

這篇文章分享他對寫好使用案例對專案好處的看法,他總結使用案例的好處是族繁不及備載。並提到越大規模的專案,更能感受到開發節奏的順暢度。再加上 “漸進循環 (incremental and iteration)” 的開發模式,會越形容易謀和在系統開發期間,人與事的種種。

不過,Kenming Wang 在文章最後提到以上的論述不能說服那位程式開發人員,因為程式設計人員多半以局部或個別的角度來看系統開發,所以使用案例寫得好不好,對他們沒差。只有像專案經理或軟體架構師以專案整個全局來看時,才會有明顯的感受。

但他認為不需要去說服那位程式開發人員,並引述 Martin Fowler 在《UML Distilled》一書中曾經說過的:「你只能強迫新手們這麼做。過了幾年後,他們會突然恍然大悟,然後腦袋彷彿重生!」這句話來說明他對這位程式開發人員意見的看法。

同人看 Kenming Wang 這篇文章覺得怪怪的,倒不是不贊同他對寫好使用案例好處的觀點,而是覺得強迫新手去做我們認為有價值的東西是很危險的。 Read the rest of this entry »

最近同人看到有一則噗浪提到「一個穩定的程式並非必然,而是偶然」在此噗浪的回應中,發送這則噗浪的噗友表達他對程式穩定性的看法。

先問自己一個問題,一個程式有幾個 Bugs?如果是不可數,那~~它的穩定是相對非絕對,所以穩定不是絕對的,也不是必然的。

同人覺得這位噗友的觀點很有趣,於是加入這則噗浪的討論。我問如果最開始的程式都是穩定的,那麼是什麼原因讓後來的程式變得不穩定?對這個問題,一些噗友提出了他們的看法,其中有一位噗友回應「是我的機器弄好的程式,跑到別人機器就不穩定了」,發送此則噗浪的噗友認為還蠻接近實際的情形。

他提到 Bugs 在自己的機器沒產生,在別人那邊可能會產生,問題可能是因為自己的機器有 Bugs,而不是別人的機器,他說假設機器不會出問題是會有副作用的。

那麼為什麼不在應用系統要運作的目標環境下直接開發程式呢?因為,嚴格來說,開發者不可能有完全一致的環境,因此開發者只能假設環境是不會改變。但實際上,在不同的機器上、甚至在相同的機器上,不同的時間可能也會出現難以預料到的變化,結果使得程式變得不穩定。

這位噗友認為,當我們愈信任一個系統,其實可能是一個災難,因此程式的穩定非絕對而是偶然,它是由一連串的偶然所累積而成的。同人發現這個觀點讓人很難反駁,在我過去程式開發的經驗中,並不乏遇到原來運作正常的程式,在不同時空環境出現問題的現象。正如同這位噗友提到的,作業系統與程式語言它們本身也都是程式,很難確保它們不會出問題。

相信很多人都曾遇到過,程式發生失常通常只因為一個令人難以捉摸的小錯誤,因此似乎真的可以說「穩定的程式是偶然的」。不過,如果穩定的程式真的是偶然的,程式的穩定就只能依賴運氣而不是人為努力,事情真的是這樣嗎?其實這位噗友太過強調環境變化的隨機性,卻忽略了適應環境變化,程式開發必然會經歷複雜演化的過程。穩定的程式是演化而來的,雖然演化的過程是偶然、但其最後結果卻是必然。換句話說,穩定的程式是偶然下的必然Read the rest of this entry »

喲哪桑學長最近寫了一個有趣的故事,並在故事的後面問讀者「Feature Request, Or Bug Fixing?」這個故事引發了許多人進行廣泛的討論。

有人站在專案經理的角度來與故事中的 M 持相同的看法,只要加強 Error handling 改掉 bug 就夠了,不需要再多花工夫來回應 feature reguest。但也有人站在工程師的角度主張支持故事中 Q 的想法,解決問題本來就是 bug fixing,而修改問題所採用的做法只是 work around,而不是故事中 M 所說的這是 feature request。

不過同人覺得這個開放式的案例討論最有趣的部分,倒不是誰的看法才是正確的討論,而是看到 scarfman 「開版圖就已經說明了,bug 穿上衣服就變成 feature 啦!」的回答,這促使同人進一步地思考到一個新觀點;也就是軟體缺陷的信用創造。 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 »

27
十二月

好的變更來自於可行計劃

   Posted by: jim yeh   in 問題解決, 專案監控, 專案規劃, 專案風險

軟體專案後期的變更會讓團隊無法按照既定計劃進行,然而因應現實需求變更又勢在必行時,我們又該如何取捨呢?學長喲哪桑在〈Late Changes Can Be Good〉提出我們必須認清專案初期的需求規格永遠是不完整的事實,因此好的經理面對專案後期變更應該要懂得取捨,發展出良好的適應變更的機制。他提到:

大家都不喜歡 Late Changes,我也不例外。不過,也不要有受害者的心態,把 Change 當做誰的疏失、誰的錯誤、是誰害的。我們還是得認清事實,就是專案初始時的需求規格永遠是不完整的。

好的機制,是要讓產品專案能夠快速應變,而同時間又能把品質的傷害、生產力的影響降到最低。

好的 manager,要懂得取捨。Late Changes Can Be Good.

學長所提的觀念其實並不難理解,但依據同人實務上的觀察卻發現,在面對壓力時,專案管理者往往無法做適當的取捨。理想上,大家都會以為加一點東西、做一點小改變,程式應該不會有什麼問題才對。但事實往往是「千金難買早知道,萬般無奈想不到」,改變對軟體品質的傷害、生產力的影響總是超乎我們的想像,更可怕的是變更所造成的災難似乎永無止盡。當初取捨時的樂觀,事後我們才會發現那其實是無知。 Read the rest of this entry »

本文係投稿於 CNet / ZDNet Taiwan 的初稿,並分為兩篇文章刊出,未經 ZDNet Taiwan 編輯,其內容可能會略有差異。

如眾所週知的,軟體開發專案具有高度不確定的特質。因此,為了降低需求變動的風險,在專案初期,軟體開發者往往會花費許多的心思,設計出具有彈性的軟體架構以適應未來可能的需求變化。大部分的開發者都了解軟體需求是不可能不改變的,但他們希望不管軟體需求如何變化,軟體開發的設計概念都不會因此受到影響或改變,如果可以做到這一點,軟體開發就會變得比較有效率,同時也能確保所開發之軟體的品質。

然而,現實總是和理想存在著一些落差的,專案的演變往往會超乎開發者事先的預期。尤其是當專案的驗收日期愈來愈接近時,專案可運用的資源也會愈來愈少,專案或許已不如剛開始時充滿了未知與不確定性,但相對地,專案的可變動性也愈來愈小。因此,在專案後期出現專案問題,或是需求的變動,相較於相同專案問題或需求變動在專案初期出現而言,會顯露出更為嚴重的危機與壓力的。

每個人都希望寧願事前多做一些風險管理,勝過事後的危機處理,而且後者的壓力是很容易讓做錯事的。然而,軟體易變的特質及專案環境的不確定性讓人難以捉摸,更不用說預測變化了,卻只能在事後才徒然留下「千金難買早知道,萬金難買後悔藥」的感嘆。但問題還是要解決的,到底軟體開發者在遇到這種危機時該如何處理呢? Read the rest of this entry »