本文首發(fā)地址:https://qualityfocus.club/sit
集成血淚故事 × 3
唯一不變的是持續(xù)變化
辰星系統(tǒng)在與集成方M系統(tǒng)進行同步開發(fā),負責開發(fā)和聯(lián)調(diào)的程序員老張正盯著屏幕發(fā)呆。短短一周,這已經(jīng)是集成方第三次提出變更了,先是業(yè)務流程變更,再是接口變更,現(xiàn)在是調(diào)用方式變更,老張心里有句話想送給對方。好在還沒提測,緊鑼密鼓改起來,鍵盤敲得啪啪作響。
提測次日,對方語音彈出:“張哥,有個字段還得改一下。業(yè)務是這樣……所以我們得那樣……” 放下電話,老張找到QA王同學暫停測試。
“我都測完一半了又要改,有沒有譜?。 ?
“這集成方就是這樣兩天三改的。”
“這可不行,返工浪費這么多時間,約等于圖財害命啊,得想轍?!?
“上次跟趙經(jīng)理聊過,暫時沒什么好辦法,唉。”
參與集成的老張和王同學都痛苦著。
功能突然掛了,驚喜不驚喜?
辰星新一輪的上線忙碌過后,研發(fā)負責人趙經(jīng)理剛坐下喘口氣喝個咖啡,接到業(yè)務客戶奪命連環(huán)call:“X功能掛了,用戶投訴爆單,快找人看一下?。?!” 隔著語音都能感受到急切情緒。可這個功能這次沒動啊,難道有人重構(gòu)了?趕緊排查一下問題,順便問問誰動了代碼。
排查發(fā)現(xiàn)我們確實沒動代碼,功能確實也沒問題,但集成返回卻異常了。趙經(jīng)理跟客戶交代完,十分鐘后集成M系統(tǒng)研發(fā)負責人語音過來:“哎趙哥,這不趕上排期么,我們改了返回邏輯,麻煩你們也相應修改一下吧。對對對改動不大,你們很快就能處理好。那什么我馬上讓我們開發(fā)聯(lián)系張哥!”
放下電話,趙經(jīng)理揉了揉太陽穴,剛上完線又得熱更了,這不是人在家中坐,鍋從天上落么。趙經(jīng)理不知怎的想起那個“兒子,我們搬家了,你猜在哪兒?”的段子,無奈苦笑著。
對不起,我們真的上不了
鑒于辰星與集成M系統(tǒng)的對接經(jīng)驗,對于這次的大規(guī)模集成業(yè)務更新,大家都很緊張。趙經(jīng)理、老張在聊進度安排時格外注意,非常明確的與M系統(tǒng)溝通了各環(huán)節(jié)時間點,及準入要求(這點QA王同學情緒很不好的多次強調(diào)了)。
前期還好,雖然時間緊了一些,好在對方?jīng)]出什么幺蛾子。業(yè)務改動較大,但邏輯清晰,我們也加了不少測試,這次上線應該沒啥大問題。趙經(jīng)理舒緩了緊張情緒。
上線當日,辰星系統(tǒng)部署過半,大家都在緊張待命,空氣中彌漫著一股“山雨欲來風滿樓”的氣息。刺耳的鈴聲響起,趙經(jīng)理看著手機上的名字愣了兩秒,按了接通,對面的聲音像是電影里的畫外音:“趙哥,我們沒測完,今天先不上了。實在對不起啊,我們真的上不了?!?趙經(jīng)理望向老張,宿命般的對視。
“對方不上了,咱們怎么處理?”
“什么?這個時候說不上就不上啊,早干嘛去了?!?
“我跟業(yè)務方溝通過了,實在上不了也沒辦法,現(xiàn)在多說無益,趕緊想想怎么辦吧?!?
“由于前期已經(jīng)約定好了時間線,上線是板上釘釘?shù)氖聝?,我們沒有設計功能開關?!?
“部署能回滾嗎?”
“有些數(shù)據(jù)結(jié)構(gòu)已經(jīng)變了,回滾不合適。要不...咱一點一點revert代碼吧!”
“不是個事,我再溝通一番,看看對方最早什么時候能上?!?/p>
十分鐘后,
“revert代碼吧,我真是……”
“啥也別說了,我喊兄弟們加班。”
多年后趙經(jīng)理和老張在另外的場合相遇,回憶起那次上線驚魂夜,看似波瀾不驚的笑談著當時焦灼緊張的場域、多方多番的談判、結(jié)沒結(jié)下的梁子、徹夜不眠的團隊……二人仍是心有余悸。若是有機會再來,其實可以預先做些什么,讓團隊更輕松從容的應對。
大規(guī)模集成面臨的挑戰(zhàn)
集成中不受約束的無節(jié)制變更
由于集成涉及業(yè)務、干系人、研發(fā)進度等多方面的復雜因素,確實存在需要變更的情況,適量變更也是被允許的。但是,無節(jié)制的隨意變更理應受到約束,畢竟集成需要多方的協(xié)作,由于一方的變更造成的返工成本是多倍的,因此當討論到集成變更時,允許變更的業(yè)務范圍、在多大程度上可變、允許變更的時間線、變更帶來的額外成本等都需要認真討論并達成共識。
上線后的變更缺乏同步機制
由于在集成研發(fā)過程中需要多方聯(lián)調(diào)測試,因此研發(fā)過程中的變更會及時同步給干系方。但在上線過后的運維階段,某一方涉及到集成相關的業(yè)務變更或代碼重構(gòu)時,往往就會忘記同步干系方。當功能被悄悄上線后,干系方就會發(fā)現(xiàn)原本好端端的功能突然就不能用了,緊急排查后發(fā)現(xiàn)是集成方變更,那心情也是相當?shù)膹碗s。這種情況在集成量大的偏前端業(yè)務系統(tǒng)尤甚,不管業(yè)務鏈路中的哪個環(huán)節(jié)出了問題,最先暴露出來的問題一定是來自用戶,前端業(yè)務系統(tǒng)苦不堪言。
集成風險認知不足
抽象一下所謂集成過程,就是多方建立并各自履行契約的過程。涉及到履約,就可能存在主動毀約的情況,或由于不可抗力導致被動毀約的發(fā)生。當缺乏此類風險的干預措施時,哪怕不是己方的過失,團隊也會面臨相對被動的窘境。因此進行多方集成時,一定要充分認知集成風險,針對可能發(fā)生的風險提前設計響應機制,哪怕這種風險發(fā)生的概率偏低,也需要預先考慮和設計風險干預方式。可針對集成的不同風險,設計分級分類的響應機制,確保團隊始終保有主動性。
啟示及應對思路
明確并共識的集成協(xié)作流程
需要清晰明確的集成協(xié)作流程,與集成多方達成一致共識,并在整個協(xié)作過程中嚴格遵循。協(xié)作流程應包括但不限于以下內(nèi)容:
- 集成關鍵環(huán)節(jié)和各環(huán)節(jié)關鍵活動、負責人
- 集成時間線:需求確定、接口定版、研發(fā)聯(lián)調(diào)、集成測試、代碼封包、上線
- 需求評審和變革評審過程
- 各集成方對接負責人
- 集成問題溝通協(xié)作機制
- 集成準入與準出條件
- 線上監(jiān)控機制
- 線上問題跟蹤及響應機制
- ……

