蘇文力
減少開(kāi)發(fā)工作量才會(huì)對(duì)項(xiàng)目完成時(shí)間產(chǎn)生根本的影響。壓縮項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)的功能可以在一定程度上減少開(kāi)發(fā)工作量。降低交易容量、安全性和可擴(kuò)充性等方面要求,則可以讓系統(tǒng)的架構(gòu)變簡(jiǎn)單,大幅度降低開(kāi)發(fā)工作量。但在做出決定之前要想清楚,所犧牲掉的這些要求與時(shí)間進(jìn)度相比到底誰(shuí)更重要,后續(xù)將怎樣應(yīng)對(duì)可能會(huì)出現(xiàn)的局面。
前段時(shí)間,領(lǐng)導(dǎo)多次強(qiáng)調(diào)某重點(diǎn)項(xiàng)目應(yīng)早日完成。團(tuán)隊(duì)成員都非常清楚該項(xiàng)目的重要意義,主動(dòng)開(kāi)啟加班加點(diǎn)工作模式。自己以為領(lǐng)導(dǎo)知道大家都在全力以赴,應(yīng)該能理解開(kāi)發(fā)畢竟需要一定的時(shí)間周期。結(jié)果在月度工作會(huì)上,領(lǐng)導(dǎo)對(duì)于項(xiàng)目進(jìn)度很不滿意。批評(píng)這么簡(jiǎn)單明確的項(xiàng)目,卻拖了如此長(zhǎng)的時(shí)間。要求無(wú)論如何必須在規(guī)定的時(shí)間節(jié)點(diǎn)上投產(chǎn)上線。
重新理解IT開(kāi)發(fā)工作量
領(lǐng)導(dǎo)或業(yè)務(wù)部門(mén)對(duì)IT工作最常見(jiàn)的抱怨是開(kāi)發(fā)工期長(zhǎng)。這很大程度是因未看到IT開(kāi)發(fā)的全部工作量而造成的誤解。外行僅能從表面開(kāi)發(fā)實(shí)現(xiàn)的功能去理解IT開(kāi)發(fā)工作量,而實(shí)際IT所需完成的工作遠(yuǎn)不止于此。比如說(shuō)匯款,一般人只會(huì)想到從一個(gè)賬戶的資金余額中扣除所要匯出的金額數(shù)目,加入到所要匯入的另一個(gè)賬戶的余額中。
實(shí)際開(kāi)發(fā)匯款系統(tǒng)過(guò)程中要考慮記錄匯款操作處理明細(xì)、查詢(xún)匯款詳情、為可能發(fā)生的記錯(cuò)賬狀況提供賬務(wù)處理支持、與匯款機(jī)構(gòu)間資金清算、通匯機(jī)構(gòu)目錄管理、反洗錢(qián)管理、系統(tǒng)故障后的數(shù)據(jù)恢復(fù)處理,以及未來(lái)調(diào)整匯款手續(xù)費(fèi)等參數(shù)設(shè)置管理等等。IT工作量很像海上的冰山,水面以下有著巨大的體量。
開(kāi)發(fā)產(chǎn)品所承載的用戶數(shù)量決定了相應(yīng)的建設(shè)工作量規(guī)模和復(fù)雜度。搭個(gè)臨時(shí)住的窩棚,一個(gè)人數(shù)小時(shí)就可以完成。若要蓋個(gè)一家人可以安頓下來(lái)的平房,則要考慮保暖防寒、堅(jiān)固耐用、出入方便和私密安全等等因素,除了自己大量的準(zhǔn)備工作外,還需要有經(jīng)驗(yàn)的朋友和左鄰右舍很多人幫助,忙活幾十天。
如果要建筑上百人居住的樓房,那就還要考慮上下水、通訊、隔音、通風(fēng)、采光和消防等更多因素。必須依靠大批專(zhuān)業(yè)建筑工程師和施工人員,耗費(fèi)一年多時(shí)間才能完成。如果要承建摩天大樓,則又會(huì)有許多完全不同的考慮因素,需要相應(yīng)的專(zhuān)業(yè)團(tuán)隊(duì),社會(huì)化協(xié)作,建設(shè)數(shù)年以上。
隨著用戶人數(shù)的上升,建筑的架構(gòu)會(huì)完全不同,規(guī)模和復(fù)雜度就會(huì)呈幾何級(jí)數(shù)的遞增。不同架構(gòu)的工程量和復(fù)雜度基本在一個(gè)數(shù)量級(jí)。不管細(xì)節(jié)上如何簡(jiǎn)化,工程周期總會(huì)在一定時(shí)間范圍以上。軟件系統(tǒng)開(kāi)發(fā)也基本遵循同樣的規(guī)律。只要使用規(guī)模上去了,就必須有相應(yīng)的架構(gòu)支持,就一定會(huì)大幅延長(zhǎng)開(kāi)發(fā)周期。
單用戶架構(gòu)可以讓一個(gè)用戶自如操作,但不可能讓上百人同時(shí)使用。必須升級(jí)到支持多任務(wù)處理的架構(gòu)系統(tǒng)上。若上萬(wàn)人同時(shí)操作,就必須運(yùn)作在支持大規(guī)模并行處理的可擴(kuò)展架構(gòu)上。隨著用戶數(shù)的增加,所需要的開(kāi)發(fā)人員數(shù)量和能力要求會(huì)完全不同。
不同架構(gòu)的復(fù)雜度和開(kāi)發(fā)工作量完全不可類(lèi)比。開(kāi)發(fā)者需要根據(jù)業(yè)務(wù)發(fā)展規(guī)模預(yù)期,配置相應(yīng)的架構(gòu)。若業(yè)務(wù)量很小,同時(shí)使用的用戶少,就可以用比較簡(jiǎn)單的架構(gòu),相應(yīng)的開(kāi)發(fā)工作量就比較小。業(yè)務(wù)量規(guī)模大,就要配套更復(fù)雜的架構(gòu)。大量程序間相互連接調(diào)用,需要考慮的情況成倍增加,造成調(diào)試測(cè)試工作量曲線陡直上升。
領(lǐng)導(dǎo)和業(yè)務(wù)部門(mén)要求短時(shí)間內(nèi)就將項(xiàng)目開(kāi)發(fā)出來(lái),其心情完全可以理解。但工程人員不是魔術(shù)師,也必須符合客觀規(guī)律的要求。只有完成所有必要的工作才能將系統(tǒng)交付使用。大量開(kāi)發(fā)工作無(wú)法并行,即便加班或增加人手,對(duì)于縮短開(kāi)發(fā)周期的作用也十分有限。
減少開(kāi)發(fā)工作量才會(huì)對(duì)項(xiàng)目完成時(shí)間產(chǎn)生根本的影響。壓縮項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)的功能可以在一定程度上減少開(kāi)發(fā)工作量。降低交易容量、安全性和可擴(kuò)充性等方面要求,則可以讓系統(tǒng)的架構(gòu)變簡(jiǎn)單,大幅度降低開(kāi)發(fā)工作量。但在做出決定之前要想清楚,所犧牲掉的這些要求與時(shí)間進(jìn)度相比到底誰(shuí)更重要,后續(xù)將怎樣應(yīng)對(duì)可能會(huì)出現(xiàn)的局面。
對(duì)于初期無(wú)法估算有多大用戶使用量的實(shí)驗(yàn)性創(chuàng)新項(xiàng)目,為避免浪費(fèi),可以先簡(jiǎn)單做出來(lái)。在實(shí)際環(huán)境中檢驗(yàn)其未來(lái)發(fā)展?jié)摿?,再考慮后續(xù)如何加大開(kāi)發(fā)投入。如果你很清楚系統(tǒng)未來(lái)將會(huì)起到什么作用,會(huì)有多大體量,那就不能偷工減料。必須采用符合業(yè)務(wù)發(fā)展要求的系統(tǒng)架構(gòu)。
有些領(lǐng)導(dǎo)認(rèn)為只要對(duì)IT團(tuán)隊(duì)采取高壓手段,就會(huì)達(dá)到縮短工期的要求。IT團(tuán)隊(duì)很可能會(huì)迫于壓力,偏重于眼前的開(kāi)發(fā)進(jìn)度,采用簡(jiǎn)化的系統(tǒng)架構(gòu),給未來(lái)埋下隱患。有些工作量是不能省的,必須保證足夠的開(kāi)發(fā)時(shí)間。如果我們不能做好那些重要而不緊急的工作事項(xiàng),后面就會(huì)讓事情變得不但重要,而且異常緊急,讓你叫苦不迭。
有時(shí)候業(yè)務(wù)部門(mén)提出一些新功能要求,以為僅僅是對(duì)現(xiàn)有系統(tǒng)的部分補(bǔ)充修改,應(yīng)該沒(méi)太多工作量。若現(xiàn)有架構(gòu)支持,的確會(huì)很容易完成相關(guān)的開(kāi)發(fā)工作。如果所提要求在現(xiàn)有架構(gòu)下不支持,就需要修改現(xiàn)有架構(gòu)或更換新架構(gòu)才能實(shí)現(xiàn),那可就沒(méi)那么簡(jiǎn)單了。
這時(shí)候要不就是你委屈一下,基于現(xiàn)有架構(gòu)的條件限制,改變自己的需求;要不就是保持耐心,付出更多的時(shí)間成本和開(kāi)發(fā)資源修改或更換架構(gòu)。這就是為什么企業(yè)過(guò)段時(shí)間就會(huì)升級(jí)其核心系統(tǒng)的原因。所謂新一代核心系統(tǒng),其實(shí)就是在架構(gòu)上做出根本改變,采用最新技術(shù)手段,滿足業(yè)務(wù)發(fā)展的要求。
曾經(jīng)的經(jīng)驗(yàn)教訓(xùn)
2000年互聯(lián)網(wǎng)興起,感覺(jué)銀行應(yīng)用互聯(lián)網(wǎng)應(yīng)該會(huì)是趨勢(shì)。就在開(kāi)發(fā)中心組織了幾個(gè)人的團(tuán)隊(duì)進(jìn)行研究,并開(kāi)發(fā)出來(lái)了適合少數(shù)用戶使用的系統(tǒng)原型。設(shè)計(jì)采用的架構(gòu)十分簡(jiǎn)陋,但演示起來(lái)還挺像模像樣。在與業(yè)務(wù)部門(mén)的一次交流中,向?qū)Ψ浇榻B有這么一個(gè)應(yīng)用系統(tǒng)原型,可以讓客戶通過(guò)上網(wǎng)遠(yuǎn)程操作自己的賬戶。
對(duì)方看到演示后非常興奮,要求馬上投產(chǎn)推廣。嚇得我趕快解釋說(shuō)明這僅僅是個(gè)原型,還有大量開(kāi)發(fā)工作未完成,完全不具備投入生產(chǎn)的條件。對(duì)方感覺(jué)很失望,強(qiáng)烈希望趕快完成剩下的開(kāi)發(fā)工作,在最短的時(shí)間內(nèi)投入生產(chǎn),爭(zhēng)取成為國(guó)內(nèi)第一家開(kāi)展互聯(lián)網(wǎng)業(yè)務(wù)服務(wù)的銀行。
這樣的目標(biāo)追求對(duì)于我們技術(shù)人員也很有吸引力,當(dāng)下雙方一拍即合,決定共同努力讓系統(tǒng)盡快上線。既然工作重點(diǎn)是快,那一切就圍繞早日投產(chǎn)開(kāi)展工作。為省時(shí)間,我們決定在現(xiàn)有簡(jiǎn)易架構(gòu)基礎(chǔ)上開(kāi)展后續(xù)開(kāi)發(fā)。項(xiàng)目進(jìn)展比較順利,很快就將各部分配套功能開(kāi)發(fā)完成。投產(chǎn)上線后市場(chǎng)反響不錯(cuò),系統(tǒng)也能夠支撐當(dāng)時(shí)的業(yè)務(wù)規(guī)模。
就在此時(shí),行里高層敏銳意識(shí)到互聯(lián)網(wǎng)發(fā)展的戰(zhàn)略契機(jī),決定成立電子銀行部,大力發(fā)展電子銀行業(yè)務(wù)。新部門(mén)一成立就把向客戶推薦互聯(lián)網(wǎng)銀行服務(wù)作為工作重點(diǎn),隨著全國(guó)各地分支機(jī)構(gòu)的積極營(yíng)銷(xiāo),系統(tǒng)每天的交易量迅速上升。一開(kāi)始自己還挺高興,但很快就意識(shí)到系統(tǒng)容量恐怕要撐不住了。
趕緊安排研究尋找對(duì)策,得知更換高檔機(jī)器設(shè)備可以在一定程度上緩解壓力。而以目前的架構(gòu)和業(yè)務(wù)上升趨勢(shì),即便是選擇最頂級(jí)配置,也堅(jiān)持不了多長(zhǎng)時(shí)間。唯一的方法是改造現(xiàn)有架構(gòu),但可利用的時(shí)間已經(jīng)不多了。腦中呈現(xiàn)出一種不祥的預(yù)感。很后悔前期為了快,選擇了支持小規(guī)模應(yīng)用的架構(gòu)。
第一時(shí)間趕緊安排大批精兵強(qiáng)將,開(kāi)發(fā)高并發(fā)架構(gòu)下的第二代互聯(lián)網(wǎng)銀行系統(tǒng)。同時(shí)更換高端機(jī)器設(shè)備,盡可能擴(kuò)展系統(tǒng)容量。擔(dān)心的事情還是發(fā)生了。業(yè)務(wù)很快迎來(lái)了爆發(fā)性增長(zhǎng),一開(kāi)始還可以通過(guò)性能調(diào)優(yōu)做出應(yīng)對(duì),堅(jiān)持了一些日子,終于有一天系統(tǒng)被壓跨,一連三天都無(wú)法正常運(yùn)行。給行里的聲譽(yù)帶來(lái)了破壞性的影響。
被逼無(wú)奈只好硬著頭皮嘗試優(yōu)化舊架構(gòu),想方設(shè)法使其能夠在一定程度上支持多臺(tái)機(jī)器設(shè)備并行處理。只能優(yōu)先保證系統(tǒng)能夠提供最基本的服務(wù),其他也就顧不上了。表現(xiàn)出來(lái)的客戶體驗(yàn)實(shí)在讓人不敢恭維。業(yè)務(wù)部門(mén)很支持,暫緩了新用戶的注冊(cè)審批,引導(dǎo)用戶錯(cuò)峰使用,人工提供應(yīng)急服務(wù)。經(jīng)過(guò)狼狽不堪的一通折騰,總算是穩(wěn)住了局面,贏得了更多的時(shí)間。
當(dāng)?shù)诙ヂ?lián)網(wǎng)銀行系統(tǒng)投產(chǎn)時(shí),一切才算平靜了下來(lái)。業(yè)務(wù)方面可以全力以赴的開(kāi)拓市場(chǎng),技術(shù)方面則能夠針對(duì)業(yè)務(wù)需求提供穩(wěn)定快速的升級(jí)服務(wù)。這件事給我?guī)?lái)的教訓(xùn)十分深刻。明白了若沒(méi)有合理預(yù)估業(yè)務(wù)發(fā)展前景,一味用簡(jiǎn)化架構(gòu)追求上線速度,最后必然會(huì)遭受懲罰。
開(kāi)誠(chéng)布公地尋求理解和支持
多年前為行里信用卡部開(kāi)發(fā)系統(tǒng),業(yè)務(wù)方面的負(fù)責(zé)人抱怨我們主機(jī)項(xiàng)目團(tuán)隊(duì)開(kāi)發(fā)周期太長(zhǎng)。差不多相同的需求提交給了微型機(jī)項(xiàng)目團(tuán)隊(duì)很快就能完成,而在我們這里卻遲遲不能交付。給出這樣的證據(jù)似乎很有說(shuō)服力,但他并不清楚實(shí)際上這是拿了兩個(gè)完全不同的系統(tǒng)在做開(kāi)發(fā)規(guī)模比較。
表面上看二個(gè)系統(tǒng)實(shí)現(xiàn)的功能差別不大,但最終投產(chǎn)要求的效果差異巨大。微機(jī)系統(tǒng)只能滿足城市一個(gè)信用卡中心柜員日常操作。主機(jī)除了滿足城市信用卡中心日常操作外,還要支持一個(gè)城市所有儲(chǔ)蓄網(wǎng)點(diǎn)柜員操作辦理信用卡業(yè)務(wù),與商戶實(shí)現(xiàn)消費(fèi)對(duì)接,開(kāi)展同城和全國(guó)資金清算等等。二個(gè)系統(tǒng)架構(gòu)的復(fù)雜度差著好幾個(gè)數(shù)量級(jí)別。
跟他講了講上面那些道理,好像被理解了,可沒(méi)過(guò)多久同樣的抱怨就又來(lái)了。這很影響開(kāi)發(fā)團(tuán)隊(duì)的心情,也讓業(yè)務(wù)和技術(shù)雙方產(chǎn)生了隔閡。看來(lái)其內(nèi)心一直存在疑慮,必須徹底消除。在項(xiàng)目非常忙的情況下,找個(gè)比較完整的時(shí)間與其做了一次深入交流。
我拿出項(xiàng)目系統(tǒng)開(kāi)發(fā)規(guī)格書(shū),將涉及的所有開(kāi)發(fā)工作一一指給他看。詳細(xì)解釋這意味著需要做那些工作,消耗多大的開(kāi)發(fā)資源。針對(duì)其不太理解的工作事項(xiàng),解釋說(shuō)明如果該部分工作沒(méi)有做好會(huì)有哪些后果,實(shí)現(xiàn)后會(huì)對(duì)整個(gè)系統(tǒng)提供什么幫助。使其了解到這些工作必不可少,唯有此才能支持其業(yè)務(wù)后續(xù)的持續(xù)發(fā)展。
雖然沒(méi)有讓對(duì)方完全信服,但他對(duì)于我們工作有了比較完整的了解,知道了與微機(jī)開(kāi)發(fā)團(tuán)隊(duì)所做工作并不可以直接比較。其逐漸轉(zhuǎn)變了態(tài)度,更愿意聽(tīng)取我們的想法,并盡全力參與配合整個(gè)開(kāi)發(fā)工作。由于平常工作地點(diǎn)就在一起,他能夠很清楚的看到我們每天拼命的工作狀況。大家慢慢建立起了相互信任,團(tuán)結(jié)成了一個(gè)戰(zhàn)斗集體,項(xiàng)目進(jìn)展越來(lái)越順利。
當(dāng)所開(kāi)發(fā)的信用卡系統(tǒng)順利投產(chǎn)推廣后,業(yè)務(wù)部門(mén)終于看到了的主機(jī)版本帶來(lái)的優(yōu)勢(shì)。投產(chǎn)應(yīng)用的城市機(jī)構(gòu)市場(chǎng)競(jìng)爭(zhēng)力碾壓同業(yè),業(yè)績(jī)大幅度提升。相對(duì)應(yīng)的微機(jī)版本雖然有著先發(fā)優(yōu)勢(shì),但推廣后的效果則差強(qiáng)人意。受到系統(tǒng)架構(gòu)方面的限制,其后續(xù)也難有根本性的改進(jìn)。維持一段時(shí)間后,就逐漸被淘汰掉了。
文章開(kāi)頭所講的項(xiàng)目進(jìn)度最終還是按領(lǐng)導(dǎo)要求上線了。既然投產(chǎn)時(shí)間不能改變,項(xiàng)目質(zhì)量也必須保證,解決的方法只能是將項(xiàng)目拆分成兩期。一期先實(shí)現(xiàn)業(yè)務(wù)交易處理,采用人工輔助完成與其他系統(tǒng)的對(duì)接操作。二期再開(kāi)發(fā)與其他相關(guān)系統(tǒng)的直通互聯(lián),徹底實(shí)現(xiàn)全流程操作自動(dòng)化。算是運(yùn)氣比較好,該項(xiàng)目的特點(diǎn)適合進(jìn)行這樣的拆分。
(作者系陽(yáng)光保險(xiǎn)助理總裁)