上周一和一同事兩人一起出差重慶,主要目的是在合作方現場對我們算法進行實際部署和測試,根據測試的效果商談下一步合作事宜。對方屬于業務單位,對于項目相關的技術要求比較務實,也就是“要看療效”。周二上午和對方進行了1個多小時的業務相關技術方法交流,討論的相當激烈,在討論中也對他們的需求了解的更為深入。從下午開始便進入本次出差的主要流程:環境部署和算法效果測試。一切才剛剛開始!
這次合作的算法由我的這位同事主要負責,對他屬于第一次進行這種高要求的實際項目實施,因此欠缺足夠的經驗,盡管在家里已經對現場的復雜性有了預判,同時在家里也進行了多次測試。現場還是出現了種種的障礙和問題:
1)無網絡下的系統環境安裝:在家里都是在網絡正常的裝款下進行的系統環境配置,可現場因為保密的原因,所有軟件/程序都只能通過光盤的形式導入,這就導致原本幾行命令就可以解決的環境配置流程復雜。雖然我們來前考慮到了無網絡環境,預先已經將可能要用到的環境軟件下載,可還是疏漏了兩個軟件。這就導致在現場通過手機熱點下載軟件,而其中一個軟件的安裝涉及到多個層層嵌套的文件。這導致我們原計劃2個小時完成的部署直到晚上10點才完成。
2)數據庫連接不支持算法語言:來前在電話中和合作方的技術人員進行了交流,盡管在電話中問到了數據庫采用的具體類型,對方提到了用的是MPP數據庫,同時說了一句這個比較簡單,過來修改幾行代碼即可。來前對該數據進行的查詢,資料很少,屬于小眾的數據庫。于是就先采用主流數據庫進行了算法測試,計劃來了直接用他們提供的樣例修改連接方式即可。可周三上午開始對接數據庫才發現對方連接數據庫的語言是java,而我們用的是python,因為語言的不同,導致他們連接的程序樣例我們沒辦法進行參考。于是對Python連接該數據庫的方法進行現場搜索學習。盡管周折,還是找到了方法,下載了對應的軟件,并進行測試。然而卻總是連不同,提示的錯誤信息在網上搜索也一無所獲。實在沒有辦法就請教合作方和數據庫的提供商進行協商,幾近周折聯系到數據庫提供商的專家,得到的回復令我們大失所望“這個數據庫暫時不知道python語言連接,并且下一個版本也不支持”。這就意味著我們一上午的嘗試都會白忙活。經過大家的再次溝通,在不支持語言的情況下,臨時采用其他數據庫替代,以驗證我們算法效果為主。于是,我們又開始從現在的數據庫導出數據,導入到臨時數據庫中,重新構建數據庫表字段,數據讀取代碼。終于在晚飯后完成了整個數據庫工作。
3)算法輸出和對方預期有差距:在現場和對方進行需求交流時,對于輸出他們提出了新的要求,而為了能盡快讓他們看到效果,我們周三晚上加班進行效果優化。因為基本功不扎實,這位同事在現場修改很不順利。即使是自己寫的代碼,依然沒有思路。在兩人的配合下,輸出效果基本滿足了合作方的要求。
4)算法的現場性能遠低于期望:在輸出效果完善后,發現算法的運行速度太慢,原計劃1-3s輸出結果,然后我們現場測試至少要30s,有些測試更慢。這樣的效果明顯不能用。原因除了現場測試機器速度和測試數據量超過了在家里測試規模以外,更重要的是算法本身的優化。于是周三晚上到周四早晨,兩個人在機房一點一點的扣細節,一步一步的排查,最終發現的算法設計中可以優化的若干個點,在周四上午7點左右可以實現大多數測試時間<3s。
5)優化后的算法輸出依然沒有達到預期:周四上午合作方如約看到了測試結果。原本以為我們通宵的優化能夠獲得對方的認可,而在他們看了我們的結果后,從專業需求角度立刻否定了現在的結果,提出了更為苛刻,但是和需求緊密結合的要求。他們提的要求有道理,而這樣的需求實現顯然需要算法的進一步優化。
我因周五還有其他事情處理,我先返京,同事留在現場繼續優化。
在回來的路上我一直在反思這次失敗的對接原因到底出在了哪里:
首先從我個人角度,作為管理者,在整個項目的前期需求了解以及工作部署中存在著諸多不足。
1)對項目的真實需求了解不夠仔細和深入。合作方作為業務單位,對需求最為迫切和了解。然而作為一線業務人員,對于需求的表達和從技術實現角度的理解存在著誤差。實際上這次也是,從電話里他們講的需求和具體現場溝通后了解的需求以及他們看到我們實現的效果提出的需求存在的很大的不同。這就導致我們的工作不斷的迭代更新和更多的工作量。
2)對于現場環境復雜性預判不夠準確,造成現場話費大量原本可以在家里進行的環境搭建工作,造成時間和精力的不必要浪費,同時影響整體進度,影響合作方對我們專業水平的判斷。
3)對關鍵連接點的溝通存在盲區,比如對方采用的數據庫類型,支持什么樣的語言欠缺詳細的了解,導致在家里測試的環境和現場不同,現場數據庫類型不支持我們采用的語言,導致現場的低效推進。
4)現場情緒管理失控:看著同事一直頂著壓力進行各種測試,我心里既著急又幫不上忙,終于在連續兩天的進展不順利下,擼起袖子和他一起改,在過程中對于同事的各種不專業技術表達了不滿,事后也有些后悔,畢竟這是他第一次參與這種現場調試工作,而我原本可以在家里提出更高的要求讓他測試。
總之,這是一次失敗的現場部署經歷。事后的總結對于失敗的現場于事無補,只希望以后不出現類似的情況。