初創(chuàng)技術(shù)團(tuán)隊(duì)的準(zhǔn)備工作

初創(chuàng)的技術(shù)團(tuán)隊(duì)瘸洛,一切從0開始耍休,一切看似那么美好,前景如此令人向往货矮。市場不等人,需要快速的搶占先機(jī)斯够,所以產(chǎn)品如果能夠早點(diǎn)面市囚玫,就比別人多了一絲活下去的希望。但是磨刀不誤砍柴工读规,如果不做好基礎(chǔ)的技術(shù)準(zhǔn)備工作抓督,就一頭扎進(jìn)業(yè)務(wù)代碼中,看似如火如荼束亏,實(shí)際會(huì)帶來各種各樣的隱患(當(dāng)初創(chuàng)團(tuán)隊(duì)的團(tuán)隊(duì)成員并非是那種并肩在其他平臺(tái)很長時(shí)間形成默契的戰(zhàn)友的話铃在,問題會(huì)更多)。在此定铜,把我們的經(jīng)驗(yàn)總結(jié)一下阳液,避免踩坑。

總結(jié)下來揣炕,一個(gè)團(tuán)隊(duì)的建設(shè)要包括以下幾個(gè)大的方面:

  • 在團(tuán)隊(duì)協(xié)作方面帘皿,要搭建或者使用一些有利于團(tuán)隊(duì)協(xié)作的業(yè)務(wù)平臺(tái),減少大家之間溝通等帶來的成本畸陡。

  • 建立一系列良好的規(guī)范和制度并保證執(zhí)行下去鹰溜,包括編碼規(guī)范、命名規(guī)范丁恭、晨會(huì)制度曹动、周報(bào)制度等。

  • 建立一套良好的研發(fā)流程

  • 搭建一些基礎(chǔ)的研發(fā)平臺(tái)牲览,以保證快速迭代墓陈,持續(xù)交付

  • 如果不是土豪和專家,我們的建議是都用云服務(wù)竭恬,比如阿里云的ECS跛蛋,RDS,開放搜索痊硕,Quick BI赊级,redis,OSS岔绸,SLS等理逊。

下面會(huì)從協(xié)作,規(guī)范盒揉,流程以及持續(xù)交付這四個(gè)方面來講講晋被,我們在動(dòng)手開干之前,技術(shù)團(tuán)隊(duì)要做好哪些準(zhǔn)備刚盈。

搭建團(tuán)隊(duì)協(xié)作基礎(chǔ)設(shè)施

開篇提到團(tuán)隊(duì)協(xié)作的基礎(chǔ)設(shè)施能夠減少團(tuán)隊(duì)協(xié)作間溝通等成本羡洛,下面從一些我們認(rèn)為必須要有的基礎(chǔ)設(shè)施來講講他們的用處。

私有g(shù)itlab的搭建

現(xiàn)在有很多的免費(fèi)或者收費(fèi)的平臺(tái)能夠提供相關(guān)的代碼托管服務(wù)藕漱,那為什么一定要自己來搭建呢欲侮?

最早,我們團(tuán)隊(duì)使用過一家云代碼托管服務(wù)肋联,一周內(nèi)好幾次無法提交或者拉取代碼威蕉,導(dǎo)致大家工作受到了影響。GITHUB也老不穩(wěn)定橄仍,說不定哪天就被墻韧涨。再加上自己搭一個(gè)Gitlab并不麻煩牍戚,所以就自己搭建了。

maven私庫的搭建

團(tuán)隊(duì)很大程度上會(huì)沉淀一些公用的jar虑粥,加上采用微服務(wù)架構(gòu)如孝,每個(gè)服務(wù)定義的接口都以jar包的形式給到調(diào)用方。這些jar包放置在團(tuán)隊(duì)私有的maven庫上再合適不過舀奶。

共享文檔庫

