初創(chuàng)企業(yè)可以做6件事以避免技術債務

責任編輯:cres

作者:Charlie Custer

2022-05-10 10:35:31

來源:企業(yè)網(wǎng)D1Net

原創(chuàng)

當技術債務變得過重時,即使有很多資源可以解決這個問題,修復它也會變得非常棘手。對于初創(chuàng)企業(yè)來說,最好的方法是避免承擔任何不必要的技術債務,所以需要了解一下初創(chuàng)企業(yè)可以做的六件事,以盡量減少或消除在擴大之前必須償還的技術債務。

想象一下這樣的情景:“大約400萬行PHP代碼,由報酬過低、有時并不是善意的自由職業(yè)者和學生在8年的時間里編寫而成。雖然初創(chuàng)企業(yè)的首席執(zhí)行官編寫了大部分代碼,但在2004年為了學習新技術而中斷。”
 
這就是一家初創(chuàng)企業(yè)當初為了走捷徑而到最后不得不重新編寫代碼的情況,其面臨的技術債務達到難以承受的程度。
 
但是,如果你在初創(chuàng)企業(yè)擔任技術職務,就會知道避免技術債務并不像聽起來那么容易。
 
初創(chuàng)企業(yè)通常有很多發(fā)展里程碑需要在很短的時間內完成。在人員和預算有限的情況下,初創(chuàng)企業(yè)為了開發(fā)最小可行產(chǎn)品有時需要走捷徑,雖然他們知道將來必須進行一些重構。
 
但適度實施很重要。當初創(chuàng)企業(yè)背負技術債務時,就像爬山一樣,必須先爬過這座山才能繼續(xù)前進,初創(chuàng)企業(yè)只有先背負一些技術債務然后才能擴大規(guī)模。企業(yè)現(xiàn)在節(jié)省的工程時間都必須得到償還,通常還要償還利息。許多從事過嚴重技術債務項目的開發(fā)人員都有這樣的故事:曾在幾個龐大而雜亂的代碼庫中工作過,在那里進行了一次重大重構,花費的時間比預期的要長,然后在完成之前將資源轉移其他項目上。其最終結果是構建了一個更大、更混亂、更難理解的代碼庫!
 
換句話說,當技術債務變得過重時,即使有很多資源可以解決這個問題,修復它也會變得非常棘手。對于初創(chuàng)企業(yè)來說,最好的方法是避免承擔任何不必要的技術債務,所以需要了解一下初創(chuàng)企業(yè)可以做的六件事,以盡量減少或消除在擴大之前必須償還的技術債務。
 
1.不要承擔不需要的債務
 
這個建議聽起來很簡單,但真正實施可能具有挑戰(zhàn)性。初創(chuàng)企業(yè)需要承擔什么債務并不總是很明顯。一家初創(chuàng)企業(yè)在早期幾乎總是需要做出一些妥協(xié),但隨著工具和技術的變化和發(fā)展,可能很難弄清楚真正需要做出哪些妥協(xié)。
 
例如創(chuàng)建事務數(shù)據(jù)庫。一家初創(chuàng)企業(yè)在幾年前不得不做出一個艱難的決定,而且不可避免地涉及妥協(xié):是否選擇能夠快速輕松地擴展并處理潛在的一致性問題但成本更高的NoSQL數(shù)據(jù)庫?或者選擇像PostgreSQL這樣可靠、簡單且免費的開發(fā)人員現(xiàn)在可以使用的東西,但將來可能難以擴展?
 
這些都不是理想的選擇,采用NoSQL方法可能會帶來一系列令人不快的后續(xù)問題。但采用Postgres方法也承擔了一種技術債務,因為以后必須人工擴展。正如初創(chuàng)教育機構Kami公司在新冠疫情期間所面臨的那樣,擴展Postgres可能會很痛苦。該公司的一位代表表示,“我們知道留在Postgres并設置分片會有多復雜,管理多個數(shù)據(jù)分片會有一個持續(xù)的阻力。我們團隊中沒有人愿意完成這種工具,使我們設置了分片,也無法將業(yè)務增長10倍。”
 
不過,如今只需選擇正確的堆棧,就可以避免承擔大量技術債務——盡管什么構成“正確”在很大程度上取決于企業(yè)正在構建的內容以及已經(jīng)熟悉的內容。然而,在任何一種情況下,初創(chuàng)企業(yè)都必須妥協(xié)進行選擇。
 
