軟件平臺化開發(fā)項目實踐

發(fā)布日期:
2015-12-25

瀏覽次數(shù):

起源

對于電信行業(yè)而言,這是一個沸騰的歲月——VOIP、小靈通、寬帶上網(wǎng)、短消息、預(yù)付費等等業(yè)務(wù),一股腦的推到百姓面前,讓“上帝”們頓時感覺眼花繚亂;而我們,作為電信運營支撐系統(tǒng)(主要功能是計費、營帳)的開發(fā)公司,也終于有了用武之地。

面對忽然出現(xiàn)的市場需求,我們迅速做出了本能的反應(yīng):盡我們所能滿足電信局用戶的要求,搶占運營支撐系統(tǒng)的市場份額。本來我們已經(jīng)擁有了一個針對市級電信客戶的小型計費系統(tǒng),經(jīng)過不斷維護增強而相當(dāng)成熟;面對一下子冒出來的不同運營商在長話、市話、IP電話計費營帳以及相互之間結(jié)算的系統(tǒng)需求,我們將開發(fā)人員分成不同的項目組,在原有基礎(chǔ)上分別為不同的客戶進行定制開發(fā),并全權(quán)負(fù)責(zé)系統(tǒng)的集成和交付。隨著所交付應(yīng)用的系統(tǒng)數(shù)量不斷增加,成功的喜悅被一種焦慮和疲憊所代替——客戶需求增加/變更和產(chǎn)品缺陷處理。項目團隊成員像救火隊一樣奔赴現(xiàn)場,解決客戶的問題。我們就像《人月神話》的描述一樣,表面上看起來好像沒有任何一個單獨的問題會導(dǎo)致困難,每個都能被解決,但是當(dāng)它們相互糾纏和累積在一起的時候,我們的行動就會變得越來越慢。對問題的麻煩程度,每個人似乎都會感到驚訝,并且很難看清問題的本質(zhì),一個接一個淹沒在了焦油坑中。

盡管大家鮮有機會當(dāng)面交流,但是仍然會通過郵件交流一下現(xiàn)場解決問題的進度和方式:我們發(fā)現(xiàn)很多用戶的需求是相同或是類似的,由于原有系統(tǒng)缺乏該功能,我們不得不針對不同用戶去重復(fù)開發(fā)相同的特性,我們甚至私下提供代碼以相互參考。我們有時隱隱覺得該作些什么使開發(fā)效率提高一些,但是這種念頭在現(xiàn)場用戶焦灼而嚴(yán)厲的目光下轉(zhuǎn)瞬間就消失了。

公司總部也發(fā)現(xiàn)了這個問題,為我們空投了一位技術(shù)總監(jiān)。其實我們對他并不陌生,他曾經(jīng)在硬件和嵌入式系統(tǒng)的項目中從事過管理工作,一個認(rèn)為系統(tǒng)開發(fā)都是類似的、擁有莫名優(yōu)越感的項目經(jīng)理。從他參加了一系列昂貴的培訓(xùn)經(jīng)歷來看,總部仿佛期望將他培養(yǎng)成未來的管理明星,而我們這里就好比這位明星的起跳板和出場秀。

剛剛上任,他就為大家宣灌了“平臺化”開發(fā)的重要意義和方法,聲稱要將系統(tǒng)開發(fā)的像KFC配餐一樣方便快捷。他要求項目組把各個系統(tǒng)的特性列出清單,然后將這些特性匯總為一張總表,又加上了一些頗為時尚的定語:跨數(shù)據(jù)庫、跨操作系統(tǒng)、三層結(jié)構(gòu)等等。當(dāng)我們解釋跨數(shù)據(jù)庫在技術(shù)實現(xiàn)上是多么困難時,得到的答復(fù)是你們可以自行開發(fā)一個高效的數(shù)據(jù)庫來徹底解決這個麻煩。在飽受現(xiàn)場客戶的抱怨后,我們長久以來被壓抑的情緒終于在這種無知和傲慢面前得到了發(fā)泄:在一次重要的產(chǎn)品規(guī)劃會議上,我們將異常樂觀的里程碑計劃、“亂點鴛鴦譜”般的特性分配進行了徹底的否決,甚至將這個夢想中的“平臺產(chǎn)品”戲稱為“殺死你三千”(周星馳的一部電影中將各種炸藥放在一個籃子里,聲稱是精心研制出的超級武器,實際上卻是派不上用場的廢物)。那位曾經(jīng)躊躇滿志的技術(shù)總監(jiān)在“千夫所指”下黯然離去。

