突如其來的事故讓人猝不及防,一天早上合夥人突然電話我,萌萌,線上出事故了,我們把客戶的結算標記改成我們自己的了!我聽完也異常震驚,立即電話後端、桌面端、前端的負責同學,讓他們立即查證;我也即刻趕往公司,路上大致梳理了一下思路,這個事故大致持續的時間、波及的用戶、對客戶可能造成的損失;在到公司之前前端和後端同學給我了反饋,前端一段測試代碼凌晨發到線上了,反饋之前已經回滾處理了。我一趕到公司,負責業務的合夥人就面色沉重的對我說,萌萌,這個問題嚴重了,對我們口碑造成了惡劣影響,現在線上已經各種負面消息了(原話記不清了,大意應該比這個更嚴重)。
我們立即召開了合夥人會議,同步相關信息。現狀比我預想的要嚴重,嚴重的問題在於由於上個Q我們意外的成功以及對於原有生態略帶侵略性的攪局,讓我們的競爭對手對我們充滿敵意,日常除了技術性的攻擊還有不曾停歇的惡意宣傳,讓我們對於自己的品牌和聲譽小心翼翼,如履薄冰,而這次事故,正好授人以柄。線上對於我們的工具產品偷用戶訂單,篡改用戶信息、收益的宣傳在圈內已經鋪天蓋地,我能體會業務合夥人當時的壓力和心境。會議討論了應急響應方案:
1、產品關鍵位置公告道歉,並提出賠償方案;
2、整理事故期內所有用戶的損失;
3、安排賠償事宜;
會議上爭論的主要是兩點,該如何應對這次危機;因為事故由技術引發,如何處理,今後如何避免。由於外界由此引發的惡意攻擊很多,對於現階段的影響非常,我們把它定性為影響到公司生死的重大事故,如果要按事故層級來定義的話,我想當時我們是把它定為P0了,雖然後續我們也經歷了不少事故,但這次事故對於公司發展階段的意義深遠,這也可以說我們第一次真正面對生存危機。對於如何應對,我們有不同的意見,對於公開道歉、賠償方案大家並無異議,我的意見是這次事故即是危機也是我們成長的機會,是我們危機處理的考驗,我希望除了道歉,賠償,在各個渠道儘可能的和我們的客戶溝通,降低用戶流失的風險,也希望我們向大家反饋在我們的產品上線以來我們為了保障質量所做的各種努力,包括我們不斷在遭受惡意的系統攻擊,我們為大家提供的安全防護,在這點上我們的業務負責人認為事故就是事故,我們要做的是我們的處理和誠意的道歉,如何能爭取到用戶的認可,多說其他可能適得其反,大家看問題的視角不同,但最後大家達成一致,我們只道歉、賠償。
我知道這樣給整個技術團隊帶來的壓力巨大,特別是事故導火索的前端同學,而這一切都是我要承擔和應對的。討論的第二個焦點其實就是我這邊了,因為我剛剛接手技術團隊,大家都看著我要怎樣處理,未來怎樣避免如此的危機。我說了我的意見,這次事故其實是整個開發流程不規範,我們前期業務不斷迭代試錯帶來的坑,這樣的事故不是一個工程師能承擔的,這次事故我承擔事故責任,自罰一個月的薪資;技術層面梳理前端開發流程,後端全面檢查涉及用戶核心標記,重構相關模塊,明確我們的核心功能的測試開發模式。
會議結束後,我們召開了全員會,向大家同步了這次事故、影響以及我們合夥人團隊的處理結果,我們儘量淡化了涉事同學的問題,以免將壓力傳導到一線的工程師層面。接下來我的事很多,當我重新梳理了前端的開發流程後,發現了不少問題:沒有統一的測試環境,之前前端都是各測各的,而且基本是本地;上線比較隨意,極少Double Check;為了快速完成功能,前端寫了不少本地變量,這在探索性的業務階段不能說不行,但是後果就是隱患太大,這次事故就是這個觸發的;核心模塊沒有從後端獲取,自己直接就寫了。梳理下來,和前後端、桌面端的同學一起開了個會:
1、彙總因為這次事故波及到的用戶信息;
2、彙總事故期間我們新增的訂單數據,所有新增訂單全部作為補償訂單的基礎提供給業務方制定補償方案;
3、搜索前端及桌面端所有涉及用戶標記的模塊,全部遷移到後端;
4、後端全面檢查用戶標記相關代碼,抽象成獨立模塊;
5、前端、桌面端開發流程和後端統一持續集成發佈;
因為這件事,我在團隊內全面推動阿里云云效的應用,儘管當時雲效主要面向Java等強類型語言的持續集成,不過在我們和雲效團隊的配合下,把我們的系統整體上遷移到雲效了。當時我們的同學也有不少牴觸的,但是我還是強行推進了。我們也發現了一些問題,當時雲效整體部署的情況還沒有現在這麼完善,我記得打包後的代碼要上傳到北京的部署中心,然後再從北京節點下載到杭州的部署節點,這點讓我們非常尷尬,而且當時兩個節點之間的上傳下載速度還不理想,我沒有去了解細節了,導致我們的發佈時間要比原來的簡單部署慢了近10分鐘,後來和雲效的同學現場溝通曲折解決了(我印象中是中間上傳下載的過程我們短路處理了,不過包還是要上傳到北京的中心節點)。
這次危機對我們合夥人對我都是一次考驗,雖然有很多細節還值得探討,但是我們依然艱難的度過了,對外我們向我們的用戶、客戶表明了我們的誠意以及改進,而內部我收穫了團隊的團結,我也收穫了一個不錯的前端負責人,這是後話。
Q3對我們來說,幾乎就是忙於應對:微信封殺,友商攻擊,事故應對;最終這個Q的目標我們沒能完成,甚至我們都沒有在團隊內宣佈結果,低調處理了。而這一切,視乎還並沒有結束,更大的危機還在等待著我們……(未完待續)