大家可以把一些需求的理解以及設(shè)計(jì)方案放在這個(gè)地方暑竟,以便于其他人快速了解,也為了沉淀知識(shí)育勺,比如團(tuán)隊(duì)擴(kuò)張或者新人進(jìn)來之后但荤,能有地方讓他們快速的學(xué)習(xí)和上手。

在這里推薦一款SaaS產(chǎn)品涧至,叫語雀腹躁。目前是免費(fèi)使用階段,支持markdown南蓬,寫起文檔來感覺很爽纺非。

項(xiàng)目、測試用例赘方、缺陷管理工具

現(xiàn)在大多數(shù)初創(chuàng)團(tuán)隊(duì)都會(huì)采用敏捷的開發(fā)模式烧颖,以MVP的思路,快速迭代窄陡,不斷完善產(chǎn)品炕淮。在一個(gè)迭代中,需要能夠清晰的看到每天每個(gè)人有什么任務(wù)跳夭,每個(gè)任務(wù)處于什么階段涂圆,是需求階段,開發(fā)階段币叹,測試階段還是已完成润歉?類似Scrum中的看板的那種。還有測試的用例和缺陷也需要有一個(gè)系統(tǒng)能夠進(jìn)行維護(hù)和管理颈抚。目前我們團(tuán)隊(duì)正在用云效踩衩。當(dāng)然云效能做的不只是這些,但是我們只是用了云效最基礎(chǔ)的項(xiàng)目管理和缺陷以及用例管理的功能贩汉。

建立規(guī)范

一個(gè)團(tuán)隊(duì)如果沒有規(guī)范九妈,大家按照各自的習(xí)慣寫代碼,那么相互之間理解對(duì)方的代碼的成本就會(huì)變高雾鬼。規(guī)范就是為了把這種大家溝通,理解上的門檻和成本降低宴树。讓研發(fā)的同學(xué)關(guān)注在開心的寫業(yè)務(wù)代碼上策菜。

編碼規(guī)范

后端編碼規(guī)范

幸運(yùn)的是我們用的是java,我們完全按照阿里巴巴的規(guī)范進(jìn)行后臺(tái)代碼的編寫。也不用費(fèi)勁腦子和嘴皮子來統(tǒng)一大家的語言規(guī)范了又憨。按照阿里巴巴的規(guī)范來就好翠霍。

IDEA插件下載:https://github.com/alibaba/p3c

前端編碼規(guī)范

命名規(guī)范

變量
表結(jié)構(gòu)
表字段

數(shù)據(jù)庫相關(guān)的規(guī)范,可以看看58沈劍的58的數(shù)據(jù)庫軍規(guī)

項(xiàng)目結(jié)構(gòu)規(guī)范

在之前蠢莺,都是單體應(yīng)用寒匙,大家定義好包的層級(jí)結(jié)構(gòu)就好了。比如我們經(jīng)常用的

  • Controller

  • Service

  • Dao

  • Model

  • Common

這種分package的模式躏将,后來演進(jìn)成采用不同的module來表達(dá)不同的職責(zé)锄弱。

隨著服務(wù)化的思路,我們的項(xiàng)目數(shù)量增多祸憋。那么每個(gè)項(xiàng)目要是有不同的這種結(jié)構(gòu)会宪,其實(shí)大家理解起來還是比較費(fèi)勁的。所以蚯窥,我們對(duì)每個(gè)項(xiàng)目的module都有約定(比如在哪寫倉儲(chǔ)代碼掸鹅,哪里寫DAO代碼各個(gè)層是如何依賴的),我們定義了一套自己的maven骨架拦赠,大家都用它來生成服務(wù)項(xiàng)目巍沙。這些大家在相互了解別人的代碼的時(shí)候,即使不知道業(yè)務(wù)荷鼠,也能很清晰的知道比如它定義的接口應(yīng)該在哪個(gè)module里面句携,它引用別人的服務(wù)是在哪個(gè)module中定義的。