當然,事務數(shù)據(jù)庫只是技術堆棧的一部分,但現(xiàn)在幾乎每一層都存在類似的解決方案。例如,應用程序的業(yè)務邏輯可以遷移到基于云計算的無服務器服務,例如AWS Lambda、Google Cloud Functions或Azure Serverless Functions,從而實現(xiàn)幾乎無限的可擴展性,而無需在前期投入大量的時間或費用。
 
因此,對于初創(chuàng)企業(yè)來說,了解他們的選擇至關重要。由于有了新工具,像Kami這樣的公司被迫做出的妥協(xié)現(xiàn)在可能完全避免。特別是,無服務器產(chǎn)品在整個堆棧中的激增使初創(chuàng)企業(yè)有可能擴展規(guī)模。這反過來又使他們能夠避免使用難以擴展的技術而承擔的技術債務,只是因為它們是獲得最小可行產(chǎn)品的最便宜和最快的方式。
 
初創(chuàng)企業(yè)團隊現(xiàn)在可以使用無服務器選項進行構建,這些選項既免費又容易獲得最小可行產(chǎn)品,同時還提供云原生自動化規(guī)模,以保持成本最小化和應用程序性能一致,無論應用程序是處理360個并發(fā)用戶還是36萬個并發(fā)用戶。
 
因此,初創(chuàng)企業(yè)在早期階段避免技術債務,有時是一種讓其時刻保持警惕并了解所有選擇的功能。不到一年前,還沒有免費的、無服務器分布式SQL數(shù)據(jù)庫的選擇,而現(xiàn)在已經(jīng)有了。了解這些選項可以幫助企業(yè)避免承擔技術債務,并避免妥協(xié)。
 
2.盡量減少運維工作
 
在初創(chuàng)企業(yè)發(fā)展的早期階段,開發(fā)人員身兼多職是很常見的。例如,初創(chuàng)企業(yè)的開發(fā)人員通常會在運營方面擔負雙重職責,直到公司規(guī)模大到能夠雇傭專門的IT運營人員。
 
但啟動開發(fā)時間表往往很短,企業(yè)的發(fā)展路線圖上有很多功能,而且需要快速周轉。開發(fā)人員花在運維工作上的時間其實都是應該花費在構建應用程序上的時間,而且他們構建的時間越少,可能不得不削減一些功能以在最后期限交付。而每一次偷工減料都是一小部分技術債務。
 
出于這個原因,選擇托管服務有時可能是一種最經(jīng)濟的選擇,即使這意味著要承擔更高的前期成本。初創(chuàng)企業(yè)可能并不愿意通過托管來節(jié)省成本,因為必須自己開發(fā),但重要的是要考慮讓開發(fā)人員了解和管理運營相關的成本。
 
這一成本超出了開發(fā)人員在開展運維工作時浪費的開發(fā)時間。選擇托管服務將運維工作交到第三方專業(yè)人士手中,他們通常會提供優(yōu)先的技術支持以促進集成,這可能意味著更順暢的集成過程、更好的應用程序性能以及在出現(xiàn)運維問題時更快地解決。
 
3.保持靈活性
 
當初創(chuàng)企業(yè)做出設計選擇或選擇以后難以改變的服務時,可能會在不知情的情況下承擔技術債務。
 
雖然有很多這樣的例子,但最常見的例子之一是初創(chuàng)企業(yè)鎖定在單個云平臺的生態(tài)系統(tǒng)中。在一開始這樣做通常有令人信服的理由,因為當將AWS Lambda功能連接到其他AWS云服務(如Aurora、ElastiCache或Redshift)時,可以利用其提供的功能。
 
但從長遠來看,如果谷歌云平臺或微軟Azure成為更實惠的選擇呢?或者,如果意識到為用戶提供最可靠的服務將需要使用多云怎么辦?突然之間,一筆巨大的技術債務到期,初創(chuàng)企業(yè)的團隊將不得不弄清楚如何處理,例如將其僅限AWS云平臺的數(shù)據(jù)庫遷移到可以支持AWS和谷歌云平臺的數(shù)據(jù)庫,從而避免引發(fā)一系列其他問題。
 
只要有可能,選擇設計和工具以保持靈活性是值得的。有時這需要權衡利弊,但在其他時候,只需選擇不同的工具即可獲得相同的性能和更高的靈活性。因此,即使選擇的功能仍然在AWS云平臺上構建和部署,擁有一個與云計算無關的數(shù)據(jù)庫也可以靈活地切換到另一個云平臺或在未來采用多云,而無需更改數(shù)據(jù)庫。
 
