當(dāng)然,IT領(lǐng)導(dǎo)和客戶都希望每個(gè)軟件項(xiàng)目都能更快地被交付。但是快速的開(kāi)發(fā)也可能會(huì)導(dǎo)致錯(cuò)誤的代碼、低劣的測(cè)試、不完整的解決方案,或者更糟的,不安全的軟件。雖然沒(méi)有人想要一個(gè)失敗的軟件項(xiàng)目,但有時(shí)在某些環(huán)境下--包括市場(chǎng)條件、業(yè)務(wù)需求、機(jī)會(huì)之窗--可以證明一些有利于速度的權(quán)衡措施是合理的。
軟件開(kāi)發(fā)不僅僅是一種邏輯上的努力。它也是一門(mén)藝術(shù),也是許多組織商業(yè)戰(zhàn)略中不可或缺的一部分。如果能夠高效、公平、簡(jiǎn)單和安全地完成,在那些重疊的某個(gè)地方就存在著獲得更高效的開(kāi)發(fā)流程的可能性。你只需要知道折衷方案,并做出有利于精簡(jiǎn)項(xiàng)目而不是開(kāi)發(fā)完美軟件夢(mèng)想的決定。
當(dāng)IT領(lǐng)導(dǎo)想要加速一個(gè)需要快速進(jìn)行的特定軟件項(xiàng)目時(shí),這里有11個(gè)戰(zhàn)略決策可供參考。
控制利益相關(guān)者的夢(mèng)想
每個(gè)人都希望得到反饋,來(lái)自營(yíng)銷團(tuán)隊(duì)、運(yùn)輸部門(mén)和會(huì)計(jì)部門(mén)的利益相關(guān)者都是帶著遠(yuǎn)大的夢(mèng)想來(lái)到會(huì)議室的。訣竅在于首先找到最容易實(shí)現(xiàn)的夢(mèng)想。在一次奇跡般的會(huì)議中,我的軟件團(tuán)隊(duì)發(fā)現(xiàn),只需在一個(gè)表單字段中添加預(yù)填充的默認(rèn)值,就可以為數(shù)據(jù)解析器節(jié)省數(shù)百萬(wàn)小時(shí)的工作。成百上千的銷售代理每天都會(huì)從無(wú)到有地填寫(xiě)這張表格。在HTML中多了幾個(gè)字符,我們就像天才一樣被對(duì)待。
讓利益相關(guān)者腳踏實(shí)地將有助于控制項(xiàng)目的范圍。如果你能讓利益相關(guān)者關(guān)注那些更小、更有價(jià)值的特性和改進(jìn),那么復(fù)選框的填充速度就會(huì)快得多了。
阻止開(kāi)發(fā)者異想天開(kāi)
不僅僅是西裝會(huì)讓人忘乎所以。開(kāi)發(fā)人員也需要腳踏實(shí)地。對(duì)于項(xiàng)目列表上的每一個(gè)項(xiàng)目,開(kāi)發(fā)人員都將其視為最終嘗試一些聰明的、新的、非常耗時(shí)的流行術(shù)語(yǔ)的一個(gè)機(jī)會(huì)。屏幕上有兩列不對(duì)齊嗎?現(xiàn)在是時(shí)候用純函數(shù)重寫(xiě)整個(gè)堆棧來(lái)實(shí)現(xiàn)多梯度功率下降優(yōu)化量子學(xué)習(xí)算法了。
雖然開(kāi)發(fā)人員的熱情對(duì)于實(shí)現(xiàn)一個(gè)加速的時(shí)間表是至關(guān)重要的,但是確保開(kāi)發(fā)人員的熱情能夠被引導(dǎo)到一個(gè)精簡(jiǎn)的目標(biāo)上也是至關(guān)重要的。
削減特性
削減需求似乎是個(gè)懶人的游戲。畢竟,如果你將“一切”都重新定義為一個(gè)更小的集合,自然就能夠很容易更快完成所有事情了。
但有時(shí),讓團(tuán)隊(duì)集中精力也是必要和有用的。巧妙的方法是確?;A(chǔ)仍然足夠牢固,以便將來(lái)能夠重新處理被跳過(guò)的特性。例如,確保數(shù)據(jù)庫(kù)模式預(yù)期了某些增強(qiáng)功能,而這些功能是有人希望在以后的迭代中能夠添加的。如果這僅僅意味著現(xiàn)在需要稍微調(diào)整一下模式,那么當(dāng)你返回到此過(guò)程中被推遲的特性時(shí),也可以節(jié)省時(shí)間。
簡(jiǎn)化測(cè)試
部署代碼的挑戰(zhàn)之一是在運(yùn)行之前進(jìn)行測(cè)試。最近的趨勢(shì)是把所有的東西都拆分成可以獨(dú)立運(yùn)作的小項(xiàng)目。如果每個(gè)項(xiàng)目都必須單獨(dú)測(cè)試,那也就意味著需要進(jìn)行更多的測(cè)試。一些包含大量微項(xiàng)目的新的微服務(wù)體系結(jié)構(gòu)必須經(jīng)過(guò)多次測(cè)試。
顯然你無(wú)法擺脫對(duì)測(cè)試的需求,但其中的一個(gè)訣竅是可以測(cè)試同時(shí)在一起工作的多個(gè)項(xiàng)目。有時(shí),將幾個(gè)部分捆綁在一起可以消除獨(dú)立測(cè)試它們的需要。
簡(jiǎn)化架構(gòu)
如果你打算去掉一些特性,把一些工作留到以后做,有時(shí)你可以重新考慮架構(gòu)的設(shè)計(jì)。有時(shí)則不是。
如果這些功能可能會(huì)在下個(gè)季度甚至明年出現(xiàn),那么你最好把基礎(chǔ)保留好。但如果它們不是必需的,那么清除掉架構(gòu)中的大塊內(nèi)容將會(huì)是一種極大的解放。
回?fù)苄阅艿谋WC
當(dāng)時(shí)間充裕時(shí),每個(gè)人都希望在毫秒內(nèi)就得到答案,同時(shí)還能夠確保數(shù)據(jù)被復(fù)制到三個(gè)地理上獨(dú)立的數(shù)據(jù)中心上,以防颶風(fēng)和地震的同時(shí)襲擊。誰(shuí)不想要完美呢?
但通常,高性能也意味著需要大量額外的緩存層、負(fù)載平衡層和復(fù)制層,而這些額外的層需要花費(fèi)時(shí)間來(lái)進(jìn)行構(gòu)建、配置、調(diào)試和維護(hù)。減少開(kāi)發(fā)時(shí)間的最簡(jiǎn)單方法之一是說(shuō)服利益相關(guān)者,如果屏幕刷新時(shí)間長(zhǎng)了一點(diǎn),希望他們可以稍微放松,或者打消這個(gè)想法--他們中的一些人會(huì)因?yàn)楣收隙詣?dòng)消失。并不是每個(gè)項(xiàng)目都像腦部手術(shù)那樣需要那么多的精確度和可靠性。
利用現(xiàn)有的代碼
花費(fèi)更多時(shí)間的最簡(jiǎn)單的方法就是探索一種新的技術(shù)。是的,從長(zhǎng)遠(yuǎn)來(lái)看,對(duì)下一代進(jìn)行投資是很重要的,但現(xiàn)在不是有人敲桌子要求更快完成的時(shí)候。使用與你在過(guò)去幾十個(gè)項(xiàng)目中使用的相同的語(yǔ)言和數(shù)據(jù)庫(kù)會(huì)更快更簡(jiǎn)單。你將移動(dòng)得更快,而且有時(shí)還可以重用代碼塊。不僅如此,你還將保持一致性,使開(kāi)發(fā)人員更容易在項(xiàng)目之間移動(dòng)。
接受技術(shù)債務(wù)
當(dāng)開(kāi)發(fā)人員想要完成某些事情時(shí),他們喜歡談?wù)?ldquo;技術(shù)債務(wù)”。通過(guò)現(xiàn)在承諾一個(gè)有限的或快速的解決方案,開(kāi)發(fā)人員可以把修復(fù)或填補(bǔ)空白的工作留給未來(lái)。這是一個(gè)需要認(rèn)真考慮的真實(shí)概念,但有時(shí)人們的確會(huì)想要在操縱流程時(shí)調(diào)用它。
一些技術(shù)債務(wù)是可以接受的。使用最新的數(shù)據(jù)庫(kù)或最新的語(yǔ)言技術(shù)并不總是必要的。有時(shí)候,我們可以跳過(guò)三代或四代的神奇技術(shù),直接進(jìn)入最新的版本。跳躍式的前進(jìn)可以避免很多頭痛和熬夜。
這是一種藝術(shù)的游戲,它不是沒(méi)有危險(xiǎn)的。但很多時(shí)候,技術(shù)債務(wù)的幽靈遠(yuǎn)比跳過(guò)幾代更新的現(xiàn)實(shí)更加糟糕。
開(kāi)源
太多的項(xiàng)目中有太多的自定義代碼了。如果你想完成某件事情,而很有可能其他人也有同樣的煩惱。有時(shí)其他人或組織已經(jīng)啟動(dòng)了一個(gè)開(kāi)源項(xiàng)目,現(xiàn)在也正是你加入的機(jī)會(huì)。
開(kāi)源不是萬(wàn)能的。天下也沒(méi)有免費(fèi)的午餐。你經(jīng)常需要做出妥協(xié),并與其他團(tuán)隊(duì)一起工作,以匯集一些適合個(gè)人的代碼。當(dāng)這個(gè)流程運(yùn)行良好時(shí),你只需為開(kāi)源項(xiàng)目貢獻(xiàn)一小部分時(shí)間,那么每個(gè)人就都會(huì)成功。
使用基本的工具
許多項(xiàng)目都可以使用現(xiàn)成的工具來(lái)完成。使用標(biāo)準(zhǔn)web表單(比如Drupal、Google Forms或是Survey Monkey)可以構(gòu)建的內(nèi)容是令人驚嘆的,這些表單也可以將數(shù)據(jù)轉(zhuǎn)儲(chǔ)到執(zhí)行分析的電子表格中。這不是耍滑頭。它甚至可能不會(huì)被程序員防御聯(lián)盟稱為是“編碼”工作。但是,如果它可以以一種可靠和可重用的方式交付答案,那么它就是完成大型開(kāi)發(fā)項(xiàng)目最快的方式。
實(shí)事求是
我們都?jí)粝虢⒁粋€(gè)病毒式的傳播網(wǎng)站,所以我們總是計(jì)劃處理最極端的負(fù)載。我看到過(guò)一些細(xì)心的架構(gòu)師描述他們的三層系統(tǒng),其中到處都有負(fù)載平衡器和復(fù)制的數(shù)據(jù)庫(kù),所有這些都可以支持一個(gè)每天可以照顧100人的項(xiàng)目。如果適當(dāng)進(jìn)行擴(kuò)展是容易的,那就不會(huì)是問(wèn)題,但是增加這些層會(huì)增加項(xiàng)目的復(fù)雜性,延長(zhǎng)構(gòu)建時(shí)間,并使維護(hù)變得更加復(fù)雜。引入新的程序員也會(huì)變得困難得多,而解決哪怕是最小的問(wèn)題也需要長(zhǎng)時(shí)間的團(tuán)隊(duì)會(huì)議。確實(shí),一些較新的無(wú)服務(wù)器工具(如谷歌App Engine)簡(jiǎn)化了伸縮性,但在復(fù)雜性和成本方面也需要進(jìn)行權(quán)衡。
優(yōu)秀的工程師能夠預(yù)見(jiàn)未來(lái)可能出現(xiàn)的奇怪問(wèn)題。但是,良好的成本工程需要對(duì)可能性有實(shí)事求是的態(tài)度,也許,當(dāng)這些異常值出現(xiàn)時(shí),是可以決定接受糟糕的性能甚至是失敗的。
版權(quán)聲明:本文為企業(yè)網(wǎng)D1Net編譯,轉(zhuǎn)載需注明出處為:企業(yè)網(wǎng)D1Net,如果不注明出處,企業(yè)網(wǎng)D1Net將保留追究其法律責(zé)任的權(quán)利。