集成需求評審與變更評審
高質(zhì)量的需求是多方集成過程中必不可少的輸入,需要確定需要的范圍、內(nèi)容、變更規(guī)則和評審流程。

非常重要的提示(寧愿你永遠不懂系列):所有確定的需求內(nèi)容,包括但不限于業(yè)務流程、接口協(xié)議、非功能需求描述、異常響應描述等內(nèi)容,需通過郵件同步給集成方PO、TL、QA等相關人員。所有會議均需記錄,并發(fā)送會議紀要至所有參會者,如有異議需在當天回復郵件并解決。
清晰的準入準出條件
需清晰定義集成相關的準入準出條件,并與多方達成共識,嚴格遵守門禁標準。預先清晰定義,遠好于事后問責。不同上下文內(nèi),準入準出標準可能不一致,這是允許的,只需要多方達成共識即可。如下圖的示例,里面的一些條件是適合大部分上下文的,此外還有針對特定上下文的驗收條件,大家可以按需酌情約定。

集成風險分析
可能影響或引發(fā)集成風險的因素有很多,可組織集成相關成員進行充分的風險研討和分析,制定合理的應對方案:
- 集成點的數(shù)量:試圖一次集成所有系統(tǒng)、所有業(yè)務的項目,由于極端復雜性和大量相互依賴性,容易產(chǎn)生不利結(jié)果。少量、輕量的集成,更有利于降低復雜度和問題排查。
- 不斷變化的需求:當用戶場景考慮不全時,需求可能會頻繁變化,給集成過程造成混亂。在集成開始前應有時間保證收集到相對完備的需求集。
- 集成基礎設施不足:使用錯誤的基礎架構(gòu)來支持集成項目可能會導致嚴重的問題和過高的成本。避免依賴手動編程或過于復雜、繁重的中間件軟件集的解決方案。
- 過于倉促的時間安排:集成要趁早,問題趕前不趕后,集成時間線確實可以相對激進,但應避免過于倉促??舍槍蛇M行相對準確并留有余地的估算方案。
- 人員流動:項目管理、業(yè)務分析師、開發(fā)人員和利益相關者的變化可能會使項目的完成變得復雜。尤其在集成時間線較長時,核心角色的變更會造成關鍵上下文的損失,需確保人員穩(wěn)定性,或做好充足的知識管理工作,以減少單點依賴。
- 變更管理程序:一些組織缺乏處理變更需求的流程和方法。從需求、實施和測試的角度來看,不加約束的變更過程會引發(fā)混亂的結(jié)果。
- 新的業(yè)務流程:新業(yè)務集成時往往面臨更大的風險,應確保新業(yè)務經(jīng)過相關干系人、業(yè)務方、各集成方的評估和充分討論。
- 新的集成基礎設施:新的或未經(jīng)證實的集成基礎設施是一個風險因素。
- 測試計劃不足:測試計劃應盡早并經(jīng)常引入測試。測試腳本和自動化測試可能有助于在集成早期更快地發(fā)現(xiàn)和定位問題。
- 針對集成失敗的預案:我們對于集成的結(jié)果往往過于樂觀,有可能的話應給合適體量的集成功能都加上開關,以便于集成失敗時快速切換業(yè)務功能版本。
我們把這些風險按照影響范圍和可能性,放到風險狀態(tài)矩陣中,可針對不同等級的風險制定不同程度的干預或響應機制。

寫在最后
大規(guī)模集成面臨的挑戰(zhàn)都是復雜問題,解決這類復雜問題,應結(jié)合如業(yè)務訴求、技術方案、研發(fā)流程、管理流程等多方面因素綜合考量,從而提出相對理想的方案,確保集成業(yè)務價值的最終實現(xiàn)。