鬧劇收場了,盡管我們在心里上得到了暫時的宣泄,但是在業(yè)務(wù)上卻是一籌莫展。我們也認(rèn)同這種平臺化開發(fā)是解決目前困境的有效手段,但是僅僅有理念是遠遠不夠的,我們?nèi)狈σ粋€真正能夠?qū)⒗砟罡吨T實踐的人物,否則仍然要在黑暗中不斷碰壁。更糟糕的,我們已經(jīng)沒有時間來揮霍:來自用戶的壓力漸漸將我們逼到了墻角卻無力扭轉(zhuǎn);公司總部在核算我們部門的財務(wù)狀況,如果無法盈利將來就會被拆分或是裁員。

我們將何去何從?

轉(zhuǎn)機

有時候你不得不承認(rèn)一個人可以帶來轉(zhuǎn)機。

作為一家開發(fā)電信支撐系統(tǒng)的公司,Z公司是我們的競爭對手,其產(chǎn)品質(zhì)量和研發(fā)效率強于我們,我們一直也不明白其中的奧秘。Z公司的一位資深項目經(jīng)理被我們“挖”了過來,準(zhǔn)確的說不是我們“挖”的,而是這位心直口快的業(yè)務(wù)牛人得罪了公司高層,居然越俎代庖的妄想染指Z公司的產(chǎn)品規(guī)劃活動,震怒的Z公司高層于是將他“推”到了我們面前。我們就將這位業(yè)務(wù)牛人稱為“小馬”吧。

在困境中的人們往往期望奇跡的發(fā)生,我們就將這個奇跡寄托在小馬身上了——小馬被任命為我們的技術(shù)總監(jiān)。

由于曾經(jīng)是競爭對手,小馬對我們的產(chǎn)品現(xiàn)狀一清二楚,甚至可以說得出各個產(chǎn)品的特點和缺陷。他對我們各自為戰(zhàn)的局面感到困惑,明確提出當(dāng)務(wù)之急是必須采取平臺化開發(fā)方式,開發(fā)出能夠支撐未來整個產(chǎn)品系列的平臺框架,同時針對不同的電信客戶進行少量定制開發(fā),在質(zhì)量和進度方面獲得突破。他也指出平臺化開發(fā)會暫時影響我們對市場的響應(yīng),就是說會丟掉一些機會;我們在研發(fā)組織、工程師技能等方面也會有很大的調(diào)整。

大家對目前糟糕的狀況感到深深的厭惡,都希望能夠拿出有力的產(chǎn)品去整頓混亂的市場,當(dāng)然前提是趕在市場機會窗關(guān)閉之前。我們已經(jīng)沒有退路,所以也沒有猶豫就投入了這場日后看來頗具風(fēng)險的“賭博”中了。

重整

小馬不像他的前任,沒有談?wù)撌裁锤呱畹睦碚?,而是直接觸及了問題的核心——什么是我們的平臺產(chǎn)品,里面包括了什么。平臺對于我們的開發(fā)人員來講并不陌生——我們每天都在和各式各樣的平臺打交道:開發(fā)平臺、信息平臺、管理平臺。但看似簡單的問題著實難以回答,似乎每個人都知道一點,有無法達成共識。多數(shù)人心目中的理想平臺是無所不能的利器,可以定制成所有的產(chǎn)品:小到市縣級的簡單市話計費、大到省級漫游計費、也要包括營業(yè)帳務(wù)系統(tǒng),還要支撐不斷出現(xiàn)的新業(yè)務(wù),這樣我們就可以“一勞永逸”了。

從實際情況看,我們實在過于天真。基于原有系統(tǒng)不斷的修修補補已經(jīng)將問題暴露出來了——原有的成熟的小型系統(tǒng)的架構(gòu)根本無法支持全系列的產(chǎn)品,我們未來設(shè)計的平臺恐怕同樣無法包打天下。關(guān)鍵問題是,面對如此龐大的市場,我們到底如何規(guī)劃產(chǎn)品進而確定平臺的范圍。

這就是產(chǎn)品規(guī)劃的問題,對于我們這些技術(shù)出身的工程師來講,實在是“不專業(yè)”。都知道在“市場導(dǎo)向”與“技術(shù)導(dǎo)向”的PK中,無疑前者勝出,關(guān)鍵是如何操作。

