星標(biāo)關(guān)注,第一時(shí)間獲取IDCF社區(qū)資訊,了解活動(dòng)動(dòng)態(tài),福利多多不容錯(cuò)過!
作者:
楊凌宇(現(xiàn)就職中國(guó)電信研究院)
(資料圖片)
研發(fā)效能(DevOps)工程師認(rèn)證學(xué)員
前言
在如今軟件開發(fā)流程和工具愈發(fā)成熟的現(xiàn)狀下,敏捷似乎是所有軟件產(chǎn)品團(tuán)隊(duì)前進(jìn)的目標(biāo)。很多團(tuán)隊(duì)都宣稱自己是敏捷團(tuán)隊(duì),但實(shí)際上,他們更多是在一定程度上達(dá)到了敏捷。我們?cè)诿艚輰?shí)踐的過程中,總會(huì)與理想中的情況存在差距,所以我們更多要思考的不是怎樣徹底的達(dá)到敏捷,而是在當(dāng)前的實(shí)際情況下,怎樣更好的運(yùn)用敏捷的思想去改進(jìn)。敏捷涵蓋的范圍非常廣,從需求收集,到產(chǎn)品設(shè)計(jì)、開發(fā)交付、測(cè)試安全、運(yùn)維保障等一系列流程,都可以運(yùn)用敏捷的思想。其中開發(fā)交付的過程,是真正建設(shè)出一個(gè)產(chǎn)品的過程,我作為一名一線的開發(fā)人員,也更想談一談在開發(fā)過程中,以及對(duì)于開發(fā)團(tuán)隊(duì)來說,如何進(jìn)行敏捷的轉(zhuǎn)型。
何為敏捷開發(fā)
敏捷開發(fā)是以用戶的需求為核心,把大的需求進(jìn)行拆分,采用迭代式的方法進(jìn)行開發(fā),使軟件一直處于可發(fā)布狀態(tài)。敏捷開發(fā)離不開團(tuán)隊(duì)合作。在任何形式的團(tuán)隊(duì)中,大家都會(huì)強(qiáng)調(diào)“teamwork”這個(gè)詞,敏捷開發(fā)團(tuán)隊(duì)的一個(gè)重要思想其實(shí)也是“teamwork”,我們稱為“協(xié)同”。
在一個(gè)Scrum團(tuán)隊(duì)中,有產(chǎn)品設(shè)計(jì)人員、開發(fā)人員、測(cè)試人員等,大家協(xié)同工作,以此構(gòu)成了產(chǎn)品的完整生命周期。在大團(tuán)隊(duì)內(nèi)有大團(tuán)隊(duì)的協(xié)同,在小團(tuán)隊(duì)也要有小團(tuán)隊(duì)的協(xié)同。對(duì)于開發(fā)團(tuán)隊(duì)來說,當(dāng)其內(nèi)的開發(fā)成員能夠在敏捷上達(dá)成共識(shí),勁往一處使,這樣形成的合力才是最大的,這個(gè)團(tuán)隊(duì)才算是開始走向敏捷。在這之后,團(tuán)隊(duì)共同選擇合適的敏捷開發(fā)工具,定義敏捷開發(fā)的流程和規(guī)范,使得敏捷思想能夠真正落入到敏捷實(shí)踐中,從而實(shí)現(xiàn)團(tuán)隊(duì)的敏捷轉(zhuǎn)型,并能夠持續(xù)低成本高效的交付價(jià)值。
敏捷開發(fā)團(tuán)隊(duì)的核心思想
早在2009年,F(xiàn)lickr在演講中提出了一個(gè)非常重要的理念:“一個(gè)中心,兩個(gè)基本點(diǎn)”。其中兩個(gè)基本點(diǎn)一個(gè)是堅(jiān)持協(xié)作化,一個(gè)是堅(jiān)持自動(dòng)化,那么在敏捷開發(fā)中,這兩個(gè)理念也同樣適用。協(xié)作化是提高生產(chǎn)力,自動(dòng)化是提高生產(chǎn)效率,其目標(biāo)都是為了持續(xù)低成本高效交付價(jià)值。那么一個(gè)開發(fā)團(tuán)隊(duì)在向敏捷轉(zhuǎn)型的時(shí)候,重點(diǎn)考慮的就是這兩個(gè)點(diǎn):提高協(xié)作化、提高自動(dòng)化。
提高協(xié)作化
提高協(xié)作化,需要團(tuán)隊(duì)成員形成協(xié)同的理念,達(dá)成協(xié)同的共識(shí)。在傳統(tǒng)DevOps(開發(fā)運(yùn)維一體化)中,把開發(fā)和運(yùn)維的各個(gè)階段串通了起來,強(qiáng)調(diào)的是開發(fā)人員和運(yùn)維人員的協(xié)同。在開發(fā)團(tuán)隊(duì)內(nèi)部,需要各個(gè)開發(fā)成員之間的協(xié)同。直接給團(tuán)隊(duì)灌輸協(xié)作化的思想是難以改變的,但可以采取以下的一些實(shí)際的措施,去促進(jìn)團(tuán)隊(duì)的協(xié)作化行動(dòng)。
1、多溝通和交流。在很多公司中,一個(gè)開發(fā)團(tuán)隊(duì)往往是坐在一起的,甚至是在一個(gè)相對(duì)獨(dú)立的會(huì)議室中圍成一圈辦公,這個(gè)就是一個(gè)最佳實(shí)踐。在很多人的傳統(tǒng)印象中,開發(fā)人員比較少言寡語,他們喜歡專注在自己的世界里默默開發(fā),不太愿意與人交流,而這可能就是阻礙敏捷的一個(gè)重要原因。在敏捷中強(qiáng)調(diào)個(gè)體與互動(dòng),當(dāng)大家能夠坐在一起開發(fā),能夠face to face的去溝通,就能快速解決很多問題。例如對(duì)當(dāng)前的開發(fā)需求理解是否到位?當(dāng)前開發(fā)遇到的Bug如何解決?當(dāng)前的功能是否已經(jīng)有相關(guān)的實(shí)現(xiàn)可以復(fù)用?當(dāng)前自己手頭上的任務(wù)完成是否可以給予其他成員幫助?如果大家都愿意這樣,就能發(fā)揮出一個(gè)團(tuán)隊(duì)最大的價(jià)值,補(bǔ)齊了可能因木桶效應(yīng)存在的短板,所有開發(fā)人員作為一個(gè)整體來交付代碼,大家的知識(shí)和能力也得到了共享、提升。在Scrum5個(gè)會(huì)議中的每日站會(huì),也是為了加強(qiáng)溝通交流,拉齊信息,提出問題,尋求幫助,其本質(zhì)思想是一樣的。而缺乏溝通和交流的團(tuán)隊(duì),會(huì)造成極大的浪費(fèi),如等待的浪費(fèi)、尋找信息的浪費(fèi)、移交的浪費(fèi)、尤其是對(duì)人才的浪費(fèi)(人的價(jià)值沒有得到最大的展現(xiàn)和發(fā)揮),對(duì)團(tuán)隊(duì)的效率影響是巨大的。
2、多幫助,少抱怨。一個(gè)開發(fā)團(tuán)隊(duì)中成員的技術(shù)水平難免參差不齊,作為資深的前輩,要能夠在各個(gè)方面給予后輩幫助和支持,而不是對(duì)其進(jìn)行責(zé)備或抱怨。只有在團(tuán)隊(duì)中營(yíng)造了一個(gè)互幫互助的積極的氛圍,團(tuán)隊(duì)才能更快進(jìn)步和成長(zhǎng),從而帶來效率的提升。
3、一起討論選出合適的工作軟件,制定合適的規(guī)范。開發(fā)團(tuán)隊(duì)中的每個(gè)成員在過往的經(jīng)歷中可能都有自己擅長(zhǎng)的軟件和熟悉的規(guī)范。但是在新的團(tuán)隊(duì)中,為了團(tuán)隊(duì)的整體協(xié)作,成員需要放下自己的偏好,共同討論出最適合整個(gè)團(tuán)隊(duì)的軟件和規(guī)范,包括IDE、編碼規(guī)范、Git提交規(guī)范、CICD工具、發(fā)布流程規(guī)范等。通過一致的工作軟件和規(guī)范,加強(qiáng)團(tuán)隊(duì)的協(xié)作水平。
4、根據(jù)情況靈活調(diào)整計(jì)劃。在敏捷宣言中有這樣一句話:響應(yīng)變化高于遵循計(jì)劃。在一個(gè)開發(fā)團(tuán)隊(duì)中,不可能百分百的按照計(jì)劃進(jìn)行開發(fā),并且每個(gè)開發(fā)人員都有自己擅長(zhǎng)的技術(shù)部分和不擅長(zhǎng)的技術(shù)部分,這就導(dǎo)致每個(gè)開發(fā)人員的開發(fā)效率都是變化的。如果嚴(yán)格百分百按照計(jì)劃排期開發(fā)任務(wù),那么勢(shì)必會(huì)導(dǎo)致閑忙不均勻的狀況。而如果要把計(jì)劃先做到完美,那更是一件不太實(shí)際的事并且還要為此付出巨大的精力。所以更好的情況是,開發(fā)人員對(duì)PBL有一個(gè)初步的任務(wù)排期后,便可進(jìn)行實(shí)際的開發(fā),也就是“stop starting, start finishing”。在實(shí)際的開發(fā)過程中,根據(jù)任務(wù)的難易程度和自身的情況,靈活應(yīng)對(duì),并且團(tuán)隊(duì)成員之間互相交流幫助,這樣才能最大化團(tuán)隊(duì)的開發(fā)效率。
所以協(xié)作化實(shí)踐起來并不難,關(guān)鍵還是團(tuán)隊(duì)成員能否在協(xié)同上達(dá)成共識(shí),把團(tuán)隊(duì)放在個(gè)人之上,有榮辱與共的價(jià)值觀和使命感。
提高自動(dòng)化
如果說協(xié)作化是思想上的轉(zhuǎn)變,那么自動(dòng)化就是行動(dòng)上的轉(zhuǎn)變。通常來說軟件開發(fā)過程也是整個(gè)產(chǎn)品的交付周期中最漫長(zhǎng)的過程,所以其中能用到哪些自動(dòng)化工具和手段進(jìn)行輔助,如何提高自動(dòng)化水平尤為關(guān)鍵。從一百天交付一個(gè)版本,到一天交付一百個(gè)版本,這是一個(gè)質(zhì)的飛躍。
其實(shí),軟件自動(dòng)化的發(fā)展經(jīng)過了非常久的時(shí)間和技術(shù)沉淀。在以前,開發(fā)人員在本地編寫好代碼后,需要手動(dòng)編譯構(gòu)建,打包成軟件制品,然后通過腳本或者命令的方式部署到測(cè)試服務(wù)器上,有時(shí)還會(huì)因?yàn)榉?wù)器環(huán)境的問題造成部署過程中的各種異常。盡千辛萬苦部署成功后,交給測(cè)試人員進(jìn)行專業(yè)化測(cè)試。期間測(cè)試人員測(cè)試出的問題,開發(fā)人員修復(fù)后都要再重復(fù)一次上述的流程,耗時(shí)耗力,最后發(fā)現(xiàn)開發(fā)人員只有小部分時(shí)間在真正寫代碼,更多時(shí)間是在干一些重復(fù)性和繁瑣性的工作。后來Jenkins工具的出現(xiàn),將持續(xù)集成(CI)和持續(xù)部署(CD)都做成了可自動(dòng)化執(zhí)行。開發(fā)人員在Jenkins上配置好后,只需要編寫并提交代碼即可,其余的步驟Jenkins都能幫忙處理。在部署環(huán)境上,由于開發(fā)人員是在自己的電腦上編寫程序并調(diào)試運(yùn)行,然后需要發(fā)布到服務(wù)器上,由于環(huán)境不一致導(dǎo)致的問題也總是讓人頭疼,后來出現(xiàn)了Docker和K8S這些技術(shù),解決了部署運(yùn)維層面的統(tǒng)一和自動(dòng)化管理問題。而把這些自動(dòng)化的工具和技術(shù)結(jié)合起來,開發(fā)人員只需要把精力集中在代碼處理上即可,后面的流程都能自動(dòng)執(zhí)行。
上述自動(dòng)化技術(shù)更多聚焦于集成和部署層面,但其實(shí),軟件的自動(dòng)化不止如此,在開發(fā)層面,其實(shí)也有著很多自動(dòng)化技術(shù)。B/S架構(gòu)興起后,更多開發(fā)人員開始做Web開發(fā),但是大家可能要手寫很多Web底層的代碼,這些都是重復(fù)性的并且和業(yè)務(wù)沒有關(guān)系,所以之后便出現(xiàn)了許多Web框架,如Java中的Spring框架、C#中的ASP.Net框架。這些框架把Web底層的技術(shù)進(jìn)行了封裝,通過一些簡(jiǎn)單的配置即可實(shí)現(xiàn)很多底層邏輯的自動(dòng)實(shí)現(xiàn)。此外,現(xiàn)在的IDE越來越先進(jìn)和智能,我們通過很多插件,在開發(fā)的過程中能夠自動(dòng)幫我們生成代碼,自動(dòng)幫我們檢查代碼和糾錯(cuò)等等。
所以這些自動(dòng)化技術(shù)、工具、框架的出現(xiàn),讓開發(fā)人員能夠更聚焦于業(yè)務(wù)的實(shí)現(xiàn),減輕各種復(fù)雜繁瑣的工作,從而提升了交付價(jià)值的效率。而且隨著大數(shù)據(jù)、AI技術(shù)的愈發(fā)成熟,人們不再滿足于自動(dòng)化,而會(huì)向著更高層次的智能化前進(jìn)。對(duì)于開發(fā)人員來說,如果能夠把一些非核心功能的代碼交給AI來實(shí)現(xiàn),那無疑是生產(chǎn)效率的進(jìn)一步飛躍。
協(xié)作化和自動(dòng)化的結(jié)合
協(xié)作化和自動(dòng)化是敏捷開發(fā)團(tuán)隊(duì)轉(zhuǎn)型的兩大重點(diǎn),并且不能只看其一,而要將其有機(jī)的融合。
我曾有過一段項(xiàng)目經(jīng)歷,雖然項(xiàng)目團(tuán)隊(duì)也是按照Scrum的方式進(jìn)行組建的,每天都會(huì)開每日站會(huì)來拉齊信息、同步工作進(jìn)度,開發(fā)過程中的各種CICD自動(dòng)化工具也都有使用上,但是整個(gè)研發(fā)效能還是上不去,其實(shí)就是協(xié)作化和自動(dòng)化沒有很好的結(jié)合起來。每個(gè)人都盯著分配給自己的那些任務(wù),遇到困難時(shí)不會(huì)主動(dòng)去進(jìn)行溝通,而是自己悶著解決,這樣就拉低了整個(gè)團(tuán)隊(duì)的進(jìn)度。代碼提交的時(shí)候缺乏評(píng)審機(jī)制,所有人都想著趕緊把自己的代碼先提上去,因?yàn)橥硖岽a的人要解決沖突這種煩心事,誰負(fù)責(zé)的功能模塊出問題就誰解決,沒有一種互相協(xié)作的氛圍。表面上看這種好像是有規(guī)章有制度的形式,但其實(shí)卻背離了敏捷的思想。
所以當(dāng)我們基于敏捷的理念去做開發(fā)時(shí),大家都會(huì)用自動(dòng)化工具是一方面,更重要一方面是,大家都會(huì)用自動(dòng)化工具進(jìn)行協(xié)作開發(fā)。
敏捷開發(fā)的展望
敏捷開發(fā)的演進(jìn)是一個(gè)過程,并且沒有終點(diǎn),它會(huì)永遠(yuǎn)朝著一個(gè)目標(biāo)前進(jìn):讓人的價(jià)值最大化。無論是團(tuán)隊(duì)協(xié)同,還是借助各種自動(dòng)化工具輔助,本質(zhì)上都是在不斷地放大人的價(jià)值。隨著開發(fā)團(tuán)隊(duì)逐漸走向敏捷,也許他們每天產(chǎn)生的代碼會(huì)減少,但每天產(chǎn)生的價(jià)值一定會(huì)增加。
與其臨淵羨魚,不如退而結(jié)網(wǎng),用力擁抱夢(mèng)想,從《研發(fā)效能(DevOps)工程師》認(rèn)證開始!
7月20日開班,掃描下方海報(bào)二維碼,立即報(bào)名,考取職業(yè)技術(shù)證書,擴(kuò)展職業(yè)發(fā)展與晉升之路!
關(guān)鍵詞: