我在一個團隊中工作,該團隊編寫軟件來促進公司的主要業務部門之一。我幾個月前加入團隊,發現我的團隊由於一個人而離職率很高。這個人(叫他A先生)已經在公司工作了7年,他很難與他合作,並且他一再做出錯誤的決定,故意使軟件產品不穩定,難以維護和排除故障。這樣,當出現問題時,只有他可以解決。
幾年前他離開公司是因為公司不允許他在家工作,但是他一離開,公司就不得不僱用他(並允許他工作100 %在家中),因為該軟件存在問題,沒人知道如何解決。
我的經理知道這一點,但是他說他對A先生無能為力。
我該如何解決這種情況?我想使該軟件具有現代性,可維護性和穩定性。
FYI,該軟件監視事件,對事件進行一些處理,然後採取適當的措施。 A先生:
- 故意遠離現代軟件開發框架;
- 用無法測試的語言編寫核心業務邏輯;
- 將軟件組件重新設計為30個模塊,以增加複雜性和版本認證問題;並且
- 以不可擴展的方式對其進行設計,以確保沒有HA(高可用性)功能。
更新:
關於不可測試的代碼,業務邏輯正從Java移到嵌入XML的常規腳本中。 Java代碼的單元測試已被丟棄。
關於模塊性/複雜性,每個模塊都有自己的git repo並具有自己的版本控制。現在只有A先生知道哪些版本可以兼容。您不能發布該產品的2.0版本並部署所有2.0模塊。您必鬚髮布模塊A 2.0,它將與模塊B 1.0-2.0和模塊C 1.0-1.5一起使用。對我來說,這是一個糟糕的設計,應該全部像Spring框架一樣在一個倉庫中進行版本控制(Spring 5.0表示Spring-Core-5.0,Spring-Context-5.0,Spring-Web-5.0,Spring-Security-5.0等)。 / p>
經理說他對此無能為力,因為起初A先生被放開了,但隨後出現問題時,他不得不被叫來解決。因此,沒有他就無法維護產品。
我認為這是我的問題,因為我不想放棄經理,因為他對我很好。我的第一個直覺是解決問題,而不是放棄一個問題,儘管我可以看到放棄這個問題真的很容易,而我中的一部分人卻願意這樣做。
其他人因為這個原因而離開了團隊。他,因為午餐時他是每個人都抱怨的。每當與A先生開會時,人們都會搖頭(幾個小時)。
第二次更新:
HA是高可用性的縮寫。在軟件體系結構中,這意味著以一種可以在生產環境中以冗餘方式託管/部署它的方式來開發軟件,這樣,如果一個實例發生故障,其他實例可以承擔負載,從而使停機時間為零。最終用戶甚至都不知道出了什麼問題。
關於:這似乎是正常的大型代碼庫。我不認為這是因為代碼量很大,因為該產品的功能並不豐富。這是處理數據的後端系統。其他公司也有類似的產品來滿足他們的業務需求,他們能夠使用現代的HA / Scalable選項來做到這一點,所以我不明白為什麼這個團隊需要在沒有HA / Scalability的Java 6中做到這一點。
第三次更新:
關於“所有模塊的最新版本是否一起工作?”:不一定。如果發現了錯誤,他一直在回退生產中的某些模塊,但是由於某些模塊版本不兼容,因此回滾引入了更多錯誤。如果所有模塊一起進行版本控制和發布,則可以避免所有這些情況,因為這樣可以對整個產品進行測試,並且總體上可以保證某些功能。在我工作過的其他公司/項目中,這就是他們能夠輕鬆地開發和部署更複雜的項目的原因。
@pipe:我並不陌生。在過去的10多年中,我已經在多家公司和大型項目中工作,我所看到的A先生的提議都違背了慣例和常識。這30個模塊(在單獨的存儲庫中)是他最初設置源代碼樹的方式。一個在團隊中工作了一年的聰明的開發人員,看到了兼容性問題,並推動將所有內容組合到一個倉庫中,從而創建了一個多模塊maven項目。那個開發人員已經厭倦了A先生的天性,因此他在5大IT公司之一中找到了工作。我不會命名該公司以保持匿名,但在排名前5的IT公司中,我指的是Microsoft,Google,Apple,Facebook和Amazon。因此,這個開發人員並不傻,也不稱職。他有8年的經驗。 A先生將更改恢復為原來的方式,在單獨的存儲庫中有30個模塊。因此,未添加這30個模塊來處理大型代碼庫的複雜性。放置它們以確保產品中存在兼容性問題。不必要的複雜性。
有關“為什麼這是您的問題?”的更多信息:當我與在Microsoft,Google,Amazon,Facebook,Apple工作(或有工作在其上的朋友)的開發人員交談時;有人告訴我,通常您會遇到難以合作的人。我認為這種情況是一個挑戰,無論公司多麼出色,無論在哪里工作,我都會反复面對。因此,我需要知道如何正確處理此問題,才能繼續在自己的領域中發展。
目標(用於使該問題保持在主題上):
我要問這個問題,以了解處理上述情況以實現概述的目標的最佳方法是什麼下面。我相信困難的同事是無法避免的,因此根據他人的經驗,也許我們都可以學到一些東西。
-
根據管理層的要求,通過最小化意大利麵條代碼和不必要的複雜性來提高產品的穩定性。
-
根據管理層的要求將其設為HA
-
。使用現代框架和語言規範(Java 6 vs Java 8),因此新開發者可以輕鬆在市場上找到並且可以更快地投入生產。
-
消除對單人的依賴。