傳統(tǒng)軟件行業(yè)技術(shù)團(tuán)隊(duì) - 為何要購(gòu)買(mǎi)一個(gè)腳手架

認(rèn)清它,承認(rèn)它,然后改變它。

1. 背景

首先介紹下腳手架的定義 —— 類(lèi)似jeesite,ruoyi,pigX 這樣的"平臺(tái)/框架",就是本文所定義的腳手架。

這里的腳手架并不是對(duì)于這些"平臺(tái)/框架"的嘲諷,恰恰相反,即使只是從標(biāo)題中也應(yīng)該看得出筆者對(duì)于腳手架持支持態(tài)度。

作為實(shí)用主義者,我恰恰認(rèn)為針對(duì)傳統(tǒng)軟件行業(yè)技術(shù)團(tuán)隊(duì),這樣的腳手架非常值得團(tuán)隊(duì)嘗試一下,它能夠幫助團(tuán)隊(duì)快速進(jìn)入開(kāi)發(fā)節(jié)奏,將精力集中到業(yè)務(wù)代碼轉(zhuǎn)換中,而非在低級(jí)的技術(shù)細(xì)節(jié)迷宮中循環(huán)往復(fù),從而解放業(yè)務(wù)開(kāi)發(fā)人員,促進(jìn)技術(shù)棧統(tǒng)一等。

2. 矛盾

小到個(gè)人,大到團(tuán)隊(duì),都會(huì)有自建腳手架的沖動(dòng)和行動(dòng),而且團(tuán)隊(duì)規(guī)模越大,這樣的自建腳手架往往都不止一套。

同樣的案例落在筆者身上,在我逐步接手部門(mén)技術(shù)體系演進(jìn)職責(zé)的過(guò)程中,親眼見(jiàn)證了多套腳手架同步演化,合并,拆分,再合并,最后整體推倒從零開(kāi)始所謂2.0,3.0等等。

為了在繁重的業(yè)務(wù)壓力,以及各個(gè)小組多種腳手架之間謀求一個(gè)最大化的平衡和共性,兼顧腳手架針對(duì)新增業(yè)務(wù)需求的適應(yīng),技術(shù)沉淀等,我們被這些問(wèn)題強(qiáng)拖著向前,走得心力憔悴。

在經(jīng)過(guò)反復(fù)的推演,反思,最終痛定思痛之下,我們決定直面問(wèn)題,放下"敝帚自珍"心態(tài),從外部購(gòu)買(mǎi)一套腳手架來(lái)支撐我們的新業(yè)務(wù)需求開(kāi)發(fā)。

3. 理由

到了本文的重點(diǎn)部分。

做出這個(gè)決定并不輕松,君不見(jiàn)知乎等各類(lèi)技術(shù)論壇里時(shí)不時(shí)爆發(fā)的爭(zhēng)論“ruoyi這種xx設(shè)計(jì)得跟屎一樣,它是怎么發(fā)展這么大的,怎么還好意思收費(fèi)的”,“這個(gè)傻叉xx還好意思要錢(qián),這不是個(gè)稍微有點(diǎn)經(jīng)驗(yàn)的研發(fā)就能做得出來(lái)的東西嗎?”等等言論喧囂塵上。

同樣的觀(guān)點(diǎn)在筆者所在團(tuán)隊(duì)內(nèi)部也出現(xiàn)過(guò),甚至不少是當(dāng)著我的面吐槽的,這也是本文出現(xiàn)的重要原因。并非為了逞口舌之氣,只是相似的疑問(wèn)一定不止這些人,而我也越來(lái)越不喜歡將同樣的話(huà)反反復(fù)復(fù)地說(shuō),所以正好趁此機(jī)會(huì)一并落下來(lái),方便之后的解釋和回顧。

3.0 根本原因

對(duì)于傳統(tǒng)軟件技術(shù)團(tuán)隊(duì)而言,沒(méi)有所謂專(zhuān)門(mén)的架構(gòu)組進(jìn)行腳手架的創(chuàng)建,維護(hù)和演化;自然也不會(huì)持續(xù)投入專(zhuān)門(mén)的精力和時(shí)間進(jìn)行架構(gòu)和問(wèn)題的研發(fā)和思考。

甚至所謂的架構(gòu)/平臺(tái)組往往都是由各個(gè)業(yè)務(wù)研發(fā)小組中抽調(diào)技術(shù)骨干形成的虛擬團(tuán)隊(duì),他們之間往往不會(huì)有團(tuán)隊(duì)成員的感覺(jué),甚至往往只是技術(shù)團(tuán)隊(duì)內(nèi)部自行組建,沒(méi)有行政上的組織結(jié)構(gòu)以及相應(yīng)的職責(zé)任命。

商業(yè)化的腳手架,所針對(duì)的正是傳統(tǒng)軟件研發(fā)團(tuán)隊(duì)這種規(guī)模小,數(shù)量多的業(yè)務(wù)項(xiàng)目特點(diǎn),可以幫助我們節(jié)省大量過(guò)往耗費(fèi)在腳手架演化和磨合上的時(shí)間和精力。