4.不要解決已經(jīng)解決的問題
 
作為工程師,不要嘗試解決別人已經(jīng)解決的問題。雖然不斷改進的動力是許多技術創(chuàng)新背后的動力,但創(chuàng)業(yè)公司要想獲得成功,就必須與實踐相結合。雖然定制解決方案可能是完美的,但也有可用的第三方解決方案,可以在不花費開發(fā)人員時間的情況下提供99%的功能。
 
例如,Starburst公司提供的一個數(shù)據(jù)分析引擎為客戶的數(shù)據(jù)提供一個單一并且快速的訪問點。為了確保為客戶提供更好的性能,Starburst公司需要構建一個多區(qū)域關系數(shù)據(jù)庫。該公司當然可以嘗試構建一個定制的解決方案。但正如Starburst公司工程副總裁Ken Pickering所說:“當一個工程團隊已經(jīng)建立了一個可靠的解決方案時,我為什么要讓工程團隊嘗試解決多區(qū)域問題?我們需要對第三方技術解決方案做出明智的選擇。因為我們需要為客戶的數(shù)據(jù)負責。”
 
對于大多數(shù)初創(chuàng)企業(yè)來說也是如此,即使還沒有為客戶要求所困擾,也需要做出明智的選擇來保護其開發(fā)人員的時間。
 
為了快速發(fā)展和成長,初創(chuàng)企業(yè)需要專注于解決他們的團隊需要解決的核心問題。如果開發(fā)人員偏離正軌,轉而構建定制解決方案,那么他們的時間將非常緊迫,以至于他們在開發(fā)產(chǎn)品的核心功能時不得不偷工減料。那么這就成為企業(yè)最終必須償還的技術債務。
 
5.盡早建立編碼最佳實踐
 
雖然人們關注的是使用為技術堆棧選擇的解決方案來避免技術債務的更宏觀的方法,但很多技術都可以追溯到草率編寫代碼,這通常是因為時間匆忙。
 
如果企業(yè)的目標是為避免技術債務,那么重要的是確保從第一天開始就實施并遵循編碼最佳實踐,但這應該包括可重復的、形式化的系統(tǒng)。雖然開發(fā)人員都知道這一點,但當初創(chuàng)企業(yè)的開發(fā)團隊只有幾個人(甚至只有一個人)時,這些都是很難做到的。當交付截止日期快到的時候,很容易決定不需要評測或記錄代碼,但是每次跳過類似的步驟時,都會增加技術債務,而這些技術債務總有一天要償還。
 
當然,開發(fā)人員是否有時間遵循所有這些最佳實踐并不總是掌握在他們手中。在通常情況下,開發(fā)時間表是從自上而下傳遞。
 
6.立足當下,展望未來
 
避免技術債務的真正關鍵是善于平衡當前的需求和未來的目標。實際上,這樣做具有挑戰(zhàn)性,需要將以上討論過的所有內容結合起來,并將這些知識帶到關于企業(yè)目標和時間表的更廣泛的討論中。
 
例如,如果初創(chuàng)企業(yè)的首席執(zhí)行官設定了開發(fā)期限,如果不承擔某種形式的技術債務,就很難達到這一目標,那么技術人員需要能夠確定并傳達這些權衡,以便將其納入預算和規(guī)劃中。如果首席執(zhí)行官希望在本季度發(fā)布兩個主要功能,那么很可能只能發(fā)布一個功能,因為下個季度將會處理技術債務,可能花費大量時間和精力處理客戶支持問題和重構有缺陷的代碼。
 
在平衡有限的時間、技能和預算的同時嘗試優(yōu)化以獲得最佳結果是一項真正的挑戰(zhàn)。但是建立一家初創(chuàng)企業(yè)并不容易,也不可能完全避免技術債務,尤其是在創(chuàng)業(yè)初期。但是,如果可以在堆棧中做出正確的選擇,并構建良好的內部護欄,以避免走捷徑或解決不需要解決的問題,那么初創(chuàng)企業(yè)可以確信自己走上了正確的道路。
 
版權聲明:本文為企業(yè)網(wǎng)D1Net編譯,轉載需注明出處為:企業(yè)網(wǎng)D1Net,如果不注明出處,企業(yè)網(wǎng)D1Net將保留追究其法律責任的權利。

鏈接已復制,快去分享吧

企業(yè)網(wǎng)版權所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號