社員が会社を人質にするのを止めるには?
私は、会社の重要なビジネスユニットの1つを促進するためのソフトウェアを書くチームで働いています。私は数ヶ月前にそのチームに参加しましたが、一人の人間のせいでチーム内の離職率が高いことがわかりました。この人物(A氏と呼ぶことにしましょう)は、入社して7年になりますが、彼は非常に仕事が難しく、ソフトウェア製品を不安定にしたり、メンテナンスやトラブルシューティングを困難にしたりするために、わざと間違った判断を繰り返しています。このように、問題が発生したときには、彼だけがそれを修正することができます。
彼は数年前、会社が彼に在宅勤務を許可していないという理由で会社を退職したのですが、彼が退職してすぐに、会社はソフトウェアに問題があり、誰もそれを修正する方法を知らないという理由で、彼を再雇用しなければなりませんでした(そして、彼は100%在宅勤務を許可されています)。ソフトウェアを最新のものにして、メンテナンス性の高い安定したものにしたいのですが
参考までに、ソフトウェアはイベントを監視して、それに対して何らかの処理をして、適切な処置をしていますが、このような処置をするにはどうしたらよいでしょうか?A氏は持っています:
- 意図的に現代のソフトウェア開発フレームワークから離れて保たれ、
- テストすることができない言語で書かれたコアビジネスロジック;
- 30モジュールにソフトウェアコンポーネントを再設計し、複雑さとバージョン認証の問題を追加するために、および;
- HA(高可用性)機能がないことを確認して、非スケーラブルな方法でそれを設計しました。
更新:
Untestableコードについては、ビジネスロジックをJavaからXMLに埋め込まれたgroovyスクリプトに移行しています。Javaコードのユニットテストは捨てています。
モジュール性/複雑性については、各モジュールに独自のgit repoを与え、独自のバージョン管理をしています。これでどのバージョンが一緒に互換性があるのかはAさんだけが知っています。バージョン2.0の製品をリリースして、2.0のモジュールをすべてデプロイすることはできません。Aモジュール2.0をリリースして、Bモジュール1.0-2.0とCモジュール1.0-1.5で動作するようにしなければなりません。私にとっては、それは悪い設計です。Springフレームワークのように1つのレポの下ですべてバージョン管理されるべきです(Spring 5.0とは、Spring-Core-5.0、Spring-Context-5.0、Spring-Web-5.0、Spring-Security-5.0などを意味します)。
マネージャーは、Aさんは最初は放任されていたが、問題が出てくると修正のために呼び戻されなければならないので、これはどうしようもないと言っています。
これは私の問題だと思っています。そして、私の最初の本能は、問題を放棄するのではなく、問題を解決することですが、これを放棄することは本当に簡単なことで、私の一部はそうしたい誘惑に駆られます。A氏との会議があるときはいつでも、みんな頭を振って(何時間も)出てきます。ソフトウェアアーキテクチャでは、本番環境でホスト/デプロイできるように冗長化して開発することを意味します。エンドユーザーは、何か問題が起きたことに気づかないでしょう。これは通常の大規模なコードベースのように思えます。この製品はそこまで機能が豊富ではないので、コードベースが大きいからというわけではないと思います。データをクランチするバックエンドシステムです。他の会社は、ビジネスニーズを満たすために同様の製品を持っており、彼らは最新のHA/スケーラビリティオプションを使用してこれを行うことができます。必ずしもそうではない。彼は、特定されたバグがある場合は、prodの特定のモジュールをロールバックされているが、特定のモジュールのバージョンが互換性がないので、ロールバックは、より多くのバグを導入しています。すべてのモジュールを一緒にバージョン管理してリリースすれば、製品全体がテストされ、全体として一定の機能が保証されるので、このような事態は避けられるでしょう。私が働いてきた他の会社やプロジェクトでは、それが彼らがはるかに複雑なプロジェクトを簡単に開発して展開することができた方法です。私は新卒ではありません。私は過去10年以上、様々な企業や大規模プロジェクトで働いてきましたが、A氏が提案するものはすべて慣習や常識に反しています。30のモジュール(別々のリポジトリにある)は、彼が元々ソースツリーをどのように設定していたかを示していました。1年間チームにいた賢い開発者が互換性の問題を見て、すべてを1つのレポにまとめてマルチモジュールのmavenプロジェクトを作ろうと提案しました。その開発者はA氏の性格に嫌気がさし、トップ5に入るIT企業に就職しました。匿名性を保つために会社名は伏せますが、トップ5のIT企業とは、Microsoft、Google、Apple、Facebook、Amazonのことです。ということで、これは 開発者は馬鹿でも無能でもありませんでした 彼には8年か経験がありました。A氏はその変更を元に戻し、30個のモジュールを別々のリポジトリに配置しました。つまり、この30のモジュールは大規模なコードベースの複雑さを処理するために追加されたのではありません。彼らはprodに互換性の問題があることを保証するために配置されました。不必要な複雑さ。
“なぜこれがあなたの問題なのか?"についての詳細です。マイクロソフト、グーグル、アマゾン、フェイスブック、アップルで働いている(または働いている友人がいる)開発者に話を聞くと、一緒に仕事をするのが難しい人を見つけることが多いと聞きます。私はこの状況を、どんなに素晴らしい会社であっても、どこで働いていても何度も直面する課題だと思っています。私は、自分の分野で成長し続けるためには、どのようにして適切に対処するかを知る必要があると思います。私は、困難な同僚を避けることは不可能であると信じていますので、他の人の経験に基づいて、多分我々はすべての何かを学ぶことができます。
スパゲッティコードと不必要な複雑さを最小限に抑えることによって、製品の安定性を向上させ、経営者の要求に従って。
経営者の要求に従ってそれをHAにしてください。
現代のフレームワークと言語仕様(Java 6対Java 8)を使用するので、新しい開発者が市場で見つけるのは簡単であり、彼らはより速く生産的であることができます。