創(chuàng)業(yè)公司的開發(fā)流程:改變公司的5個(gè)開發(fā)流程

1 評(píng)論 5295 瀏覽 21 收藏 10 分鐘

  大約一年前Graham和我參加了Google IO大會(huì),為的是了解未來(lái)流行的技術(shù),還有見(jiàn)見(jiàn)硅谷的技術(shù)人員。那次的經(jīng)歷非常好。我們見(jiàn)到了一群厲害人物,并且接觸到了一些新技術(shù)。先不說(shuō)其他的,那個(gè)大會(huì)上,我們收獲最大的就是見(jiàn)到了一位技術(shù)/開發(fā)的前輩和一種新的創(chuàng)業(yè)公司開發(fā)流程。

???????? 隨著HitSend的成長(zhǎng),我們依據(jù)自身所需調(diào)整了我們的開發(fā)以及開發(fā)流程。在最初我們采用了廉價(jià)的主機(jī)提供商,然后研究怎樣克服它們的局限性。我們知道有其他的方法,但是它們似乎都會(huì)增加復(fù)雜的規(guī)則和流程。本來(lái)已經(jīng)運(yùn)轉(zhuǎn)得很好了,為什么還要修改呢?

我們后來(lái)在Google IO大會(huì)里遇到了Ian。他答應(yīng)分享一些由他反復(fù)思索得到的見(jiàn)解。Ian是一名在Sendgrid工作的高級(jí)網(wǎng)頁(yè)開發(fā)者/架構(gòu)師。Ian非常厲害,對(duì)他的建議我們真的很上心。下面你會(huì)看到很多證明他值得夸獎(jiǎng)的地方(包括所開的玩笑也是從他那里偷來(lái)的)。

為了更好地管理我們的業(yè)務(wù)成長(zhǎng),我們改變了我們的創(chuàng)業(yè)公司的如下5個(gè)開發(fā)流程。如果你也認(rèn)為它只會(huì)增加復(fù)雜規(guī)則和流程,那么在結(jié)尾處你會(huì)找到一些(非學(xué)術(shù)的)這些變化產(chǎn)生的結(jié)果。

Graham正計(jì)劃著將來(lái)再發(fā)一篇文章,詳細(xì)介紹每一個(gè)步驟是如何讓我們開發(fā)和推送代碼更快捷,而且還能提高我們的代碼質(zhì)量的。這個(gè)可以作為我們?nèi)绾喂ぷ鞯牧己玫拇缶V。

  第一步:正確地使用git(/GitHub)

把我們的app分割到更好的版本庫(kù)中。這個(gè)工作目前還在進(jìn)行當(dāng)中。

“產(chǎn)品”分支是當(dāng)前部署和運(yùn)行在服務(wù)器上的分支。

“暫存”分支是處于要上線的隊(duì)列里,而且總是可部署的分支。

其他的都分到它們自己的分支。新特性,維護(hù)和熱補(bǔ)丁分支應(yīng)該有個(gè)簡(jiǎn)短但富有描述性的名字:

* 特性分支以“F-”開頭

* 維護(hù)分支以“M-”開頭

* 熱補(bǔ)丁分支以“H-”開頭

我們合并(merge)分支到暫存分支。然后暫存分支再合并到產(chǎn)品分支。團(tuán)隊(duì)對(duì)兩次合并都要做代碼檢查。(熱補(bǔ)丁可以倒著來(lái))

我們像GitHub那樣使用Pull Request:

* 如果有個(gè)大的特性(一個(gè)”Epic“),我們先為它新建一個(gè)issue。這個(gè)issue里我們策劃好最佳的處理辦法,如果它需要修改用戶界面,我們還要畫些草圖。這樣使得我們團(tuán)隊(duì)可以在任何人背道而馳之前被叫住。

* 當(dāng)我們準(zhǔn)備好開發(fā)某個(gè)特性,我們?cè)跁捍娣种习l(fā)(或者從issue轉(zhuǎn)化)一個(gè)Pull Request。我們?cè)诮⒎种Ш缶婉R上做這件事。這意味著我們的每次提交都有額外的可見(jiàn)性。

* 我們編程的時(shí)候會(huì)給團(tuán)隊(duì)屏幕截圖或者提問(wèn)。這可以做為該特征的某種生動(dòng)的歷史記錄(想想Facebook墻)

我們還向GitHub issue跟蹤器添加我們的產(chǎn)品路線圖,向里程碑區(qū)域添加我們的sprint。它允許我們把issue指派到sprint,然后計(jì)劃我們下面兩周的工作。

  第二步:輕敏捷開發(fā)

不需要進(jìn)行”敏捷開發(fā)“,但是類似。理想中它結(jié)束于10天的sprint,盡管有時(shí)候第10天還在開發(fā)。

第一天:sprint計(jì)劃日

第二天:Scrum。干活。測(cè)試。推送。

第三天:Scrum。干活。測(cè)試。推送。

第四天:Scrum。干活。測(cè)試。推送。

第五天:Scrum。干活。測(cè)試。推送。

第六天:調(diào)整Scrum。Back log grooming。測(cè)試。推送。

第七天:Scrum。干活。測(cè)試。推送。

第八天:Scrum。干活。測(cè)試。推送。

第九天:Scrum。干活。測(cè)試。推送特性分支。審查狀態(tài),為演示日準(zhǔn)備。

第十天:演示加分析加反思加sprint計(jì)劃日

這步聯(lián)合第一步,在我們每天的開發(fā)過(guò)程里帶來(lái)了很大的正面變化。

  第三步:HitSend機(jī)器人部隊(duì)

