你該在什么時候重新思考你的產(chǎn)品,or重寫代碼?

2014/01/27 11:14     

注:作者Nicholas Clark是DoubleDutch公司首席技術(shù)官,該公司主要為貿(mào)易展覽和貿(mào)易大會開發(fā)社交活動App應(yīng)用。

2013年9月,蘋果公司正式發(fā)布了iOS 7操作系統(tǒng),并暗示此操作系統(tǒng)將會解決SDK支持的遺留問題。在DoubleDutch公司(我們偉貿(mào)易展覽和貿(mào)易大會開發(fā)社交活動的移動應(yīng)用程序),iOS7此舉對于我們而言提供了一次絕佳的機(jī)遇,可以讓我們重新評估當(dāng)前產(chǎn)品的狀態(tài)。

在過去的數(shù)年時間里,我們開發(fā)的軟件已經(jīng)得到了長足的發(fā)展,而且公司也在不斷完善自己的愿景。但是,圍繞著我們的應(yīng)用程序,公司仍然需要承受較大的負(fù)擔(dān)(技術(shù)性債務(wù))。我們當(dāng)時做了一個決定,那就是,公司需要立刻重新開始、重新改寫我們的應(yīng)用程序,并且不去關(guān)注短期收益,優(yōu)先考慮可長期執(zhí)行的戰(zhàn)略。

在這個過程中,筆者在創(chuàng)業(yè)階段學(xué)到了很多,并且感受到了成長的收獲,更重要的是,我知道了應(yīng)該在什么時候、從最基礎(chǔ)的地方重新思考你的產(chǎn)品。

一家初創(chuàng)公司的幾個階段

在一家初創(chuàng)公司成立初期,除了創(chuàng)意之外應(yīng)該就沒有太多東西了。你需要花了好幾個月的時間忙這忙那,比如學(xué)習(xí)市場營銷,與潛在的客戶見面,還要形成一個可行的公司發(fā)展方向。

當(dāng)企業(yè)的方向開始越來越具體,你所開發(fā)的東西就會變成一款最低可行性產(chǎn)品(MVP),而且會努力找到自己的首批客戶。這一過程將會持續(xù)進(jìn)行,直到你獲得到理想的客戶,然后收集用戶反饋,接著再不斷地循環(huán)這個過程。你的市場,其實就是你產(chǎn)品需要解決的那些問題,將會變得越來越重要。

從一個技術(shù)角度來看,如果時間嚴(yán)重短缺,初創(chuàng)公司的早期團(tuán)隊可以由幾個工程師組成,但是,如果對市場了解有限,加上缺乏資源和分配,可能導(dǎo)致產(chǎn)品和結(jié)構(gòu)性的決策無法按時完成。

在這個階段,客戶要求會不斷融入,每個客戶都代表了業(yè)務(wù)的一大塊比例,你別無選擇,只能接受他們。

有些客戶要求和產(chǎn)品預(yù)期較為相符,但是有些則是一些“一次性”的需求。千萬不要有“不惜一切代價滿足客戶需求”這樣的想法,你必須要不斷地提升產(chǎn)品,并保持核心客戶的滿意,這點是至關(guān)重要的。

在經(jīng)歷上述過程之后,你的客戶群將會迅速增長,同時你的產(chǎn)品功能和復(fù)雜度也會隨之增加。由于對更大的市場有了一定了解,你會逐漸找到自己的核心競爭力,并且意識到有必要把自己的產(chǎn)品擴(kuò)展成一個平臺。

由于產(chǎn)品更新?lián)Q代變得越來越快,產(chǎn)品代碼可能會變得過于臃腫,支持成本會隨著時間變得越來越高。過去對增長非常有幫助的產(chǎn)品可配制性,也迅速成為了一種負(fù)擔(dān),導(dǎo)致產(chǎn)品更新的節(jié)奏越來越慢。由于此時的企業(yè)變得越來越復(fù)雜,從而影響到新員工的招聘,由于人手不足,加上產(chǎn)品配置錯誤增多,產(chǎn)品Bug也會越來越多。

不過,現(xiàn)在你的工程團(tuán)隊無論是在規(guī)模還是在專業(yè)技術(shù)上都已經(jīng)變得非常成熟了,而且企業(yè)此時也實現(xiàn)了與市場的契合,并準(zhǔn)備開始積極擴(kuò)展。有了明確的目標(biāo),加上具有較強(qiáng)執(zhí)行力的團(tuán)隊,一切就只等時間幫你解決技術(shù)債務(wù)了。現(xiàn)在你所要做的,就是為高速增長做好準(zhǔn)備。

增長的好處和壞處

實現(xiàn)產(chǎn)品和市場的契合是一種很奇妙的感覺,但你必須保持有足夠的靈活性,保持創(chuàng)新,快速做出改變。