統(tǒng)一開發(fā)工具

團(tuán)隊(duì)最好是用一種開發(fā)工具颊咬,但是不強(qiáng)求务甥。

建立研發(fā)流程

一套好的研發(fā)流程,能夠讓研發(fā)的效率以及質(zhì)量提升數(shù)倍喳篇。雖然看起來敞临,好像不是那么回事兒。但是經(jīng)過實(shí)踐對(duì)比后麸澜,有流程控制的項(xiàng)目確實(shí)從進(jìn)度和質(zhì)量上要超出沒有流程的項(xiàng)目好幾倍挺尿。

我們團(tuán)隊(duì)流程如下:

需求和設(shè)計(jì)評(píng)審

需求由PD產(chǎn)出后,一定要經(jīng)過幾輪的討論(包括跟業(yè)務(wù)方炊邦,UED等)编矾,需要最終定稿,確定范圍馁害,并且研發(fā)的同學(xué)已經(jīng)充分的理解要做什么窄俏。

在需求評(píng)審?fù)瓿珊螅枰M(jìn)行設(shè)計(jì)評(píng)審碘菜。主要是設(shè)計(jì)上是否邏輯完成凹蜈,滿足交互需求限寞,并且定義好交互頁面的規(guī)范和樣式。

這兩個(gè)評(píng)審是必須要有且不能隨便的仰坦。

我們經(jīng)歷過開發(fā)到一半履植,需求推翻重來的情況,也經(jīng)歷過開發(fā)某個(gè)流程悄晃,發(fā)現(xiàn)PRD上遺漏了一種場景玫霎,又需要跟PD,業(yè)務(wù)方進(jìn)行溝通妈橄,而且有些時(shí)候庶近,這種未考慮到的場景在重新進(jìn)行設(shè)計(jì)思考的時(shí)候還影響到了之前的代碼架構(gòu)設(shè)計(jì),不得不修改之前的架構(gòu)設(shè)計(jì)或者表結(jié)構(gòu)等眷细,造成大量的人力浪費(fèi)拦盹。

我們也經(jīng)歷過前端的同學(xué)按照原型開發(fā)出來的頁面,卻并非是了產(chǎn)品和設(shè)計(jì)的想要的界面溪椎。很多原型工具并不是那么完整的表達(dá)出PD和UED腦子里的東西普舆。 那么需要把這些規(guī)范,比如字體校读,字號(hào)沼侣,邊距等都進(jìn)行標(biāo)注,來減少大家對(duì)同一個(gè)事物的理解不一致的情況發(fā)生歉秫。

系統(tǒng)設(shè)計(jì)

需求和設(shè)計(jì)確定后蛾洛,基本上整個(gè)產(chǎn)品的形態(tài)都已經(jīng)出現(xiàn)在我們研發(fā)的腦子中了。

系統(tǒng)設(shè)計(jì)階段雁芙,需要研發(fā)對(duì)用例進(jìn)行分析轧膘,確定自己腦子中的那個(gè)理解與定稿的需求是一致的。同時(shí)兔甘,研發(fā)還需要花點(diǎn)時(shí)間在對(duì)domain以及流程的設(shè)計(jì)上谎碍,盡可能的把一個(gè)業(yè)務(wù)場景考慮得周全。

系統(tǒng)設(shè)計(jì)階段洞焙,就是讓研發(fā)盡可能的推遲寫代碼的沖動(dòng)蟆淀,先把一個(gè)需求一個(gè)功能如何用代碼實(shí)現(xiàn),思考得深刻一點(diǎn)澡匪,把各種情況思考得全面一些熔任,避免來回來去的返工。

