軟件研發(fā)的十大浪費(fèi):研發(fā)效能的另一面
“兩打程序員,3年時(shí)間,4732個(gè)bugs , 和對(duì)非凡軟件的不懈追求”
《夢(mèng)斷代碼》這本書,是我十幾年前看的,一口氣讀完。當(dāng)時(shí)我還在Cisco(思科)工作,感覺研發(fā)團(tuán)隊(duì)犯過的錯(cuò)誤,在這本書中基本都能見到。
當(dāng)年Lotus 1-2-3的設(shè)計(jì)者M(jìn)itchell Kapor,離開Lotus后成立了開源應(yīng)用基金會(huì)(OSAF),招募了一批很牛的程序員,開發(fā)號(hào)稱革命性的下一代個(gè)人信息管理系統(tǒng)--Chandler。這個(gè)團(tuán)隊(duì)似乎不缺錢、不缺技術(shù)、不缺經(jīng)驗(yàn),但偏偏不能發(fā)布一款看似簡(jiǎn)單的軟件。 6年過去了, Chandler 勉強(qiáng)掙扎著發(fā)布了0.7版,花掉幾百萬美元,但最終還是失敗了,夢(mèng)斷代碼。
在長(zhǎng)達(dá)6年的馬拉松里面,犯了一系列的錯(cuò)誤,導(dǎo)致本來很有希望的項(xiàng)目半死不活。 例如,Chandler項(xiàng)目成員決定用P2P架構(gòu)來共享日歷,但沒有全力設(shè)計(jì)相關(guān)算法或協(xié)議,而是花大量時(shí)間去討論Chandler的界面,這一拖就是幾個(gè)月,最后P2P架構(gòu)被徹底放棄,這是極大的浪費(fèi)。像這種做了,然后被推翻了,在軟件研發(fā)中也司空見慣。
上一篇討論了 軟件研發(fā)效能的負(fù)面清單:哪項(xiàng)是頭號(hào)敵人? 今天,討論軟件研發(fā)效能的另一面,即軟件效能的反面,造成軟件效能低下的 “ 浪費(fèi) ”。浪費(fèi)可以分為:
- 直接浪費(fèi) :不需要的開發(fā)成本或直接能感受到的浪費(fèi),如(沒人使用的代碼;被注釋掉的代碼,從未被使用過的功能、過度測(cè)試等;
- 間接浪費(fèi) :不是直接能看到的開發(fā)成本,如低劣的質(zhì)量、代碼復(fù)雜度、溝通效率低等帶來的額外成本。
這里不管它是直接成本,還是間接成本,不看它產(chǎn)生的原因,而是看它產(chǎn)生的結(jié)果,我把它總結(jié)為十大浪費(fèi)。
第10大浪費(fèi):做的工作沒有及時(shí)發(fā)揮效益
例如,寫完的代碼沒有及時(shí)提交到代碼庫中去構(gòu)建,還在開發(fā)人員本地機(jī)器中;通過測(cè)試的功能還沒有交付給用戶用,相當(dāng)于在公司的庫存中,沒有產(chǎn)生效益。
第9大浪費(fèi):不同角色或不同任務(wù)之間的切換
例如,一個(gè)人參與多個(gè)項(xiàng)目,需要在不同的任務(wù)間切換,熟悉過多的業(yè)務(wù)和項(xiàng)目背景,經(jīng)常切換思維、切換虛擬的工作空間,會(huì)造成比較多的時(shí)間浪費(fèi)。
第8大浪費(fèi):軟件中不必要的交接
軟件中任務(wù)的交接,自然會(huì)增加學(xué)習(xí)成本,增加了溝通的成本,雖然在日常軟件研發(fā)中不可避免存在交接,但不必要的交接或過度的交接,都會(huì)帶來浪費(fèi),例如:
- 人員流動(dòng)率比較大(如高于20%),老人和新人的工作交接
- 開發(fā)人員和測(cè)試人員間的交接,如開發(fā)、測(cè)試是兩個(gè)相對(duì)獨(dú)立的團(tuán)隊(duì);
- 軟件從開發(fā)到部署的交接(如果實(shí)施有效的DevOps,這種成本就很低)
第7大浪費(fèi):過度的工作(超出范圍)
因?yàn)?nbsp;缺乏有效的流程、文檔和一致性要求等, 工作中沒有準(zhǔn)確了解項(xiàng)目或任務(wù)的范圍,做了范圍之外的工作,或者不能做到恰到好處,包括過度管理、過度測(cè)試、寫了過多的文檔、過度溝通(太多的會(huì)議)等。
第6大浪費(fèi):等待
許多人等待其他人的工作,例如團(tuán)隊(duì)的溝通協(xié)作不夠主動(dòng),等待其他人找上門;開發(fā)測(cè)試配合不默契,測(cè)試等待開發(fā)提交新的版本;各個(gè)環(huán)節(jié)銜接不好,中間都會(huì)有等待。即使是一個(gè)團(tuán)隊(duì)或一項(xiàng)工作內(nèi)都有等待,例如沒做到持續(xù)測(cè)試,中間會(huì)有等待。有時(shí)測(cè)試環(huán)境沒準(zhǔn)備好,無法做測(cè)試,也會(huì)有等待。
第5大浪費(fèi): 一而再再而三地重復(fù)犯錯(cuò)
沒有做根因分析,頭痛醫(yī)頭、腳痛醫(yī)腳。團(tuán)隊(duì)中有些人不犯了,但另一些人再犯;某些團(tuán)隊(duì)不犯了,但其它團(tuán)隊(duì)再犯;犯的錯(cuò)誤可能各種各樣,包括糟糕的計(jì)劃、錯(cuò)誤的文檔版本等。
第4大浪費(fèi): 重復(fù)造輪子?
市面上已有開源工具或成熟的商業(yè)工具,不是直接拿來用,或直接購買工具等,而是自己開發(fā)。
第3大浪費(fèi):返工
由于 缺乏統(tǒng)一規(guī)范、系統(tǒng)復(fù)雜、人員能力弱,導(dǎo)致 低劣的質(zhì)量、產(chǎn)生很多缺陷,造成重新設(shè)計(jì)、重新寫代碼,都是返工。過度的代碼重構(gòu)、回歸測(cè)試等都?xì)w為返工帶來的浪費(fèi)。
第2大浪費(fèi): 無用的功能和代碼
無用的功能和代碼,類似“生產(chǎn)過?!?,根據(jù)一些數(shù)據(jù)統(tǒng)計(jì)的結(jié)果,在現(xiàn)有的軟件應(yīng)用程序中,多達(dá)2/3功能幾乎或從未被使用過。包括 沒人使用的代碼、被注釋掉的代碼等。
第1大浪費(fèi): 整個(gè)產(chǎn)品方向性錯(cuò)誤
對(duì)用戶需求、業(yè)務(wù)理解的方向性錯(cuò)誤,整個(gè)產(chǎn)品上線后失敗,沒人用。