創(chuàng)造有用的軟件是門工藝。這是沒有非黑即白的成功公式的。但是,卻有一些
敏捷工程實(shí)踐,實(shí)踐證明它已經(jīng)屢次為企業(yè)增加了價(jià)值,但前提是要考慮周全之后再使用。在本文中,我將與大家分享5條具體的途徑,你的企業(yè)能夠通過這些途徑從敏捷工程實(shí)踐中獲益。
(假設(shè)我們使用Scrum + 極限編程(XP)= 敏捷這條基本公式,那么在我講敏捷工程實(shí)踐時(shí)就會(huì)談到公式中與XP相關(guān)的那一部分,比如
測(cè)試驅(qū)動(dòng)開發(fā)、結(jié)對(duì)編程和持續(xù)集成。)
James Shore在一篇精辟的博客中說:
“與XP(極限編程)相比,Scrum更加簡(jiǎn)單,對(duì)原有
工作幾乎也產(chǎn)生不了多大的影響,所以我看到很多人是從Scrum開始入手的。但其中的問題是,從Scrum開始入手的團(tuán)隊(duì)比從XP開始的團(tuán)隊(duì)多得太多了。XP團(tuán)隊(duì)在開始時(shí)會(huì)經(jīng)歷更多的痛苦,但在第一年就會(huì)達(dá)到高效的狀態(tài)。”
我不僅同意他所說的,而且也親眼見過很多次這樣的情況。XP很難。它難在需要嚴(yán)格的紀(jì)律,另外,它的好處雖多卻有時(shí)難以立桿見影。
我的父親是一名牙科醫(yī)生。他有一次告訴我說“找一位好的牙科醫(yī)生是很難的。牙醫(yī)能補(bǔ)牙或者殺死牙神經(jīng),但你5年內(nèi)不會(huì)知道他做得好不好,因?yàn)槟阈枰欢螘r(shí)間之后才知道他補(bǔ)得到底好不好。”XP與之非常類似。
我清楚最好的
軟件開發(fā)人員(而且知道上千名)在高壓環(huán)境下是最遵守紀(jì)律的。
許多開發(fā)人員體驗(yàn)了敏捷/Scrum/精益/XP的做法。但是,嚴(yán)格的截止日期臨近時(shí),或者團(tuán)隊(duì)已經(jīng)拖期時(shí),再或者公司要求團(tuán)隊(duì)“快速完成”時(shí),他們還能維持多高的紀(jì)律水平呢?
There are many XP practices. The most valuable ones for a business are:
現(xiàn)在有很多XP實(shí)踐,其中對(duì)商業(yè)而言最有價(jià)值的是:
測(cè)試驅(qū)動(dòng)開發(fā)—TDD是你的商業(yè)安全網(wǎng)。因?yàn)闇y(cè)試是在編碼之前完成的,所以寫完的測(cè)試一定會(huì)運(yùn)行失敗,接下來再寫代碼使測(cè)試可以通過。TDD保證你的產(chǎn)品功能,不管公司和技術(shù)團(tuán)隊(duì)實(shí)現(xiàn)的是大規(guī)模的變更還是小規(guī)模的變更。
結(jié)對(duì)編程—讓2名開發(fā)人員寫同一段代碼,使用同一個(gè)鍵盤和同一臺(tái)顯示器。因?yàn)榻Y(jié)對(duì)大大降低了浪費(fèi)的時(shí)間和缺陷,所以能帶來更高質(zhì)量的代碼,并帶來高水平的協(xié)作。
集體代碼所有制和持續(xù)集成—如果每段代碼不只有一個(gè)人熟悉,那么就不會(huì)有什么交流瓶頸了。把代碼持續(xù)集成到一個(gè)主干可以避免重復(fù)和不匹配的代碼。
重構(gòu)—在當(dāng)時(shí)的情況下,寫的代碼是解決已知問題的。通常,團(tuán)隊(duì)巧妙地解決了他們的問題,然后持續(xù)重構(gòu)和修改代碼,確保代碼庫能以最為高效的方式不斷滿足業(yè)務(wù)最新的需要。
然而給定的XP很難,它需要連續(xù)的訓(xùn)練和一定的時(shí)間保證才能做得好,高管們要的是速度。技術(shù)總監(jiān)們、副總裁們、首席執(zhí)行官們說“我希望我的工程團(tuán)隊(duì)獲得更好的敏捷工程實(shí)踐效果,使我們變得更快。”
最初,我同意 James Shore所說的,XP的確很難,實(shí)際上它違反了敏捷幫助團(tuán)隊(duì)更快的理念。事實(shí)上,XP有陡峭的
學(xué)習(xí)曲線,而且很自然的是,這需要一定的學(xué)習(xí)時(shí)間,學(xué)習(xí)XP的團(tuán)隊(duì)肯定比什么都不學(xué)的團(tuán)隊(duì)更慢。
所以,如果“更快”不是敏捷工程實(shí)踐真正的價(jià)值,那么什么才是它真正的價(jià)值呢?
我認(rèn)為,敏捷工程實(shí)踐真正的價(jià)值是,它們讓公司以某種方式擁抱變化,事實(shí)上,這將成為一種競(jìng)爭(zhēng)優(yōu)勢(shì)。
為什么呢?
當(dāng)我們進(jìn)入2014年,這個(gè)論點(diǎn)將在邏輯上成為合理的。如果現(xiàn)實(shí)果真如此,那么以此推理,在接下來的十年間,那些充分利用軟件構(gòu)建流程的公司將走向成功。
是的,這個(gè)道理大家都懂,有很多競(jìng)爭(zhēng)優(yōu)勢(shì)是軟件之外的。例如,那些能夠充分利用數(shù)學(xué)工式去預(yù)測(cè)未來股票的對(duì)沖基金將擁有競(jìng)爭(zhēng)優(yōu)勢(shì)。那些能夠充分利用布藝和顏色去預(yù)測(cè)未來時(shí)尚的零售商店將擁有競(jìng)爭(zhēng)優(yōu)勢(shì)。但是,隨著7乘24小時(shí)的網(wǎng)絡(luò)連接和全球信息共享,你剛想到一個(gè)好點(diǎn)子,你的競(jìng)爭(zhēng)對(duì)手就將會(huì)去模仿它了。
這讓我們兜了一圈又回到剛才的觀念,那些能夠充分利用軟件構(gòu)建流程的公司將超過他們的競(jìng)爭(zhēng)對(duì)手,擁有巨大的競(jìng)爭(zhēng)優(yōu)勢(shì)。這個(gè)概念的關(guān)鍵詞是“流程”。它是技術(shù)棧無關(guān)的。從敏捷工程實(shí)踐中充分獲益的關(guān)鍵是,出現(xiàn)危機(jī)的時(shí)候仍能極力地堅(jiān)持最起碼的流程原則。這就像是鍛煉身體。假設(shè)你休假的時(shí)候每周鍛煉五次,上班的時(shí)候每周鍛煉一次,那么實(shí)際上你每周只會(huì)鍛煉一次。如果離截止日期還遠(yuǎn)的時(shí)候才實(shí)踐結(jié)對(duì)和TDD,一旦要到截止日期了就把敏捷拋到一邊,那就說明你并沒有勤奮地實(shí)踐敏捷流程。
能夠讓企業(yè)通過使用敏捷工程實(shí)踐獲益的五種具體方法是:
1.可以隨機(jī)應(yīng)變的靈活性
我的公司為大型零售商創(chuàng)建了一個(gè)電子商務(wù)平臺(tái)。在六個(gè)月的開發(fā)周期中,前三個(gè)月團(tuán)隊(duì)具有自主權(quán)。我們兩周一個(gè)迭代,并且每?jī)芍馨l(fā)布一次代碼。某天,產(chǎn)品團(tuán)隊(duì)做競(jìng)爭(zhēng)情報(bào)研究時(shí)發(fā)現(xiàn),一個(gè)競(jìng)爭(zhēng)對(duì)手針對(duì)退貨修改了他們銷售和信用卡的處理方式。因?yàn)槲覀兺瓿傻拇a上個(gè)迭代已經(jīng)充分測(cè)試了,并和其他代碼集成好了,而且已經(jīng)發(fā)到生產(chǎn)環(huán)境中了,所以我們清楚自己的代碼非常可靠,即使變更也不會(huì)有任何宕機(jī)或缺陷之類的重大風(fēng)險(xiǎn)。
第二天,我們決定不再繼續(xù)既定的構(gòu)建,而是開了個(gè)需求收集會(huì),估算多久能完成新的特性,并對(duì)用戶故事重新排序。數(shù)天之內(nèi),我們就把一組新特性確定好范圍,排好優(yōu)先級(jí),由團(tuán)隊(duì)優(yōu)先來完成這些任務(wù)。兩周之后,修改后的信用卡退貨引擎就發(fā)布到生產(chǎn)環(huán)境中了。沒發(fā)現(xiàn)任何缺陷,銷售團(tuán)隊(duì)對(duì)此非常滿意。
這完全得益于包括測(cè)試驅(qū)動(dòng)開發(fā)在內(nèi)的敏捷工程實(shí)踐,公司清楚他們能夠依靠技術(shù)團(tuán)隊(duì)快速應(yīng)變,盡可能地降低在線品牌展示質(zhì)量的風(fēng)險(xiǎn),從而始終保持著市場(chǎng)的競(jìng)爭(zhēng)力。
2.可以實(shí)時(shí)地重新分配開發(fā)團(tuán)隊(duì)的成員
如果要達(dá)到這種隨機(jī)應(yīng)變的靈活性,在兩周內(nèi)就發(fā)布新的信用卡退貨引擎,那么團(tuán)隊(duì)在本迭代只為這個(gè)特性上安排兩名工程師就不太夠了,實(shí)際需要四名。由于團(tuán)隊(duì)采用了結(jié)對(duì)編程和集體代碼所有權(quán)的緣故,所以團(tuán)隊(duì)中的成員熟悉每一段代碼,我們可以隨便拉一對(duì)已經(jīng)完成其他故事的程序員去完成這個(gè)新的優(yōu)先級(jí)更高的故事,當(dāng)我們重新排定的優(yōu)先級(jí)之后仍能維持原有的速率。
使用敏捷工程,項(xiàng)目不會(huì)因?yàn)槟硞€(gè)搖滾巨星無法從其他事情中分身而阻礙了進(jìn)程。整個(gè)團(tuán)隊(duì)可以轉(zhuǎn)向新的需求。為新功能配備的最佳配置可以專心去完成新功能。團(tuán)隊(duì)處在一個(gè)不斷交流的氛圍中,所以為一個(gè)故事增加更多的工程師會(huì)很順利,不會(huì)產(chǎn)生任何混亂。
3.自然而然地避免了去廢棄持續(xù)了幾個(gè)月的工作
經(jīng)過充分測(cè)試再發(fā)布生產(chǎn)環(huán)境的代碼還有另外一個(gè)好處,一旦完成就不會(huì)被廢棄。當(dāng)我們確認(rèn)需要完成信用卡退貨特性時(shí),就可以把工作重心直接轉(zhuǎn)到這個(gè)優(yōu)先級(jí)更高的新特性上。在這個(gè)過程中不需要廢棄任何工作。在我們要開始這項(xiàng)新工作之前,沒有必須要完成或推遲的半成品。已完成的所有代碼都是高質(zhì)量的、無缺陷的、完整的和有效的。
4.堅(jiān)信已完成的特性永遠(yuǎn)代表著項(xiàng)目最重要的那部分
幾年前,我的團(tuán)隊(duì)為一個(gè)大型政府機(jī)關(guān)項(xiàng)目做一個(gè)項(xiàng)目。這個(gè)項(xiàng)目是個(gè)長(zhǎng)期合作,我們編碼就用了一年。因?yàn)槲覀兪褂昧嗣艚莨こ虒?shí)踐,所以代碼會(huì)被持續(xù)發(fā)布到生產(chǎn)環(huán)境中。
在某一天的早晨,一位干系人對(duì)這個(gè)項(xiàng)目的優(yōu)先級(jí)有了一些新的想法。他擔(dān)心因此可能會(huì)使其他重要功能無法完成了。他不熟悉每天的項(xiàng)目進(jìn)度,也沒有意識(shí)到敏捷的商業(yè)價(jià)值。
所幸,工程團(tuán)隊(duì)實(shí)際上是緊貼業(yè)務(wù)開展工作的,每?jī)芍馨礃I(yè)務(wù)的優(yōu)先級(jí)完成他們的工作,在過去的一年中,最重要的特性已經(jīng)完成了、已經(jīng)完全集成在一起了、已經(jīng)充分測(cè)試了,它們的質(zhì)量堅(jiān)若磐石。
公司堅(jiān)信在任何時(shí)間點(diǎn)完成的都是最重要的特性。干系人可以放心軟件的任何變更,不但多大都可能,而且都可以欣然接受且風(fēng)險(xiǎn)很低。
5. 能營(yíng)銷活動(dòng)策劃充滿信心
我們都曾經(jīng)經(jīng)歷過這樣的事,公司策劃一場(chǎng)營(yíng)銷活動(dòng)。我經(jīng)常和團(tuán)隊(duì)在一起工作,他們需要在確定的日期內(nèi)完成軟件的編碼。去年,我負(fù)責(zé)一個(gè)教育服務(wù)性企業(yè)的項(xiàng)目。一場(chǎng)營(yíng)銷活動(dòng)已經(jīng)全面鋪開。我們有一個(gè)明確的期限:返校日期。他們希望返校期間能產(chǎn)生巨大的銷售額,所以這些特性必須在八月十號(hào)之前上線。由于日期是固定的,這場(chǎng)營(yíng)銷在電視、報(bào)刊和在線廣告上也花費(fèi)了大量的費(fèi)用,電子商務(wù)網(wǎng)站必須在規(guī)定的日期內(nèi)具備最必要的特性。
通常接下來會(huì)發(fā)生什么事呢?我看到無數(shù)的工程團(tuán)隊(duì)最終會(huì)處于一種左右為難的境地。八月一號(hào)那天,產(chǎn)品經(jīng)理意識(shí)到無法滿足時(shí)間要求,如果想讓產(chǎn)品如期上線,工程團(tuán)隊(duì)就要在接下來的兩周里每周拼命地干100小時(shí)的活。但是,如果團(tuán)隊(duì)的工作強(qiáng)度如此之大,就會(huì)把人搞得非常地疲勞和焦慮,這樣就很容易出現(xiàn)工作上的失誤。
如果團(tuán)隊(duì)能夠設(shè)法做到嚴(yán)守敏捷原則,繼續(xù)依靠工程最佳實(shí)踐,那么測(cè)試驅(qū)動(dòng)開發(fā)、持續(xù)集成、結(jié)對(duì)編程和其他方法將引導(dǎo)團(tuán)隊(duì)準(zhǔn)時(shí)地發(fā)布并靈活地安排休息時(shí)間。
團(tuán)隊(duì)只需這么做。我們?cè)诟邏簳r(shí)堅(jiān)守敏捷原則,并握緊手里的槍。使用敏捷能為營(yíng)銷活動(dòng)帶來信心,其關(guān)鍵就是堅(jiān)信這樣的一個(gè)事實(shí),其實(shí)許多特性可以有多種實(shí)現(xiàn)方式。例如,假設(shè)有一個(gè)特性是要把視頻上傳到你的網(wǎng)站上,那么至少有兩種實(shí)現(xiàn)方式。方案A:花10天時(shí)間開發(fā),使用戶可以上傳任何語言、任何格式和任何長(zhǎng)度的視頻文件。方案B:花1天時(shí)間開發(fā),讓用戶可以把YouTube的鏈接粘到一個(gè)輸入框里。
你怎么選擇我不得而知,但如果我是產(chǎn)品經(jīng)理,而且時(shí)間已經(jīng)到八月一號(hào)了,那我肯定會(huì)選擇方案B。
最終的結(jié)果是,我們?cè)诎嗽率?hào)成功地發(fā)布了產(chǎn)品,它包含了所有的關(guān)鍵特性。我們有意欠下了大量的技術(shù)債,包括選擇用一天的時(shí)間完成視頻上傳的特性。八月十號(hào)一帆風(fēng)順,之后我們把新特性和之前欠下的技術(shù)債重新排定了優(yōu)先級(jí)。我們把技術(shù)債和新特性一起放到故事列表中重新排序,快速恢復(fù)到了兩周一個(gè)迭代的平穩(wěn)工作效率中。
概括起來說,敏捷工程實(shí)踐的價(jià)值已經(jīng)超越了工程團(tuán)隊(duì),對(duì)整個(gè)企業(yè)的好處是顯而易見的。持續(xù)運(yùn)用高效開發(fā)過程的公司將帶著巨大的優(yōu)勢(shì)同我們一起走進(jìn)下個(gè)十年。讓你的團(tuán)隊(duì)以最適合的方式去實(shí)現(xiàn)敏捷工程實(shí)踐吧,如果你有任何問題都可以向我提問,我會(huì)非常樂意地與你一起一邊喝喝咖啡、喝喝啤酒一邊詳細(xì)地交流討論的。
關(guān)于作者
Debbie Madden是一位經(jīng)驗(yàn)豐富的管理人員、戰(zhàn)略顧問和接口人。目前,她是 Stride的首席執(zhí)行官,為高管和企業(yè)家們提供戰(zhàn)略建議和一些首席驚喜官的咨詢。Debbie信奉以人為本。她的生活和工作都堅(jiān)守著熱情、誠(chéng)實(shí)、勇敢、公平的基本原則。她專門為技術(shù)、專業(yè)服務(wù)和初創(chuàng)公司提供指導(dǎo)和咨詢。Debbie堅(jiān)信,在接下來的十年軟件構(gòu)建流程將成為公司的巨大優(yōu)勢(shì)。敏捷和初創(chuàng)引發(fā)了她的思考。她相信,迭代、協(xié)作的方法會(huì)把權(quán)力授予團(tuán)隊(duì),個(gè)人愛好與商業(yè)優(yōu)先級(jí)將保持一致。已經(jīng)過去的十年,Debbie一直在經(jīng)營(yíng)Cyrus Innovation。最近,她已經(jīng)成為Cyrus的首席執(zhí)行官,把這家公司從一無所有發(fā)展到了規(guī)模達(dá)60人、價(jià)值數(shù)百萬美元、五次獲得Inc5000強(qiáng)增長(zhǎng)最快的私營(yíng)企業(yè)稱號(hào),并被Crain評(píng)為紐約最好的工作場(chǎng)所。