我自己曾經(jīng)也經(jīng)歷過唁情,不做設(shè)計(jì)直接寫代碼疑苔。當(dāng)初認(rèn)為這個(gè)需求簡單,所以就沒有設(shè)計(jì)甸鸟。后來代碼寫著寫著夯巷,發(fā)現(xiàn)需求沒有想象的簡單赛惩,還要考慮一些場景,于是把寫好的代碼刪了重寫趁餐,反復(fù)好幾次,每次都是發(fā)現(xiàn)了新的需要考慮的場景導(dǎo)致設(shè)計(jì)推倒重來篮绰。 后來索性后雷,停下來,利用半天的時(shí)間吠各,把問題思考全面了臀突,再開始寫代碼,后面就是一氣呵成了贾漏。

系統(tǒng)設(shè)計(jì)中候学,需要定義好兩種接口。

  1. 與前端的接口 (包括入?yún)⒆萆ⅲ祷刂凳崧耄e(cuò)誤碼)

  2. 與其他服務(wù)系統(tǒng)的接口(包括入?yún)ⅲ祷刂滴橄疲e(cuò)誤碼)

編碼

按照規(guī)范編碼掰茶,不要施展奇技淫巧。盡可能的抽象和收斂蜜笤。

CR

CR一定要做濒蒋,CR是團(tuán)隊(duì)成員之間相互了解對(duì)方的編碼習(xí)慣和思路的一個(gè)很好的過程。

單元測試

利用mockito來進(jìn)行單元測試的編寫把兔。研發(fā)的同學(xué)要考慮一個(gè)功能的正常和異常場景沪伙。 異常場景又需要根據(jù)各種情景來編寫不同的測試用例。比如DB異常县好,RPC超時(shí)围橡,下游返回調(diào)用錯(cuò)誤等等。

為持續(xù)交付搭建基礎(chǔ)設(shè)施

服務(wù)化之后聘惦,系統(tǒng)拆分得很小某饰。每個(gè)系統(tǒng)上線需要能做到隨時(shí)隨地且自動(dòng)化。借助之前的經(jīng)驗(yàn)善绎,我們搭建了一套基于JENKINS + MESOS+MARATHON+DOCKER的持續(xù)交付的基礎(chǔ)設(shè)施黔漂,來保證我們的系統(tǒng)能夠快速上線。研發(fā)只需要點(diǎn)擊一下按鈕即可實(shí)現(xiàn)從編譯到部署的過程禀酱。

后續(xù)我們會(huì)針對(duì)如何搭建持續(xù)交付的基礎(chǔ)設(shè)施炬守,如何使用阿里云的服務(wù)等等進(jìn)行專題分享。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剂跟,一起剝皮案震驚了整個(gè)濱河市减途,隨后出現(xiàn)的幾起案子酣藻,更是在濱河造成了極大的恐慌,老刑警劉巖鳍置,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辽剧,死亡現(xiàn)場離奇詭異,居然都是意外死亡税产,警方通過查閱死者的電腦和手機(jī)怕轿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辟拷,“玉大人撞羽,你說我怎么就攤上這事∩蓝常” “怎么了诀紊?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵隅俘,是天一觀的道長邻奠。 經(jīng)常有香客問我考赛,道長惕澎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任颜骤,我火速辦了婚禮唧喉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忍抽。我一直安慰自己八孝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布鸠项。 她就那樣靜靜地躺著干跛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祟绊。 梳的紋絲不亂的頭發(fā)上楼入,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音牧抽,去河邊找鬼嘉熊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扬舒,可吹牛的內(nèi)容都是我干的阐肤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孕惜!你這毒婦竟也來了愧薛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤衫画,失蹤者是張志新(化名)和其女友劉穎毫炉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體削罩,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碘箍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲸郊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡货邓,死狀恐怖秆撮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情换况,我是刑警寧澤职辨,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站戈二,受9級(jí)特大地震影響舒裤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜觉吭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一腾供、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲜滩,春花似錦伴鳖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗓蘑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桩皿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工业簿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘤礁,地道東北人梅尤。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓岩调,卻偏偏與公主長得像,于是被迫代替她去往敵國和親号枕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348