在這個行業裏混跡了(le)很多年,最近(jìn)這幾年我(wǒ)一直在想個問(wèn)題:軟件(jiàn)到底是什麽?應該歸類(lèi)為(wéi)——科學?工程?還是(shì)藝術?
最近看了西班牙軟件專家Albero先生在MetricView雜誌上的一篇文章(zhāng)——《敏捷與(yǔ)功能規模》,開(kāi)篇就說道:盡管軟件行業總(zǒng)是(shì)能夠發明和創造一些新的技(jì)術,但是歸根結底可以將其歸屬為藝(yì)術。比爾蓋茨也曾經說過:軟件是藝(yì)術與工程的偉(wěi)大(dà)結合。
這篇文章給了我很多啟示,我大致地(dì)給國內的朋友們介紹一下,並不會完全依(yī)賴於原文,同時也會夾雜一些我的(de)感想。
怎麽體現軟件的藝術性呢?假設,有兩個軟件產(chǎn)品擁有相同的功能,表麵上看來沒有差別,但是(shì)內涵卻截然不同,肯定其中有(yǒu)一個的性能更好;維護費(fèi)用更低;用了更(gèng)少的代碼行;有更少的缺陷和風險。總之,有一個軟件相比(bǐ)較會做得更加“藝術”。
軟件是否藝術,取決於以下幾(jǐ)個因素:
開發團隊的技術知識;需求的(de)質量;開發團隊和管理團隊的“常識(common sense)”。
在英文世界裏,common sense,是個魔力詞組。從公元前300多年(nián),亞裏士多德就開始思考(kǎo),直(zhí)到2000多年後的今天,很多人還是不(bú)能夠理解其哲學思辨。
這幾(jǐ)項要求有時(shí)候(hòu)很簡單,有(yǒu)時候(hòu)也很難實現。
如果在開發的過程中,團隊從(cóng)技術視角來做決策和行動(dòng)、存在狹隘的利益衝突、缺乏知識、存在(zài)大量的灰色概念。軟件產品很有可能就淪落“平庸”。
這(zhè)一(yī)點,其實國外的專家講(jiǎng)得還比較“樂觀”,在國內(nèi),我們經常可以看到“這根本不是我想要的”場景。盡管這些(xiē)軟件已經“發版、上市、交付、驗收(shōu)”了,但是從某種(zhǒng)意義上來講(jiǎng),它們甚至都不能被(bèi)稱之為產品。
很有挑戰性,也很有必要,我們要升級自己的觀念,那(nà)就是要(yào)給“常識”增加一個定語(yǔ)——“卓越的常識(common sense excellence)”。
其中一個卓越的常識,其實在國內也不(bú)陌生,那就是要將目標SMART化。
軟件開發和管理團隊(duì)的目標——給用(yòng)戶、客戶提供質量最好的產品;客戶(外部客戶,或者是內部客戶(hù))的目標——以(yǐ)最好的價格收獲最大的價值。
這些目標就需要SMART(Specific明確,Measurable可度量,Achievable可實現,Relevant相關(guān)性,Time bound時(shí)限性)。
其中的這個M,就是度量,是一切科學管理(lǐ)的基礎。這也是本文所要講述的重點。
那麽我(wǒ)們應該度量什(shí)麽(me)呢?
IT項目隻是個(gè)“一次性”的過程(chéng)——我國有很多的PMP,對這個常(cháng)識應該是(shì)不陌生。而IT的產品才能夠給(gěi)客(kè)戶提供戰略價值(zhí),或改善流程(更快(kuài)、更便宜)。
所以,我(wǒ)們應該(gāi)度量、監控的目標(biāo)應該是產品,而不(bú)是項目。這個常識,國內了解的可能還不(bú)多。
敏捷——項目管理領域裏春天的故事
2001年的2月中旬,在美國(guó)猶他州的“雪鳥”滑雪場,17位軟件開發(fā)的思想者(thinkers)發表了著名的《敏捷宣言》。其全稱應該是“敏捷軟件開發的宣言”。
這個敏捷宣言,也是一個“卓越共(gòng)識”。總所周知,宣言裏包(bāo)括了十二條“原則”。
仔細分析這些原則,其本質也是要強調:給(gěi)客戶提供價值。(我們(men)的最高優先級就是確保客戶滿意——通(tōng)過盡早並持續地(dì)交付有價值的軟件)產(chǎn)品一定(dìng)要滿足用戶真實的需要(yào)(needs),要做正確的事情,同時也要正確地做事,在所有(yǒu)的層麵都要步調一致……
從“卓(zhuó)越共識”的角度來(lái)看,這個宣言其實並沒有什麽(me)新意(yì)。但是有時候,尤其是我們困惑(huò)於的項目具體問題中,這些語句還是能(néng)夠給(gěi)我們指南(nán)的。
無疑這些年來(lái),敏捷給項目管(guǎn)理領域帶來春天。國內也是有越來越多的企業在嚐試。但是其給我(wǒ)們帶來的價值(zhí),很少有組織能夠(gòu)度量(liàng)、統(tǒng)計。
這裏還是要插(chā)一句,我以(yǐ)前看到的一個(gè)數據是:美國(guó)著名的(de)IT谘詢公司——Standish,從1996年開始,在每(měi)年的報告中都發布關於項目成功率的統計信息,在隨後持續超過(guò)20年的時間內,雖然IT技術以及軟件工程(chéng)方法日新月異,但IT項目的(de)成功率一(yī)直(zhí)徘徊在40%左右。也就是說(shuō),敏捷並沒很好地拯救IT項目管理領域。
要清楚4個概念
我們一定要清楚地分清兩個概念:項目、產品,並且分別對其進行正確的管(guǎn)理和度量。盡管(guǎn)這個管理思想本身很簡單,但是無論是大(dà)公司還是小公(gōng)司,也無論中外,在實踐中(zhōng)做得都不是很好。幾乎所有的度量工作都(dōu)集中於項目,甚至是合同。
客戶要實現一個IT解決方案(àn)、產品、或者是增強包,可以與開發團隊簽署不同類型的(de)合同(固定總價,單價,成本加成)。而開發(fā)團隊既可以選擇瀑布模式,也可以進行敏捷。所有這些工作都不會影響到最終產出物——產品。
隻有IT產品,才能過為客戶提(tí)供價值,並且核算最終的“有形成本”(可能包括了(le)多(duō)個項目、多個合同(tóng)、多個供應商、多個開發團隊的費用)。
另外兩個重要的概念(niàn)就是:工(gōng)作量(liàng)與規模了,對於這兩個(gè)概念就很(hěn)少有人混淆了(le)。也許(xǔ)是因為兩者(zhě)之間的相似性很小,當然了,很多人都(dōu)會有(yǒu)個誤區——認為規模越大工作量(liàng)越大,反之亦然。
無論是國外,還是國(guó)內,幾(jǐ)乎所有的項(xiàng)目都會管理工作量,但是很多項(xiàng)目都不會去管理、度量規模。
在敏捷中,經常使用“故事點”來度量規模,並計算軟件開發的工作量。故事(shì)點方法最(zuì)大(dà)的問題就是太“隨心所欲”(arbitrary)——從某種意義上來講,這也是此方法的優點,相比較於“功能點”方法,學習成本、製度的管理成(chéng)本要低很多。
但是,也正是由於這個特點,同一個公司的兩個不同團隊(duì),對於同一個故事,會(huì)估算出不(bú)同的故事點數量。盡管如此,這種方法(fǎ)對於獨立的故事而言,還是能夠起到估算、計劃、跟蹤的作(zuò)用。
國際(jì)著名(míng)的軟件工程專家Caper Jones曾經總結出“軟件度量的十三(sān)條準則”,故事點方法最多隻能滿足(zú)其中的四條。這個方法不能標準化,非常含糊其辭(容(róng)易引發歧義),不足以發布組織級的數據(例如:生產率),不適(shì)用於其他(tā)的新項目或曆史項目,不能轉換為其他(tā)相關(guān)的度量數據,不(bú)能適用所有的(de)產出物,不(bú)能夠支撐(chēng)所有類型的軟(ruǎn)件,也不支持重複使(shǐ)用。
無論是敏捷的度量,還是傳統的度量,都可以為(wéi)我們打開“產品度量”的大門。如此度量得(dé)出的數(shù)據,可以作為其他戰略性度量的基礎。
相同的IT產品其(qí)“規模”肯定也是(shì)相(xiàng)同的,而不管是其創造的過程是敏捷,還是瀑(bào)布。也(yě)不管是用什(shí)麽的合同類型。如果有可能,我們倒是可以做個對照試驗,用不同的項目管理方式打造相同的IT產品,比較不同項目的進度、成本、質量等(děng)特性指標。
完美的結合
在敏捷的項目度量中(zhōng),使用(yòng)ISO標準的“功能規模度量”來度量產品,將會是一個完美的結合。
實際上,客戶接收(shōu)、使用的隻是產品,而不(bú)是項目。
就像是我們去(qù)超市(電商)買東西一樣(yàng),我們要預先分析一下:產品的質(zhì)量、價(jià)格、品牌等等特性,但是我們幾乎(hū)不關心生產廠(chǎng)商如何管(guǎn)理內部(bù)項目(mù),使用什麽樣的設備和工具。這些本(běn)身也是“黑箱”。
作為客戶,我們更應該(gāi)關注、度量(liàng)產品的功(gōng)能、質量、價格。對於某類的(de)商品,我們還會比較單價——每平方米、每(měi)升、每斤。
我們買一些標準的軟件產品,也是如此。但是,對於一些“非標”的軟件產品,作為用戶、客戶的(de)我(wǒ)們(men),為什(shí)麽要去糾結項(xiàng)目的度量?而不是產品(pǐn)本身的。
這裏,我要補充一下,無論是買軟件還是其他東西,首要關注的還是——產品功能以及應用場景,是否能夠滿足自身的需求。
國際(jì)上有5個關於“功能規模度量”的ISO/IEC的(de)標準,這5個標準(zhǔn)表麵(miàn)上是競爭關係,但實際上,互相之間有(yǒu)著較強的聯係和(hé)互補。
在使用這些ISO的規模度量方法,我們(men)應該有意地去忽略項目的概念(niàn),而更加關注於(內部/外部)產品本身。一個產品,可能由不(bú)同類型的(de)項目生成,但是規模是固定的。也就是說,產品的(de)規(guī)模,與項目的類型沒有關係。
將產品與項(xiàng)目的管理信息結合,我們將得到(dào)、推(tuī)算出更有用(yòng)的信息(xī)。“產品所有者”(product owner),企業的高層管(guǎn)理者最關心的也是這些內容——產品的收入和成本。
敏捷項目管理度量(liàng),比較於傳統(tǒng)項目(mù)管理,可能有自己的節奏和目的。很多人(rén)會出(chū)於種種目的,將敏捷度量(liàng)搞得於傳統(tǒng)項目度量大相逕庭。
但是無論如何,敏(mǐn)捷其最終目的還是(shì)產品。產品要被度量(liàng),產品的規(guī)模、質量、生產率和價格等(děng)指標,也都是與項目、項目集獨立的。
敏捷隻是項目管理領域的一個“常識”,而不是一個獨立的(de)“生態”。
最後,說下我的反省——
第(dì)一點:目前,在我國的IT領(lǐng)域,是否也(yě)是(shì)有點重項目而輕產品(pǐn)?就拿度量這個事情來(lái)講(jiǎng),在國內做得最好(hǎo)的金融行業裏,度量的也大多是與項目管理(lǐ)有(yǒu)關的指標。
第二點:我國很多(duō)傳統的IT應用領域(yù),無論是甲方還是乙方,還(hái)沒有開始意識到IT項目度量(liàng)的重要性,而國外的企業就已經要將管理的(de)重點轉移了。(來源:北京軟件造價評估聯盟)