背景:私はソフトウェアを設計するための確立されたベストプラクティスのセットを持っていない小さな会社で働いています。私は、ストリームからデータを収集し、いくつかの処理と集計を行い、それをデータベースに書き込むプロジェクトに取り組むために雇われました。最終的には、基本的に数千行のスパゲッティコードである古いシステムを置き換えるのに役立つはずです。私たちは同僚と協力して、拡張可能、テスト可能、安定したシステムの優れたベースと考えるものを設計および構築しました。
問題:最後の機能の開発には約15日間の作業が必要でしたが、機能が期限に間に合うようにするという点で、状況はかなり暗いように見えました顧客にデモされます。より上級の人が「救助に来て」、古いシステムで使用されているのと同じコーディングスタイルと全体的なアプローチを使用して、3日間で同じ機能を構築します。結果はオリジナルと同じくらい巨大ですが、これは経営陣には見えません。経営陣は、なぜ私たちがこの男ほど生産的でないのかを確かに尋ねます。私たちのソリューションは実際にはまだ期限を満たしていますが、その間、UIはこの新しいソリューションのデータを表示するように配線されていました。
cowboy coder になり、テストなし、予期しない状況に対する保護手段なし、実際の構造なしでコードを書くのは非常に簡単です。新しいコードは、満足のいくシナリオをたどり、データベースに正しい結果を取得するために必要な最小限の作業を実行します(しかし、どうすればわかりますか?)。
この慣行は非常に有害であり、優れたソフトウェアエンジニアリングはすぐに配当を開始することを経営陣にどのように説得できますか?私のケースをサポートするために言及できる良い例はありますか?
カウボーイコーダーになるのは簡単ではありません。あなただけがコードベースを理解しています。あなたでさえ、あなたのコードがどれほど変更に対して抵抗力があるかに悩まされます。そして、あなたの仲間のプログラマーは、何も意味がないことを経営陣に絶えず泣き言を言っています。
問題は、経営陣がコードの品質を理解していないことです。彼らは決してしません。彼らは決してそうしません。なぜ彼らは?それは彼らの仕事ではありません。
私の車が始動せず、メカニックに連れて行って、1週間で準備ができると言われたら、1週間でそれを期待します。ドイツから輸入されたスターターモーターが一番いいので、一か月も待たなくてはならないと言われたくない。
私の車を1か月間拘束することを考えている場合は、初日にそれを教えてください。 1週間を約束したら、1週間でできる方法があるはずです。私が一週間でそれをすることを要求するなら、あなたは今はノーと言う方がいいです。 1週間で完了することが保証されている別のショップと競合している場合は、1週間で完了することを提案する方法を理解したほうがよいでしょう。
あなたが説明するのは、彼らが一週間でそれをやりたいと思った場合に彼らが得るものと、彼らがあなたに一ヶ月を与えた場合に彼らが得るものです。あなたはこれを決めることができません。あなたは両方の方法で働くことを学ぶ必要があります。
今日私にくだらないスターターをください、そして私がそれだけ品質を気にかけているなら、私はあなたの素晴らしいものを手に入れるために月に戻ってきます。
それは本当にあなたが管理でできるすべてです。私が言ったように、誰が本当に理解することは決してないでしょう。
あなたがすべきことは、そのカウボーイコーダーからあなたができるすべてを学びに行くことです。あなたの本のように振る舞うのはあの男より賢いです。彼が現在実際にどのような問題を抱えているかを彼に尋ねてください。彼があなたが彼のデザインで目にする問題をどのようにして回避しているのか、そしてあなたが加えたい変更について彼がどう考えているのかを尋ねます。あなたがより良い方法を見たとしても、それで彼を恥じないでください。彼に見せてください。この状況でそれが本当に良い考えであると彼に決めさせてください。彼をパートナーにする。競争ではありません。
これを行わないと、お互いのスタイルを元に戻し続けるので、彼をレースし、彼と戦うために多くの時間とエネルギーを浪費することになります。あなたの最善の解決策は、何かの管理を説得する前に彼をあなたの側に置くことです。
コードの品質を正しく実行すれば、管理者はそれに気付くことはありません。
ここで悪魔の擁護者を演じます。 candied_orangeからの回答が気に入りました。彼は「カウボーイコーダー」から何かを学ぶかもしれないと指摘しています。
主張されている「カウボーイコーダー」が本当に「スパゲッティコード」で動作している場合、そのコーダーはクリーンなコードで動作する非カウボーイコーダーよりも生産性が高くなる可能性は低いと私は主張します。そして、私が「クリーンコード」と言うとき、私はそれを伝統的な意味で(可能な限り単純に)意味し、「SOLID」のような定型的およびカーゴカルト技術でいっぱいではありません。
長期的なプロジェクトで「カウボーイコーダー」を打ち負かすことができると思いますか?そうでない場合は、以前のコードに戻って調査し、カウボーイコーダーに相談する必要があります。これは、新しいコードは失敗であり、古いコードは思ったほど悪くない場合があるためです。新しいコードが優れていると、生産性が向上します。優れたコードは常に単純で小さいためです。それが単純で小さくない場合は、ソフトウェア開発の全体像を再考することをお勧めします。