小馬把我們公司負(fù)責(zé)計費產(chǎn)品的銷售人員、客戶經(jīng)理請來共商大計。從這群平日巧舌如簧的人們口中,我們驚訝的發(fā)現(xiàn)了許多非常珍貴的信息:南北電信即將拆分,網(wǎng)間結(jié)算系統(tǒng)市場增大;移動公司準(zhǔn)備出臺新的系統(tǒng)規(guī)范,其中會有很多新業(yè)務(wù)描述等等。當(dāng)我們問他們?yōu)槭裁床粚⑦@些有價值的信息早點告訴我們時,他們說以前提供過很多信息后沒有反饋,所以現(xiàn)在也懶的說了;開發(fā)人員都挺忙,也沒有必要多此一舉。我們忽然感覺自己就像鐵路上玩耍的小孩,只注意了腳下的石子,卻沒有意識到即將呼嘯而來的列車。

好在現(xiàn)在還不算晚。經(jīng)過幾次會議,我們對整個運營支撐系統(tǒng)的市場才算有了大致清晰的看法:

l? 小型系統(tǒng)屬于底端市場,用戶對系統(tǒng)的質(zhì)量要求相對不高,盡管數(shù)量較大,但是進入門檻不高且價格戰(zhàn)激烈,后期維護成本相對較高;

l? CDMA、PHS網(wǎng)絡(luò)正在建設(shè),支撐系統(tǒng)的市場需求旺盛,用戶對系統(tǒng)要求很高,并且重視系統(tǒng)的維護和增強,具有非常理想的業(yè)務(wù)利潤;

l? 針對國內(nèi)終端用戶的現(xiàn)狀,預(yù)付費業(yè)務(wù)需求很大,關(guān)鍵是系統(tǒng)要提供實時處理的能力,這方面我們與很多競爭對手都是空白;

l? 運營商之間競爭加劇,互聯(lián)互通屢屢出現(xiàn)問題,因此網(wǎng)間結(jié)算系統(tǒng)的需求也很大,我公司在交換產(chǎn)品上強大的競爭力可以很? 好的支持這項業(yè)務(wù);

l? ……

經(jīng)過對各個細(xì)分市場的全面評估,我們終于決定將產(chǎn)品定位在中高端運營支撐系統(tǒng)和網(wǎng)間結(jié)算系統(tǒng),放棄了苦苦支撐的底端市場——盡管有些留戀,但還是對未來充滿期望。

我們成立了包括銷售經(jīng)理、客戶經(jīng)理、開發(fā)工程師的聯(lián)合調(diào)查小組,幾個小組分別針對事先鎖定的目標(biāo)客戶,專門了解客戶的需求。這樣一來,客戶反倒奇怪了——原來是遇到問題后叫你們過來,現(xiàn)在倒是不請自到了。由于之前維系得良好的客戶關(guān)系和現(xiàn)場表現(xiàn)出來的積極認(rèn)真態(tài)度,用戶非常的配合——原來用戶很樂于將新業(yè)務(wù)的發(fā)展方向共享給我們,當(dāng)然也樂于有機會傾訴一些對產(chǎn)品的抱怨,我們的調(diào)查小組都進行了詳細(xì)的記錄。為期半個月的調(diào)查活動確實收獲不小,我們甚至了解到很多競爭對手的產(chǎn)品信息。

在公司內(nèi)部,我們也要求開發(fā)人員、技術(shù)支持人員將需求和建議都提交上來,我們甚至將公司熱線電話的記錄都進行了搜索以獲取有益的信息。我們從行業(yè)報告、電信業(yè)務(wù)規(guī)范等文檔中了解業(yè)務(wù)發(fā)展趨勢,邀請相關(guān)國際優(yōu)秀公司進行交流(名義上是與人家探討合作意向,實際上是刺探情報,做法有點卑鄙)。

當(dāng)無法確定某項特性是否必要時,我們就會考慮既然我們無法代表客戶,為什么不去直接問問客戶的感覺呢?所幸的是我們的問題幾乎都在用戶那里得到確認(rèn)。

總而言之,我們從各種渠道收集系統(tǒng)的需求。

根據(jù)我們已經(jīng)確定的目標(biāo)市場及其關(guān)鍵業(yè)務(wù)特性,我們進行了整個產(chǎn)品線的開發(fā)規(guī)劃;相比原來的規(guī)劃,現(xiàn)在多出了一個“平臺產(chǎn)品”,這個并不向外正式出售的產(chǎn)品卻是我們?nèi)盗挟a(chǎn)品的基礎(chǔ)。下面就是產(chǎn)品開發(fā)路標(biāo)的示意圖:

軟件平臺化開發(fā)項目實踐