一旦你的初創(chuàng)公司實現(xiàn)了這種契合,那么就需要考慮如何應(yīng)對日益增長的技術(shù)性債務(wù),以下有兩個很明顯的選擇:1)迭代重構(gòu),并不斷提升產(chǎn)品組件2)對于重寫(部分)全部產(chǎn)品的工作,要加大投入。

第一個選擇可以延長支持技術(shù)債務(wù)所需要的時間,但是前期如果沒有大量成本投入則很難得到持續(xù)性的改觀。重寫App應(yīng)用不僅涉及到的前期成本非常高,而且回報也具有較高的風(fēng)險。不僅如此,重寫App應(yīng)用是對產(chǎn)品未來不必的一種結(jié)構(gòu)性設(shè)計,它不是要解決產(chǎn)品的遺留問題。

在評估App應(yīng)用代碼庫的時候,有幾個重要的指標(biāo),這些指標(biāo)會影響我們做出決定,是否需要重寫絕大部分代碼:

未來的產(chǎn)品核心件需要做大量結(jié)構(gòu)性改變才能實現(xiàn)

該產(chǎn)品的技術(shù)債務(wù)讓開發(fā)速度變慢,并給工程師帶來負(fù)擔(dān)

從產(chǎn)品的核心體驗被越來越多的功能取代

一個迫在眉睫的事情(比如iOS 7發(fā)布)要求必須進(jìn)行重新架構(gòu)產(chǎn)品

工程團(tuán)隊對產(chǎn)品和未來有著非常深刻的理解

如果你身處在一個類似的情況下,比如產(chǎn)品的最后期限迫在眉睫,比如要投入大量時間,而且你的產(chǎn)品可以從一些關(guān)鍵性改變中受益,那么重寫代碼可能是你必須要做的正確選擇。

權(quán)衡風(fēng)險

也有人會說,重寫代碼也許不是一個非常明智的決策。讓公司整個工程團(tuán)隊重新構(gòu)建一些東西,而且更重要的是,原來的產(chǎn)品已經(jīng)積累了龐大的客戶群,這些用戶很可能會重復(fù)安裝很多次更新,直到重寫應(yīng)用完成。因此,如果要獲得更大回報,重寫代碼的確是有較高風(fēng)險的。

如果你決定在長遠(yuǎn)發(fā)展上下個賭注,決定重寫代碼,那么就需要增加更新的速度,并且要專注于提供最好的終端用戶體驗,并用最快的時間找到新的工程師。

對于筆者所在的DoubleDutch公司來說,重寫App應(yīng)用意味著我們必須要用四個月的時間轉(zhuǎn)移絕大部分工程團(tuán)隊的注意力,因為我們選擇了改良自己的應(yīng)用程序接口(API),安卓應(yīng)用程序,以及iOS應(yīng)用。在iOS 7兼容性更新上,我們沒有做太多架構(gòu)性的改變,因此我們兩名工程師在不到兩個月的時間里完成了這項工作。

當(dāng)然,我們這么做也是一個非常冒險的舉措。展會活動類型的App應(yīng)用現(xiàn)在競爭性越來越大,我們之前的App應(yīng)用的銷售非常出色,因此當(dāng)時整個公司的目標(biāo)就是盡可能快的發(fā)展壯大,而重寫產(chǎn)品似乎和搶奪市場份額的目標(biāo)不大吻合。隨后,我們重新評估了風(fēng)險,認(rèn)為競爭對手暫時還無法追趕或超越我們,所以如果要迅速有效的獲得未來創(chuàng)新的能力,我們最終決定重寫App應(yīng)用。

實現(xiàn)飛躍

接著上面的話題,你肯定會問出一個非常重要的問題,那就是,哪個風(fēng)險更大一些呢?是減緩幾個月時間去開發(fā)新功能,還是讓競爭對手重復(fù)快速更新?

對于筆者所在的公司而言,我們堅信自己的執(zhí)行能力,并決心要成為行業(yè)領(lǐng)導(dǎo)者??紤]到這一點,我們的希望用創(chuàng)新壓倒競爭對手,但是我們也會承擔(dān)一定的風(fēng)險,比如競爭對手有可能在短期內(nèi)超越我們。

一開始,在我們開發(fā)自己的應(yīng)用程序的時候,對于市場并沒有一個較為成熟的認(rèn)識,我們只是隨波逐流地去構(gòu)建自己的產(chǎn)品。事后看來,我們在同行業(yè)中需要有一個強(qiáng)大的立足點,從以往的經(jīng)驗中得到教訓(xùn),才能為未來做更好的準(zhǔn)備。

那么,我們是否做出了正確的決策呢?現(xiàn)在來看還為時過早,但是從公司的發(fā)展速度和表現(xiàn)來看,我們有足夠的理由保持樂觀。

相關(guān)閱讀