這樣我們可以將節(jié)省出來(lái)的時(shí)間和精力投入到腳手架的推廣和個(gè)性化適配上,以及使用問(wèn)題的快速反饋上來(lái),這樣能夠?qū)崿F(xiàn)最快的技術(shù)棧統(tǒng)一和知識(shí)沉淀,達(dá)到我們"技術(shù)有力支撐業(yè)務(wù)"的目的。

這既是本文標(biāo)題的背景,也是最大的原因。

3.1 放下所有的歷史包袱

自建腳手架并非什么心臟手術(shù)式的高精尖難題,過(guò)往我們也曾經(jīng)推出過(guò)不少自建腳手架,但往往在實(shí)際實(shí)際的業(yè)務(wù)需求演進(jìn)中,為了兼容緊急需求,對(duì)腳手架的諸多調(diào)整,無(wú)法進(jìn)行深度反思和全局考量,為了追求進(jìn)度而進(jìn)行了相應(yīng)的粗暴實(shí)現(xiàn);而之后又因?yàn)槿狈κ潞蟮膹?fù)盤(pán)和規(guī)整,導(dǎo)致這一粗糙方案被直接復(fù)用到之后的項(xiàng)目,最終導(dǎo)致腳手架里充滿(mǎn)了各類(lèi)粗暴實(shí)現(xiàn),以及為了兼容這些粗糙實(shí)現(xiàn)而做出的一系列魔法操作,進(jìn)一步加劇腳手架的問(wèn)題。

最終的結(jié)果就是推出的腳手架不少,但最終能夠健康存活,穩(wěn)步演進(jìn)的寥寥無(wú)幾,大家對(duì)于既有腳手架心有厭惡,私下自建腳手架的情況時(shí)有發(fā)生。

商業(yè)級(jí)的腳手架之下,直接甩下歷史包袱,采用新項(xiàng)目新腳手架的方式,將人員技術(shù)水平和開(kāi)發(fā)效率快速提升起來(lái)。

3.2 不需要瞻前,只需要顧后

過(guò)往的腳手架中因?yàn)榇嬖诖罅康臍v史兼容性代碼,往往在每次演化過(guò)程中,加入新方案沉淀時(shí)候,都要考慮到既有那些魔法實(shí)現(xiàn)的影響,結(jié)果就是導(dǎo)致對(duì)于新需求的響應(yīng)緩慢,造成業(yè)務(wù)研發(fā)部門(mén)對(duì)于進(jìn)度不滿(mǎn),腳手架的落地阻力更大。

商業(yè)級(jí)的腳手架必然是經(jīng)過(guò)諸多場(chǎng)景檢驗(yàn),并且這些商業(yè)腳手架為了收集最多的反饋,往往也會(huì)推出各自的開(kāi)源版本,這樣他們對(duì)于常用的問(wèn)題場(chǎng)景都做過(guò)相應(yīng)解決方案,并且這些解決方案之間已經(jīng)完成了彼此磨合,對(duì)于業(yè)務(wù)型研發(fā)團(tuán)隊(duì)而言,不再需要這些問(wèn)題上投入時(shí)間和精力。

3.3 真正的難點(diǎn) - 持續(xù)優(yōu)化

正如前文所說(shuō),自建腳手架并非什么心臟手術(shù)式的高精尖難題,但凡在這行業(yè)里待上數(shù)年,做過(guò)幾個(gè)業(yè)務(wù)系統(tǒng)的,或多或少都私下搭過(guò)幾個(gè)demo級(jí)玩具。

  1. 所謂的自己搭建腳手架,拿開(kāi)源組件這么攢一下就是搭建的腳手架了,這里面的技術(shù)含量有多少,但凡做過(guò)demo的心里都清楚吧。
  2. 而且搭建完"基礎(chǔ)框架",然后呢? 拿著真實(shí)項(xiàng)目把那些已經(jīng)迭代數(shù)年的腳手架踩過(guò)的坑再挨個(gè)踩一遍,然后發(fā)現(xiàn)最終迭代出來(lái)的和開(kāi)源產(chǎn)品越來(lái)越像?
  3. 我們現(xiàn)在身處環(huán)境和截至目前我們自身的積累,所作的事情既無(wú)法做到前無(wú)古人,也做不到后無(wú)來(lái)者 ;那我們何來(lái)的自信會(huì)比這些已經(jīng)拼殺出來(lái)的前輩要牛的? 無(wú)非就是因?yàn)閳?chǎng)景更為具體,做出的假設(shè)更多,所以針對(duì)性的優(yōu)化也更為激進(jìn),最終造成短期內(nèi)看上去的效果更好,性能更優(yōu)。
  4. 我們要的是解決問(wèn)題,這才是根本。一個(gè)被越來(lái)越多人使用,持續(xù)穩(wěn)定更新,有著商業(yè)團(tuán)隊(duì)維護(hù)的框架,在此基礎(chǔ)上我們能夠解放精力放在自身遇到的特異性業(yè)務(wù)問(wèn)題的解決上,才是我們需要的。