一般來講,我們對于產(chǎn)品進行版本劃分是考慮基礎(chǔ)版本用于快速推出并搶占市場份額,通過不斷推出后續(xù)版本來增加產(chǎn)品特性,鞏固、增加市場。平臺產(chǎn)品的規(guī)劃也采取了這一策略。我們根據(jù)預(yù)期的市場發(fā)展確定了市場目標(biāo),考慮不同產(chǎn)品的版本劃分和特性分配、平臺產(chǎn)品對應(yīng)的配套版本,特性實現(xiàn)的優(yōu)先次序、可用的研發(fā)資源等信息,初步規(guī)劃了整個平臺產(chǎn)品系列的開發(fā)里程碑計劃。

盡管我們已經(jīng)耗費了很多時間進行產(chǎn)品規(guī)劃而沒有發(fā)布一款新的產(chǎn)品,但仍然對未來充滿信心,原因是我們努力的目標(biāo)逐漸清晰了。不過我們卻低估了后續(xù)開發(fā)的難度。

痛并快樂著

我們把研發(fā)人員分成若干小組,其中最為重要的就是總體方案設(shè)計的小組和平臺產(chǎn)品研發(fā)的小組,還有針對不同產(chǎn)品進行定制研發(fā)的小組。

總體方案設(shè)計小組負(fù)責(zé)更為詳細(xì)的產(chǎn)品規(guī)劃、產(chǎn)品特性分配、平臺產(chǎn)品的技術(shù)方案和架構(gòu)設(shè)計。最為關(guān)鍵和困難的就是確定平臺產(chǎn)品和最終產(chǎn)品的需求界限:如果定義得過于寬泛,平臺就會過于臃腫和低效,成了四不像的怪物;如果過于簡陋,最終產(chǎn)品的開發(fā)工作量增加,平臺的收益就會大打折扣。原有系統(tǒng)架構(gòu)的局限性使我們要設(shè)計出更為健壯的產(chǎn)品平臺。這些在技術(shù)和業(yè)務(wù)方面都頗有造詣的工程師就像在實驗室里使用天平一樣進行著精心的設(shè)計,他們深知其結(jié)果對這個產(chǎn)品線意味著什么。

一旦確定了技術(shù)路線和總體架構(gòu),我們就能夠制定出更為準(zhǔn)確的研發(fā)計劃。為了降低風(fēng)險,在小馬的提議下,在一個可發(fā)布版本內(nèi)部,我們進行了增量式開發(fā)——在平臺產(chǎn)品的一個“小版本”開發(fā)并驗證完成后,我們就可以進行集成,觀察“最終產(chǎn)品”的運行情況,將問題不斷反饋到下一個“小版本”的開發(fā)計劃中,而不是像以前那樣直到最后才進行確認(rèn)。

平臺產(chǎn)品研發(fā)的小組和定制研發(fā)的小組主要是根據(jù)方案小組的設(shè)計進行實現(xiàn)并驗證。在系統(tǒng)實現(xiàn)過程中,我們才發(fā)現(xiàn)平臺式開發(fā)要比想象的困難得多。由于需要考慮模塊的重用、兼容、處理效率、容錯等問題,相比原來純粹項目式開發(fā),現(xiàn)在的開發(fā)效率大為下降。經(jīng)驗的不足使得總體方案的設(shè)計出現(xiàn)變更,引起了后續(xù)的連鎖不良反應(yīng),前面幾個“小版本”的驗證結(jié)果簡直是慘不忍睹。大家有些沮喪了。

由于我們把主要資源都投入了平臺產(chǎn)品的開發(fā)中,已經(jīng)沒有什么精力估計新的市場機會了,現(xiàn)在競爭對手已經(jīng)搶到了我們的前頭。公司高層有些坐不住了:要求我們的研發(fā)資源優(yōu)先考慮市場機會,將平臺的開發(fā)工作推后。這時候,小馬忽然變得異常強硬,說服領(lǐng)導(dǎo)堅持優(yōu)先進行平臺開發(fā),暫時放棄面前誘人的市場機會。在其一番軟硬兼施下,公司高層決定讓我們放手一搏。

大家對現(xiàn)狀都很清楚,事實上我們已經(jīng)沒有退路了。利用一個晚上,我們奢侈地享受了一次視覺盛宴:項目組成員集體觀看史詩巨片《TROY》。我們現(xiàn)在的處境好比阿基硫斯率領(lǐng)的勇士們剛剛登上特洛依城外的海灘,只能為了自己的未來和榮耀而孤注一擲。