我們做了一個(gè)暫存分支部署機(jī)器人,他監(jiān)聽在SoapBox的暫存分支的代碼改動(dòng)。如果有改動(dòng),他取得代碼然后放到服務(wù)器上。他快得讓我驚奇。

產(chǎn)品分支部署機(jī)器人在產(chǎn)品分支上做的同樣的事情。

我們還做了一個(gè)Hitbot,或者叫hubot 篝火聊天室機(jī)器人. 他連到我們的github賬戶,如果我們需要的話,可以提供我們的版本庫(kù)的信息。我確信他會(huì)成為今后hack項(xiàng)目的中心。

  第四步:集體意識(shí)的規(guī)劃

我們?yōu)殚_發(fā)者貢獻(xiàn)了我們創(chuàng)建的javascript和php代碼風(fēng)格指導(dǎo)。我們有些代碼現(xiàn)在甚至也沒(méi)有遵循它們,但是它們?yōu)槲覀兲峁┝艘粋€(gè)超前的結(jié)構(gòu),有希望能夠讓生產(chǎn)的代碼,看起來(lái)像同一個(gè)開發(fā)者寫的一樣。

對(duì)于大型的項(xiàng)目,例如我們的新API,我們先把文檔編寫好。它們扮演的是提案文檔的角色。因此(在開發(fā)的時(shí)候)我們不是在發(fā)明,而是在建造。這些指南讓我們?cè)陲L(fēng)格約定上取得一致,讓我們更加并行地工作。

  第五步:測(cè)試一切

我們?cè)贖itSend下面建立了自己的Travis-CI,在各自的環(huán)境下構(gòu)建和測(cè)試SoapBox。一旦運(yùn)轉(zhuǎn)起來(lái)一切都相當(dāng)簡(jiǎn)單。

它在分支上測(cè)試:產(chǎn)品分支,暫存分支還有Pull Request對(duì)應(yīng)的分支。下面是它如何工作在我們的開發(fā)流程上的:

* 建立Pull Request,或者提交代碼到Pull Request上

* Travis獲取代碼,然后根據(jù)我們的設(shè)定,在虛擬機(jī)上進(jìn)行配置

* 對(duì)php代碼做PHP單元測(cè)試還有PHP語(yǔ)法檢查

* 然后對(duì)javascript做QUnit和jshint

Travis-CI告訴GitHub測(cè)試是否通過(guò)。如果通過(guò)了,它會(huì)把“合并”按鈕變?yōu)榫G色,未通過(guò)就是灰色。并且提供一個(gè)指向測(cè)試失敗的日志的鏈接。參見(jiàn)GitHub對(duì)這個(gè)特性的描述。

Travis持續(xù)集成,然后通過(guò)我們的篝火聊天室的Hitbot與我們交流信息。

現(xiàn)在留給我們的就是構(gòu)建我們的單元測(cè)試。當(dāng)我們的語(yǔ)法檢查和jshint通過(guò)了后就只剩下少量的測(cè)試。

 結(jié)果:

總體來(lái)看,開發(fā)的時(shí)光車從1995年駛到2013年,一路上都極其成功。我很愿意說(shuō)第六步是啥啥啥,第七步是“盈利”,但是說(shuō)實(shí)話每一步都對(duì)業(yè)務(wù)有幫助。

這些結(jié)果不是那么學(xué)術(shù),但是是立竿見(jiàn)影的:

正確使用git提升了我們代碼和代碼庫(kù)的質(zhì)量,提升的還有生活質(zhì)量。當(dāng)要做熱補(bǔ)丁時(shí)我們絕不用感到緊張。從產(chǎn)品線拉出分支,修改,合并,搞定?;氐侥愕奶匦蚤_發(fā)分支。

敏捷開發(fā)給我們帶來(lái)了恰到好處的關(guān)注量。我們能夠投身到某個(gè)任務(wù)2周,不用太擔(dān)心其他開發(fā)任務(wù)。它給我們的代碼和特性開發(fā)的質(zhì)量帶來(lái)了顯著的效果。聚焦。

作為一個(gè)警醒的小團(tuán)隊(duì)我們比大多數(shù)人都更加注意到要在更大范圍內(nèi)改變低效率。為Graham每天或每周節(jié)省一小時(shí),對(duì)我們來(lái)說(shuō)就是一個(gè)巨大而顯著的好 處。機(jī)器人這樣做了,而且有望隨著時(shí)間推移做得更多。機(jī)器人犯錯(cuò)誤更少……這就意味著我們永遠(yuǎn)不用擔(dān)心需要的全部文件都會(huì)被推送到產(chǎn)品分支去。

第四步和第五步帶來(lái)的好處我相信會(huì)清償今年上課的花銷。隨著我們開發(fā)團(tuán)隊(duì)的壯大尤其如此。我相信會(huì)給他們就怎樣工作做更多的方向性指導(dǎo),并建立一個(gè)擴(kuò)展性更好的勞動(dòng)力。我認(rèn)為當(dāng)推送代碼到服務(wù)器時(shí),它還會(huì)給我們帶來(lái)更大的自信。

這就是我們創(chuàng)業(yè)公司的開發(fā)流程。你們的公司是怎么干活的?我們總是在尋找改進(jìn)我們流程的辦法。我們覺(jué)得很好,但還不完美。我們想知道你有什么改進(jìn)的建議!

轉(zhuǎn)自:產(chǎn)品中國(guó)

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 有沒(méi)有g(shù)it教程,我第一次使用,不懂用

    回復(fù)