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

2014/01/27 11:14     

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

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

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

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

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

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

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

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

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

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

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

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

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

增長(zhǎng)的好處和壞處

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

實(shí)現(xiàn)飛躍

接著上面的話題,你肯定會(huì)問(wèn)出一個(gè)非常重要的問(wèn)題,那就是,哪個(gè)風(fēng)險(xiǎn)更大一些呢?是減緩幾個(gè)月時(shí)間去開(kāi)發(fā)新功能,還是讓競(jìng)爭(zhēng)對(duì)手重復(fù)快速更新?

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

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

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

相關(guān)閱讀