在管理方面,我們采取了更加靈活的方式:平臺開發(fā)小組實施更為嚴(yán)格的過程管理制度,主要體現(xiàn)在輸出件的配置管理、變更控制、正規(guī)檢視;而對于定制開發(fā)的小組則允許相對寬松的管理方式。這種方法可以最大限度的保證核心系統(tǒng)的質(zhì)量,加快開發(fā)速度。

吸取了以前版本混亂的教訓(xùn),從編碼階段開始,我們對于文檔和代碼進行了更加嚴(yán)格的配置管理,要求在每個小版本驗證之前必須提交各自完成的代碼,其后的變更遵循流程的控制。有一位屢教不改的資深工程師,被惱火的小馬直接“派去人力資源部報到”了。

原來我們有一個“潛規(guī)則”:升任項目經(jīng)理后就擁有了不親自編程的特權(quán)。對此,小馬認(rèn)為項目經(jīng)理會逐漸失去對項目的“嗅覺”,他要求每個項目經(jīng)理都要從事文檔設(shè)計、編碼和檢視工作,沒有例外。起初,幾個項目經(jīng)理都是頗為不屑——哪有教授還參加考試的道理,但是發(fā)現(xiàn)小馬并非光說不練的“嘴把式”的時候,再也沒有人行使“特權(quán)”了。

如果說,我們的開發(fā)進程在開始階段是跌跌撞撞的話,在歷經(jīng)了三次內(nèi)部小版本的驗證后,就已經(jīng)步入了順利的快車道:例行的小組溝通會變得不再勞神,項目進度偏差可控,沒有人懷疑會重現(xiàn)以前無法按時發(fā)布的情況,最為重要的是小版本驗證的通過樹立起了必勝的信心。

隨著項目完成過半,我們決定再多做些事情:我們提前為銷售人員介紹了產(chǎn)品的特性,將部分完成的系統(tǒng)展示給他們,使他們在用戶面前擁有更多的“炮彈”;我們要求資料撰寫人員提前介入,先期充分的產(chǎn)品規(guī)劃工作為用戶文檔撰寫帶來了極大方便;在進行內(nèi)部驗證時,我們要求技術(shù)支持人員使用這個系統(tǒng),以了解是否符合用戶的習(xí)慣;由于用戶對于系統(tǒng)運行的硬件環(huán)境有不同要求,我們搭建仿真環(huán)境以驗證系統(tǒng)的處理能力和硬件的兼容性;我們要求各個定制小組開發(fā)系統(tǒng)遷移計劃和實施方案,以應(yīng)對未來系統(tǒng)部署時可能遇到的問題。

項目在有條不紊的進行著,市場上的競爭日趨白熱。為了驗證用戶對我們產(chǎn)品的看法,銷售人員選擇了典型客戶進行產(chǎn)品試用。從試用反饋情況來看,用戶比較認(rèn)同新開發(fā)的產(chǎn)品,同時也對運行界面、部分特性提出了建議,我們都進行了記錄和分析。例如原來數(shù)據(jù)文件的采集都是采用FTP方式,現(xiàn)在有用戶提出在網(wǎng)絡(luò)質(zhì)量不高情況下,F(xiàn)TP方式可能導(dǎo)致大文件重復(fù)傳遞或者傳遞失敗,建議增加對MQ傳輸方式的支持。我們將這個需求增加到平臺產(chǎn)品中,這意味著相關(guān)產(chǎn)品都具備了這個功能。

我們的努力終于得到了回報,同時發(fā)布了全系列產(chǎn)品。由于平臺產(chǎn)品具備系統(tǒng)健壯、便于擴展、接口靈活等優(yōu)勢,使我們在不同的細(xì)分市場競爭中取得了領(lǐng)先。我們可以在合同中明確承諾產(chǎn)品交付延期的懲罰措施,而競爭對手在這方面幾乎都是遮遮掩掩——這源于我們對產(chǎn)品的信心。

尾聲

沒有什么系統(tǒng)能夠“一勞永逸”,平臺產(chǎn)品也是一樣,但是它的升級卻可以最大限度的延長產(chǎn)品的生命周期。我們現(xiàn)在正在開發(fā)下一代的運營支撐系統(tǒng)平臺,重點增強對軟交換、3G、內(nèi)容服務(wù)的業(yè)務(wù)支持。從當(dāng)初的一片空白到現(xiàn)在的駕輕就熟,確實走過了異常艱辛的歷程,所幸的是我們堅持下來并迎來了勝利。

有人想知道我們在困難的時候如何堅持下來,小馬只是淡淡的說:當(dāng)時沒想什么,只是“我等這個機會等了半年,我不是要證明我比別人了不起,而是要證明我失去的東西我一定要親手拿回來。


相關(guān)推薦