Sunspl

          Hello,everyone,i am sun. 天道酬勤,笨鳥先飛.
          隨筆 - 47, 文章 - 0, 評論 - 24, 引用 - 0
          數(shù)據加載中……

          什么是“成功項目”:談談軟件的價值(看)

          在開始正文之前,我想先講兩個故事——關于軟件項目的故事。


          故事一

          有兩個軟件項目(姑且稱之為“項目 A”和“項目 B”),它們在開始時的預算都是 50 個人月,時間是 5 個月。

          項目 A 在 5 個月后完工,耗費成本 50 人月
          項目 B 在 6 個月后完工,耗費成本 70 人月
          在軟件圈子里摸爬滾打多年的讀者們對這個故事一定有自己的判斷——而且我可以大致猜出是什么樣的判斷。不過先別著急,我們還有另一個故事。

          故事二

          有兩個軟件項目(仍然姑且稱之為“項目 A”和“項目 B”),它們在開始時的計劃都是交付 200 項功能。

          項目 A 在項目結束時一次性交付了最初計劃的 200 項功能,但客戶發(fā)現(xiàn)其中大約 30 項功能沒有太大用處,而另外 30 項有用的功能要等到下一個項目才能實現(xiàn)。
          項目 B 在第一個月結束時交付了第一個版本,此后每兩周交付一個新的版本。在項目進行的過程中,客戶進行了一次業(yè)務調整,加入了 90 項新的功能,并擱置了 50 項用處不大的功能。最終該項目交付了 240 項功能。
          聰明的讀者大概注意到了,前后兩個故事講的是同一回事,同樣的兩個項目。現(xiàn)在我的問題來了:請問哪個項目是更成功的項目?

          這個問題并不容易回答——實際上它沒有標準答案。站在很多軟件企業(yè)的立場上,項目 A 是一個理想的成功項目:按時間、按成本完成預先約定的任務。請注意,我用了“理想的”這個詞,稍后我還會解釋這個有趣的詞,因為實際上的軟件項目往往沒有那么理想。

          而如果換一個角度,站在客戶的立場上呢?也許付錢購買軟件的客戶會有一些不同的想法。項目 B 從開始之后一個月便交付了第一個可工作的版本,從那時起客戶就開始使用這個軟件的部分功能,并且不斷地把自己使用的感受反饋給開發(fā)團隊。在真實的業(yè)務運營過程中,客戶甚至發(fā)現(xiàn)了一種新的盈利模式,并進行了一次大規(guī)模的業(yè)務調整,這次調整的結果也直觀地體現(xiàn)在軟件項目中。雖然項目B的整體交付速率低于項目 A,但它提供的所有功能都是客戶真正需要的,它們?yōu)榭蛻籼峁崒嵲谠诘膬r值——更不用說,客戶提前好幾個月就開始使用這個軟件。

          實際上,這是一篇關于軟件價值的文章。和“成功項目”一樣,對于“軟件的價值”,不同的人也會有不同的定義。不過作為付錢購買軟件的客戶,他對于軟件價值的定義是一目了然的:他能夠從使用軟件中創(chuàng)造多少價值,軟件能夠為他的業(yè)務提供多少價值,這就是軟件的價值。或者說得更簡明一點:

          軟件價值源自使用
          這正是為什么很多客戶青睞“項目 B”的原因——我并不打算聲稱所有客戶都有同樣的觀點,稍后我也會舉出反例,但至少支持這一觀點的客戶不在少數(shù)。因為他們處在一個殘酷而快速變化的商業(yè)環(huán)境中:他們的供應商在變化,他們的客戶在變化,他們所處的經濟環(huán)境和政策環(huán)境也在變化。這一切的變化迫使他們的業(yè)務也要隨之變化。更要命的是,今天這個經濟全球化的時代是一個“快魚吃慢魚”的時代,客戶迫切希望新的軟件系統(tǒng)為他們帶來競爭優(yōu)勢——哪怕這個軟件系統(tǒng)尚未完成,只要能夠投入使用。最后,客戶對于新的軟件系統(tǒng)究竟應該是什么樣子并沒有百分之百的把握,他們的想法往往要在真正使用軟件之后才會浮現(xiàn)成型。幾方面的因素加在一起,使得這些客戶更愿意盡快開始使用軟件、提出反饋、并不斷完善軟件,而不是提出一組需求、然后坐等幾個月之后原封不動地拿到這些功能。

          一個真實的案例

          在 ThoughtWorks 的一個項目中,開發(fā)者們在項目開始之后一個月內就發(fā)布了第一個版本——只有一些簡單的數(shù)據采集功能。在發(fā)布展示會上,發(fā)生了這樣的對話……

          開發(fā)者:這是我們的第一個功能。我們從文本文件、Excel 數(shù)據表和遺留數(shù)據庫采集數(shù)據,現(xiàn)在我們的數(shù)據庫中有這些數(shù)據……(展示數(shù)據庫結構)
          客戶:唔……有意思。要是你能做這樣一個查詢(寫出查詢要求),得到的結果可能會有用。
          開發(fā)者:可是我們的界面上沒有地方做這樣的查詢操作。
          客戶:啊,我不需要操作界面,只要每天深夜做一次查詢,把報表發(fā)到我的信箱就可以了。
          開發(fā)者:這樣嗎……另一個問題是,這需要花我們幾天時間。
          客戶:不要緊,把別的任務往后放幾天好了,我很想看到這份報表。
          開發(fā)者:那好吧,下周我們就會開始提供這個報表。
          猜猜結果怎么樣?一周之后客戶就開始每天接收這份報表,并根據報表內容做一些分析和決策。僅僅幾個月之后,這份報表給客戶帶來的收益就已經超過了整個項目的投資——這時項目其他部分的開發(fā)甚至還沒有完成。

          想想這個客戶會怎么定義一個“成功的軟件項目”?好吧,也許這個項目超過了預期的時間,也許投入了更多的人力,但這些并不意味著“項目失敗”——只是付出更高的成本。關鍵在于,他投入的這些成本能夠帶來多大的收益,他的投資回報率是否劃算。對于這個客戶而言,如果項目能夠隨時給他提供可用的、能夠創(chuàng)造最大價值的軟件,能夠隨時讓——就像故事中提到的——這種有價值的想法得以實現(xiàn),這就是一個成功的項目。

          所以,親愛的讀者,請你忘記本文標題上出現(xiàn)的“敏捷”二字,我們在這里所說的不是別的,就是一種為客戶創(chuàng)造最大化價值的軟件開發(fā)方法。這樣的方法有很多種,但它們有一個共同的特點:盡快、盡可能頻繁地交付可以工作的軟件,讓客戶盡快開始使用軟件,從使用中創(chuàng)造價值、厘清思路、提出反饋。仍然以 ThoughtWorks 的項目為例,這些項目通常在啟動開發(fā)階段之后一個月內就會發(fā)布第一個版本,隨后每一周或每兩周發(fā)布一個新版本——每個版本都是一個可以工作的軟件,每個版本都比前一個版本具有更豐富的功能,并且每個版本都包含客戶認為迄今為止最有價值的那些功能。用軟件開發(fā)的“黑話”,“開發(fā)下一個版本”的過程叫做“迭代”,這些開發(fā)方法最大的共同點就是“迭代式開發(fā)”——不是一股腦地交付全部功能,而是每次增加一點、漸進地交付最有價值的功能。

          軟件開發(fā)的夢想與真實

          回到文章開始處的兩個故事。我曾經說過,對于很多軟件企業(yè)而言,項目 A 是一個“理想的”成功項目。那么,是什么讓情況變得不那么理想?

          答案是一個所有軟件開發(fā)者耳熟能詳?shù)脑~:需求變更。在真實的項目中,客戶通常不會等到最后一天再照單全收整個項目,因為他知道自己的業(yè)務正在發(fā)生變化。這時需求變更就出現(xiàn)了,伴隨著來回的扯皮和討價還價。更糟的是,大量的需求變更發(fā)生在項目晚期——因為直到這時客戶才真正看到、使用到這個軟件,他的很多想法才真正浮現(xiàn)成型。隨著這種“最后一分鐘的需求變更”,項目超期、超出預算也就成了家常便飯。能夠像項目A這樣完工交付的,實在是鳳毛麟角的幸運兒。

          為了對付需求變更這個噩夢,軟件開發(fā)者們還發(fā)明了另一個詞:變更控制。這個有趣的詞暗示著:需求變更是一種“不好”的東西,是需要“控制”的東西。然而站在客戶的角度上想想,他在親身使用了軟件之后提出的要求,難道不是最有價值的東西嗎?把這種真正創(chuàng)造業(yè)務價值的要求“控制”起來,難道是合理的嗎?

          在前面我也暗示過,并非所有的客戶都一定青睞迭代式開發(fā)。那么,哪些軟件項目不一定需要迭代式開發(fā)呢?從整篇文章的內容不難看出,如果客戶的業(yè)務絕對不會變化,如果客戶的需求巨細靡遺非常明確,如果客戶不需要盡快開始使用軟件以便收回成本,那么迭代式開發(fā)對他的幫助就會小得多。不過,如果讀者認真思考的話,這樣的例子也許并不多——也許比你最初認為的要少得多。一個很好的例子是“神州六號”火箭使用的計算機控制系統(tǒng)。還有多少這樣的例子?讀者不妨試著自己想想。

          如果我足夠幸運的話,也許一些讀者已經被這篇文章吊起了胃口:既然有這么好的軟件開發(fā)方法,既然它能夠為我們創(chuàng)造更大的價值,那還等什么呢,我們馬上就動手吧。事情不會那么簡單。為了讓迭代式開發(fā)能夠成為現(xiàn)實,為了確保盡快、盡可能頻繁地交付,為了確保每次交付的都是最有價值的功能,我們——包括軟件開發(fā)者、軟件企業(yè)和客戶——需要很多的改變。這里既有職責與權利的劃分,也有開發(fā)過程和團隊的重組,還有技術層面的實踐指導。這些正是敏捷方法學所涵蓋的內容。缺少了這些東西,“為客戶創(chuàng)造最大價值”就只能成為一句空話。在后續(xù)的文章里,我們將結合 ThoughtWorks 的實踐經驗,逐步介紹敏捷方法的方方面面。

           

          posted on 2008-06-15 15:35 JavaSuns 閱讀(307) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 蒲城县| 孝感市| 准格尔旗| 屏边| 聊城市| 电白县| 万盛区| 哈密市| 泾川县| 皋兰县| 荔浦县| 南澳县| 凤城市| 潞城市| 工布江达县| 天气| 贵阳市| 德兴市| 阿尔山市| 阿图什市| 桂平市| 安国市| 汉川市| 天水市| 浮梁县| 乃东县| 阿巴嘎旗| 茶陵县| 申扎县| 宜兰市| 云霄县| 青岛市| 晋江市| 绥芬河市| 上林县| 民权县| 沂水县| 沂南县| 杨浦区| 岳普湖县| 南郑县|