筆者接手過(guò)一個(gè)平臺(tái)項(xiàng)目框架,一眼就能看出它就是上面所說(shuō)的demo級(jí)一點(diǎn)點(diǎn)搭建起來(lái),在沉重的業(yè)務(wù)壓力之下,誰(shuí)踏馬回給你所謂的"充裕時(shí)間"去所謂的重構(gòu)? 另外你所謂的充裕時(shí)間到底是多久? 無(wú)限遠(yuǎn)嗎? 你跑這上學(xué)來(lái)了?

而且你會(huì)付出額外的努力把你之前挖的坑填上嗎? 用你的行動(dòng)回答這個(gè)問(wèn)題,至少筆者從接手的項(xiàng)目里是沒(méi)有看到這個(gè)跡象,你會(huì)?用你的行動(dòng)回答這個(gè)問(wèn)題,記住是額外的付出,不是等著別人給你安排任務(wù),讓其它人等著你的進(jìn)度;是在滿(mǎn)足不斷增長(zhǎng)的外來(lái)業(yè)務(wù)需要的前提下,將整個(gè)架構(gòu)重構(gòu)出來(lái)。(你不會(huì)覺(jué)得別人應(yīng)該等著你把準(zhǔn)備工作全做完了,再開(kāi)始提需求吧? 成熟一點(diǎn)吧?。?/p>

3.4 最難的部分 - 推廣

正如一個(gè)成功的開(kāi)源產(chǎn)品,最大的標(biāo)志就是其活躍的社區(qū)。

對(duì)于一個(gè)腳手架,生命力的來(lái)源也是其周邊的生態(tài),而對(duì)于傳統(tǒng)軟件團(tuán)隊(duì)而言,這個(gè)生態(tài)很大程度上就是我使用你這套腳手架,在遇到問(wèn)題的時(shí)候,能不能快速找到相應(yīng)的解決。

如果是過(guò)往我們自建腳手架,那這個(gè)事情可就費(fèi)勁了,你既要思考架構(gòu)的演進(jìn),又要思考腳手架的推廣,還要考慮如何回答各個(gè)小組反饋來(lái)的關(guān)于腳手架的問(wèn)題等等。

三頭六臂的你,很快也會(huì)因?yàn)楣铝o(wú)援而敗下陣來(lái),不要以為初期的熱血和口號(hào)能夠幫你撐過(guò)去,這是一個(gè)非常長(zhǎng)期的過(guò)程,并且很長(zhǎng)一段時(shí)間內(nèi)不會(huì)有什么正面反饋。

如果采納商業(yè)級(jí)腳手架方案,那么架構(gòu)的演進(jìn)我們就不需要投入過(guò)多的精力,畢竟經(jīng)典28原則也決定,對(duì)方所收集到的問(wèn)題場(chǎng)景絕大部分都是和我們是類(lèi)似的,雖然注定會(huì)有兩成左右的差異,但相較而言我們所需要介入的精力就已經(jīng)少了很多了。

而這節(jié)省下的80%精力,我們就可以全部投入到腳手架的推廣,以及使用問(wèn)題的快速反饋上來(lái),通過(guò)我們介紹過(guò)的傳統(tǒng)軟件行業(yè)技術(shù)團(tuán)隊(duì)中如何做好知識(shí)沉淀等等諸多沉淀化方式,我們可以不僅可以快速建立起團(tuán)隊(duì)對(duì)于新腳手架的信心,同時(shí)也將文檔沉淀,遇到問(wèn)題先搜文檔等的良好職業(yè)習(xí)慣潛移默化地傳達(dá)給各個(gè)研發(fā)人員。 而這些在過(guò)往是不可想象地。

4. 補(bǔ)充

正如我一直在強(qiáng)調(diào)的"要分清楚目的和手段,想清楚哪個(gè)是你的目的,然后其它的就都只是手段而已,切不要被迷惑住雙眼,把手段當(dāng)作了目的"。

有力地支撐住業(yè)務(wù)變化才是我們的目標(biāo),腳手架只是手段,而已。

5. 參考

  1. 為什么國(guó)內(nèi)開(kāi)源氛圍這么差?大廠(chǎng)都在卷自己的輪子?
  2. 體現(xiàn)在文檔上的差距
  3. 傳統(tǒng)軟件行業(yè)技術(shù)團(tuán)隊(duì)的發(fā)展 - 做好技術(shù)棧統(tǒng)一
  4. 傳統(tǒng)軟件行業(yè)技術(shù)團(tuán)隊(duì)中如何做好知識(shí)沉淀
  5. 如何做好既有產(chǎn)品技術(shù)架構(gòu)的升級(jí)改造
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容