身為產(chǎn)品經(jīng)理,你懂開(kāi)發(fā)團(tuán)隊(duì)的交付過(guò)程嗎?
持續(xù)交付是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過(guò)程在一個(gè)短周期內(nèi)完成,以保證軟件可以穩(wěn)定、持續(xù)的保持在隨時(shí)可以釋出的狀況。本文作者僅希望通過(guò)通俗的語(yǔ)言,來(lái)分享自己一點(diǎn)關(guān)于“持續(xù)交付”的認(rèn)識(shí)。
我們都知道,產(chǎn)品交付,是需求實(shí)現(xiàn)的“最后一公里”路,但交付不僅僅只是“將代碼部署到測(cè)試環(huán)境,測(cè)試通過(guò)后,即可上線”一句話這么簡(jiǎn)單,交付過(guò)程涉及到復(fù)雜的流程、團(tuán)隊(duì)協(xié)作和交付工具等等,任何一點(diǎn)都會(huì)影響到產(chǎn)品的整個(gè)生命周期。
一般來(lái)說(shuō),產(chǎn)品經(jīng)理極少會(huì)參與到最后代碼交付過(guò)程中去,因?yàn)榻桓吨饕怯裳邪l(fā)、測(cè)試和運(yùn)維等角色在負(fù)責(zé),產(chǎn)品經(jīng)理最多參與進(jìn)測(cè)試階段。
事實(shí)上,所有的產(chǎn)品團(tuán)隊(duì)成員,都應(yīng)該對(duì)我們的產(chǎn)品目標(biāo)負(fù)責(zé)。一名合格的產(chǎn)品經(jīng)理,切勿從心理上,就將產(chǎn)品、測(cè)試甚至是研發(fā)、運(yùn)維的職責(zé)都完全割離開(kāi)來(lái),從需求的誕生到實(shí)現(xiàn),產(chǎn)品經(jīng)理應(yīng)該盡可能的了解和知悉每一個(gè)過(guò)程,才能讓需求實(shí)現(xiàn)更加的順暢,促使自己能夠換位思考,掌握全局。
本文主要來(lái)討論一個(gè)概念——持續(xù)交付,我并非技術(shù)出身的產(chǎn)品經(jīng)理,僅希望通過(guò)通俗的語(yǔ)言來(lái)分享自己一點(diǎn)關(guān)于“持續(xù)交付”的認(rèn)識(shí)。
持續(xù)交付是什么?
百度百科上的定義:持續(xù)交付是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過(guò)程在一個(gè)短周期內(nèi)完成,以保證軟件可以穩(wěn)定、持續(xù)的保持在隨時(shí)可以釋出的狀況。
光看這句話是不是一臉懵逼?
關(guān)于持續(xù)交付的定義,其實(shí)早有前人給出了很通俗的解釋?zhuān)?/p>
持續(xù)交付是軟件研發(fā)人員,如何將一個(gè)好點(diǎn)子,以最快的速度交付給用戶(hù)的方法。
感覺(jué)還是有點(diǎn)抽象?
沒(méi)關(guān)系,我們來(lái)解讀一下這句話:上句中、好點(diǎn)子,就是需求;交付給用戶(hù),就是需求上線,這是一個(gè)眾所周知的過(guò)程。其實(shí)這句話強(qiáng)調(diào)的是:最快的速度,也就是說(shuō)交付過(guò)程的重點(diǎn)是效率。
這和敏捷開(kāi)發(fā)的概念是不是有點(diǎn)類(lèi)似?
什么是敏捷開(kāi)發(fā)呢?
提到敏捷開(kāi)發(fā),不得不提到與之相對(duì)的一種開(kāi)發(fā)流程:瀑布流開(kāi)發(fā)——即嚴(yán)格地將開(kāi)發(fā)分隔成各個(gè)階段:需求分析、要件定義、基本設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、單體測(cè)試、結(jié)合測(cè)試、系統(tǒng)測(cè)試等。有點(diǎn)像工廠流水線,前一階段的完成才能開(kāi)始下一個(gè)階段的工作,意味著沒(méi)有回頭路,返工代價(jià)很大,用戶(hù)對(duì)需求無(wú)法反饋,十分不適應(yīng)。
這樣的開(kāi)發(fā)方式已經(jīng)無(wú)法適應(yīng)當(dāng)前的易變、模糊、不確定的互聯(lián)網(wǎng)環(huán)境了
就像斯賓塞·約翰遜說(shuō)過(guò)的:
唯一不變的,就是變化本身。
所以敏捷開(kāi)發(fā)方法像凈化空氣的春雨般出現(xiàn)了,敏捷開(kāi)發(fā)方法的核心是迭代,也就是通過(guò)2-4周的迭代時(shí)間,不斷的交付客戶(hù)的需求。每一次迭代都包含需求分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試等多個(gè)環(huán)節(jié),每一次迭代都可以生成一個(gè)穩(wěn)定和被驗(yàn)證過(guò)的軟件版本。
敏捷開(kāi)發(fā)是強(qiáng)調(diào)敏捷的軟件開(kāi)發(fā)項(xiàng)目管理方式,而持續(xù)交付是強(qiáng)調(diào)效率和靈活的一種軟件工程手法,持續(xù)交付就可以定義為敏捷開(kāi)發(fā)管理的一個(gè)子集。
怎么看待持續(xù)交付?
經(jīng)過(guò)了以上定義,大部分人對(duì)持續(xù)交付究竟是做什么的,還很茫然。接下來(lái)將結(jié)合其他概念,讓大家更深入理解持續(xù)交付。
提到持續(xù)交付,不得不提到持續(xù)集成、持續(xù)部署,也就是我們常說(shuō)的CI/CD。
- 持續(xù)集成:我所理解的持續(xù)集成是,在進(jìn)入開(kāi)發(fā)階段前,會(huì)將研發(fā)工作進(jìn)行拆解,可能是拆分成不同的功能模塊,也可能是拆分成若干個(gè)任務(wù)由不同人員來(lái)進(jìn)行開(kāi)發(fā)。拆分之后,就一定需要將代碼合并起來(lái),形成完整、有效、正常運(yùn)行的代碼,這個(gè)過(guò)程叫做集成,反復(fù)持續(xù),就叫持續(xù)集成。
- 持續(xù)部署:持續(xù)部署是持續(xù)交付的最高階段,代碼在經(jīng)過(guò)自動(dòng)化測(cè)試、單元測(cè)試或者評(píng)審后,自動(dòng)的部署到正式(目標(biāo))環(huán)境中,快速安全的交付給用戶(hù)使用。
持續(xù)交付則是一個(gè)承上啟下的過(guò)程,它是在持續(xù)集成后,通過(guò)測(cè)試、產(chǎn)品的使用和驗(yàn)證和反饋后,不斷地對(duì)產(chǎn)品進(jìn)行優(yōu)化。
我們?cè)倩仡櫱懊嫣岬降亩x:
持續(xù)交付是軟件研發(fā)人員,如何將一個(gè)好點(diǎn)子,以最快的速度交付給用戶(hù)的方法。
產(chǎn)品、測(cè)試就是所謂的第一個(gè)用戶(hù),所以這個(gè)定義還是很貼切易懂的。
持續(xù)交付,從業(yè)務(wù)層面來(lái)說(shuō),其實(shí)是存在著決策的過(guò)程的,因?yàn)樗窃诓渴鸬秸江h(huán)境之前,產(chǎn)品經(jīng)理或領(lǐng)導(dǎo)者需要做業(yè)務(wù)判斷,判斷代碼是否可正常交付?是否解決業(yè)務(wù)問(wèn)題?是否滿(mǎn)足業(yè)務(wù)需求等等?
那么持續(xù)交付從技術(shù)層面,是怎么實(shí)現(xiàn)呢?
持續(xù)交付的實(shí)現(xiàn)方向
持續(xù)交付的具體實(shí)現(xiàn)方式要從配置管理、環(huán)境管理、構(gòu)建集成和測(cè)試管理等幾個(gè)方面入手,僅僅通過(guò)一篇文章是無(wú)法講述清楚的,并且更適合由研發(fā)人員去研究和實(shí)踐,感興趣的話可以閱讀《持續(xù)交付-發(fā)布可靠軟件的系統(tǒng)方法》這本專(zhuān)業(yè)書(shū)籍來(lái)具體學(xué)習(xí)。
這里我僅僅從宏觀的產(chǎn)品角度,來(lái)總結(jié)持續(xù)交付的實(shí)現(xiàn)方向:
為令人痛苦的手動(dòng)步驟,建立起可重復(fù)、可靠的自動(dòng)化過(guò)程。每一次的修改都能夠經(jīng)過(guò)一次構(gòu)建、測(cè)試、部署、發(fā)布完整高效的自動(dòng)化驗(yàn)證過(guò)程,實(shí)現(xiàn)高速頻繁驗(yàn)證,快速解決問(wèn)題的閉環(huán)。
最后的結(jié)果就是:小批量/小粒度頻繁的進(jìn)行持續(xù)部署或發(fā)布,從而得以實(shí)現(xiàn)持續(xù)交付。
當(dāng)然,在前往這個(gè)方向的道路上, 一定要有猛藥去疴的決心,如:
(1)技術(shù)層面
- 改變dev/ops團(tuán)隊(duì)在PaaS層面所使用的工具和應(yīng)用方式;
- 改變系統(tǒng)架構(gòu)、部署架構(gòu)等。
(2)組織層面
- 優(yōu)化調(diào)整人員結(jié)構(gòu);
- 打破耗時(shí)、完全人工的流程束縛;
- ……
產(chǎn)品經(jīng)理能享受持續(xù)交付帶來(lái)的好處嗎?
持續(xù)交付所帶來(lái)的收益和價(jià)值是能覆蓋整個(gè)產(chǎn)品團(tuán)隊(duì),而不僅僅是開(kāi)發(fā)人員。
- 產(chǎn)品的靈活交付、發(fā)布可控,隨時(shí)有一個(gè)穩(wěn)定可發(fā)布的版本,產(chǎn)品人員身為產(chǎn)品前進(jìn)方向上的主導(dǎo)者,可以有效把控版本發(fā)布節(jié)奏。而且,計(jì)劃是趕不上變化的,代碼交付、功能點(diǎn)部署,是可以根據(jù)業(yè)務(wù)要求可靈活變換的。
- 產(chǎn)品人員是曝光在大眾、用戶(hù)目光底下的人,是出現(xiàn)問(wèn)題故障,要首當(dāng)其沖化解內(nèi)外矛盾的人,產(chǎn)品人員對(duì)整個(gè)產(chǎn)品上線能否正常運(yùn)行負(fù)有重要責(zé)任。同時(shí),產(chǎn)品人員還是“產(chǎn)品的第一個(gè)用戶(hù)”,我們可以享有持續(xù)交付的保護(hù),因?yàn)槌掷m(xù)交付可以保證在迭代中的每個(gè)階段或需求變化時(shí),都能夠及時(shí)測(cè)試驗(yàn)證,獲得問(wèn)題反饋。
- 因?yàn)槌掷m(xù)交付,需要持續(xù)構(gòu)建和集成代碼,并且及時(shí)部署到測(cè)試環(huán)境去驗(yàn)證,產(chǎn)品經(jīng)理以此可知悉當(dāng)前開(kāi)發(fā)的進(jìn)度和質(zhì)量,及時(shí)決策或調(diào)整,避免開(kāi)發(fā)人員無(wú)故拖延工期所導(dǎo)致的扯皮現(xiàn)象。
- 在實(shí)施持續(xù)交付后,可以做到在保證交付質(zhì)量的前提下,加快交付速度,從而更快地得到市場(chǎng)的反饋,產(chǎn)品經(jīng)理就可以盡快做出判斷,更好的引領(lǐng)產(chǎn)品的方向,最終達(dá)到擴(kuò)大收益、提高價(jià)值的終極目的。
本文由 @有餡兒的丸子 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自 Pexels,基于 CC0 協(xié)議
瀑布流開(kāi)發(fā)或者說(shuō)螺旋開(kāi)發(fā) 都是可以經(jīng)過(guò)【需求分析、要件定義、基本設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、單體測(cè)試、結(jié)合測(cè)試、系統(tǒng)測(cè)試 的】持續(xù)迭代。
敏捷開(kāi)發(fā)核心并不是【迭代,也就是通過(guò)2-4周的迭代時(shí)間,不斷的交付客戶(hù)的需求。每一次迭代都包含需求分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試等多個(gè)環(huán)節(jié),每一次迭代都可以生成一個(gè)穩(wěn)定和被驗(yàn)證過(guò)的軟件版本】。敏捷開(kāi)發(fā)重點(diǎn)是在于業(yè)務(wù)人員和技術(shù)人員的相互信任,省去復(fù)雜計(jì)劃和成熟設(shè)計(jì)(比如只勾勒草圖),減少書(shū)面文字通過(guò)直接人與人溝通來(lái)節(jié)省文檔時(shí)間和成本,不斷的通過(guò)測(cè)試和試錯(cuò)來(lái)迭代版本。
您所說(shuō)的減少書(shū)面文字的溝通時(shí)間和成本我贊同,但也只是敏捷開(kāi)發(fā)的理念之一,當(dāng)然我所說(shuō)的也不是全部。另外,我對(duì)瀑布流開(kāi)發(fā)在文中的解釋也不是局限在您上面復(fù)制的那句話里。我個(gè)人認(rèn)為,隨著時(shí)間推移,技術(shù)、方式上的進(jìn)步,以及團(tuán)隊(duì)工作的側(cè)重點(diǎn)不同,對(duì)這些項(xiàng)目管理方式都會(huì)得出不同的見(jiàn)解和感受,不是你我三言?xún)烧Z(yǔ)能說(shuō)清的。文章篇幅有限,重點(diǎn)不能偏倚,所以不能做太多持續(xù)交付概念外的解釋。謝謝您對(duì)我文章的閱讀,還提出了不同意見(jiàn),互相學(xué)習(xí) ??
謝謝回復(fù)。我只是描述我參與過(guò)的多個(gè)項(xiàng)目開(kāi)發(fā)模式下自己的理解??赡芘c你想法會(huì)不一樣。多多見(jiàn)諒。
木有木有,應(yīng)該有不同想法的碰撞,何來(lái)見(jiàn)諒一說(shuō) ??
silvia931031 互相學(xué)習(xí) ??
收藏了