技術的な負債がある古い大規模なプロジェクトで、リファクタリングコードの利点を確実に推定または測定するにはどうすればよいですか?
たとえば、ソフトウェアスタックソリューション内に古い言語で書かれたコンポーネントと、新しい言語で書かれたそれ以降のコンポーネントがあるとします。新機能とバグ修正は、開発チームによってこのソリューションに常に追加されています。
開発者は、既存の古い言語コンポーネントを新しいバージョンに置き換えることは「良いこと」だと提案していますが、この作業によって追加の機能が追加されることはなく、開発にx日かかります。
営業担当者は「素晴らしい新機能」を追加することを提案しています。会社は彼の提案の価値を公式を使って測定します。すなわち。 x dev-daysの作業のコストで、t年以上にわたって会社F百万ポンドを稼ぐ
会社はリファクタリングの提案に意味のある方法でどのようにコストをかけることができますか?そして、どのような状況下でそれが会社にとって最も収益性の高いオプションになる可能性がありますか?
X dev-daysの作業のコストで、t年以上にわたって会社F百万ポンドを稼ぐ
これは、メンテナンスコスト、サポートコスト、販売/マーケティングのコストを無視し、機能が市場でどのように採用されるかについて多くの仮定を行います。
しかし、何でも。あなたの質問はあなたが探しているものについて十分に明確です:
リファクタリングのビジネスケースを作成するにはどうすればよいですか?
理解すべき主なことは、時間はお金に等しいということです。 「5人の開発者2週間= 80時間* 5人の開発者* 50ドル/時間-> 20,000ドル」に直接進むことができ、それはビジネスマンにとって理にかなっています。スマートビジネスの人々は、これらの5人の開発者がどちらかの方法で支払いを受けていることに気付くでしょう。これにより、20,000ドルを費やしたり節約したりするのではなく、最も有益な方法で20,000ドルを使用しています。とにかく、リストで。
全体として、「これは私たちの仕事をよりよくするのに役立ちます。私たちの仕事が上手くいけば、より多くのお金を稼ぐ/節約することができます。」.
あなたが自問すべき質問は、営業担当者がどのようにknowこの機能に費用がかかるかx開発者の仕事日です。長年の専門的な経験を持つ優れたプロジェクトマネージャーでさえ、それがよく分からないことを考えると、営業担当者からのそのようなデータは非常に思われます... 推測。
私の経験によれば、営業担当者は通常見積もりを出しませんが、管理者にとってどれだけ多すぎるかを推測しますまたは顧客:管理者が50人週の作業を支払う準備ができているが、完全に拒否する場合75人週の場合、機能の準備が整うまでに70人週かかることを伝えましょう再交渉(実際の見積もりでは問題のあるもの)から55人週まで。
一方では、あなたはestimatesをIT専門家が次のように言って実行します。
この特定の監査によると、新しいテクノロジーを使用する同様の規模の同様のプロジェクトと比較して、古いテクノロジーを使用すると1日あたり8,000ドルを無駄にしています。また、コードベース全体を移行するには、50〜80人週かかると思われます。この間、リリースされる新機能はありません。また、特定のコンポーネントを移行すると、20〜30人/週の追加作業が発生するリスクが10%あります。
一方、あなたは説得する必要がある人と交渉するときの彼らの力に基づいて、セールスマンによって行われたguessesを持っています。
それはあなたがあなたの会社でどれだけ影響力があるかについてのすべてです。ここではコミュニケーションが重要です。これは、管理者(または顧客)に対する機能の利点を説明するときに、セールスマンが通常ITプロフェッショナルに勝つ場所です。
過去に見積もりが非常に正確であった場合、評判と影響力を得ることに注意してください。見積もりが常に間違っている場合、経営陣はおそらくあなたの提案を無視するでしょう。
見積りに関しては、考慮すべきパラメータが非常に多いため、ここで価値のあるものを作成することは非常に困難です。特に:
あなたのチームはC#でVB6と比較してどれほど巧みか知っていますか?実際の測定に基づいていますか、それとも単なる推測に基づいていますか?
このチームはC#で大規模なプロジェクトを開発しましたか?使用するツール(IDE、デバッガー、プロファイラーなど)を知っていますか?追加のライセンスが必要ですか(Microsoftの世界では、マシンあたり数千ドルを意味します)?
現在のプロジェクトは完全に明確であり、移行時に予期せぬ事態が発生しないことを保証できますか? すべて、すべての機能を書き換えるのは簡単ですか、それとも驚きがありますか?
C#をサポートするインフラストラクチャはありますか?継続的な統合についてはどうですか?ビルドサーバーについてはどうですか?スタイルガイド?静的チェッカー?
運用環境で、サーバー(これがWebアプリの場合)または顧客のPC(これがデスクトップアプリの場合)は、使用する予定の.NET Frameworkのバージョンを実行できますか?
しかし、最も重要なことは知ることですwhyすべてを書き直したいですか? What書き換えによって解決しようとしている問題は何ですか?生産性の喪失?どのように測定しますか?この生産性の損失を経営陣にどのように示していますか?
VB6が原因で1日あたり$ 8 000(つまり、C#に移行すると1日あたり$ 8 000を節約できる)を浪費していることを示したら、すべての新機能の開発を保持することの利点をどのように説明しますか。完全な書き直しに焦点を当てていますか? プログレッシブリライトと比較した場合の利点は何ですか。
まず、販売主導の機能リクエストと同様に、リファクタリングの開発コストを見積もる必要があります。
これが大きな仕事である場合、正確を得るのは難しいかもしれませんが、2つのテクノロジーの十分な経験者を持っていると仮定すると、それは実行可能であるはずです。
次に、リファクタリングしない場合のコストの見積もりが必要です。あなたが私のために見積もりをしているなら、私はある程度のメトリックを期待するでしょう。たとえば、VBコードの平均開発コストと4分の1以上のC#コードの差などです。これを追跡する精度に明らかに依存します。
これらの2つの数値を使用して、リファクタリングによって得られる見返りの期間を見積もることができます。つまり、リファクタリングが正味コストから正味利益に変わるポイントはどれですか。
私は、与えられた結果がどれほど説得力があるかについてしか推測できません。ただし、1年未満の場合は、おそらく非常に強力で、2年をはるかに超える場合は、苦労する可能性があります。
さらに、ケースを構築するのに役立つ他の側面を追加することはおそらく価値があります。私が過去に使用したものの1つは、出口インタビューでこのテクノロジーがドライバーとして引用されているかどうかを確認することです。もしそうなら、あなたはリファクタリングがスタッフを維持することを主張することができます(雇用と訓練は高価です)。
明らかに、証拠を裏付けることなくこれらのことを議論することができますが、私はそれが事件の影響に大きな違いをもたらすことができることを私は見つけます。
他の回答が見落としている点は、リファクタリングを行わないことで失われた収益に対してリファクタリングのコストを測定する必要があるということです。
コードを変更するためのリファクタリングは時間の無駄です。テーブルに価値をもたらす必要があります。このコンテキストでは、問題のクラスのリファクタリングに1時間を費やすことを意味するのではなく、例で使用した別のCLR言語に変更するなどの主要なリファクタリングを行います。
私たちがやっていることを続けていると、何かを逃しているのでしょうか?価値を実現するのを妨げている、粗末な古いデザインがありますか?たとえば、機能を追加したい場合は非常に難しいので、新しい設計に対して、実装に100時間、リファクタリングに50時間、実装に25時間か。
既存のコードは技術的な負債を負っていますかそれは私たちにお金がかかりますか?このくだらない古いコードはバグの原因ですか?そのため、問題を解決するために無料で作業することになりますか?有利な請求可能な時間を無料で提供することを好む人はいません。
リファクタリングのコストは、リファクタリングしない場合のコスト以下ですか?
ほとんどの問題を引き起こしているコードを小さなチームのロックスターにリファクタリングさせることによって、コストを償却することは可能ですか?リファクタリングをリリース間で広げることはできますか?あらゆるところに小さな非効率性があります。この余分な作業について話すために、「ギャップを埋める」ことができるでしょうか?
リファクタリングの価値は、さまざまな方法で現れます。
後で他の変更を加えるのに役立ちます。そのため、その機能で必要だったX日が完了するまでに2/3X日かかります。アジャイル用語を使用すると、速度が向上します。
リストされた明示的な変更は、VB6の経験を持つ開発者を維持する必要がなくなり、C#の経験を持つ開発者のみを維持するため、時間の経過とともに役立ちます。
また、スタッフの保持や採用など、他の目に見えない方法でも役立ちます。 C#とVB6を実行するジョブは、C#だけを実行するジョブよりも魅力的でしょうか?あなたは仕事をするか、ニースのコードベースまたはひどいコードベースで作業する仕事を続ける可能性がありますか?
リファクタリングのビジネスケースを作成するには、それを行うことと行わないことのビジネス上の最終的な利益を比較します。これは、現在の実質コストの削減、または将来の実質現金流入の増加を意味します。
リファクタリングの影響を受ける主な予算項目は次のとおりです。
新しい機能を追加するコスト-繰り返しになりますが、現在のシステム設計と構造により、新しい機能を書くのに不当に時間がかかる場合、書き換えによって節約できる可能性があります。新機能の計画予算を見てくださいが、現実的である必要があります。50%の改善が見られると主張する場合は、実際に機能を開発するために、以前は2 * x人月かかっていたx人月を期待しています。そのような約束は守るのが難しいかもしれません。
ソフトウェア品質が販売に与える影響-現在のシステムが顧客に目に見える問題を頻繁に引き起こしている場合。適切なメンテナンス作業にもかかわらず、クラッシュやダウンタイムが発生した場合は、書き換えが解決策になることがあります。 [〜#〜] if [〜#〜]これは大きな問題であり、同じ営業担当者が「より安定した製品」と呼ばれる「機能」の価値を定量化できます。
上記の3つのポイントが予想される書き換えコスト(およびそれ以上)に達しない場合、x dev-daysをnot-featuresに費やす機会コストはそれらの機能の値に等しく、x devの純粋なコストよりも大きい-日)それでそれはそれだと恐れています-予想される節約が書き換えを正当化するものではありません。
また、ロードマップで「提供できる限り」の新機能の必要性が示されていない場合、節約額は次の形式である必要がありますこれは、必要なすべてのことを行うために10人必要でしたが、書き換え後は、6人で同じことができるようになります '。開発者よりも多くの開発プロジェクトを "販売"できる場合は、効率を向上させることで、より多くのものを開発できますが、現在のリソースを備えたビジネスが、追加の価値をもたらすすべてのものをすでに開発できる場合は、唯一の経済的利益より少ない人々に支払うか、より安い人々を持つことから来ることができます。
リファクタリングの価値は次のように測定できます。現在、新機能xは5 devs 2週間かかります。古いコンポーネントをリファクタリングすると、新機能のコストは約20%削減されます。そのため、新機能xは2週間で4人の開発者にのみ費用がかかります。
リファクタリングは、将来の開発コストを削減するための投資です。リファクタリングについてその議論をすることができない場合は、おそらくビジネスケースはありません。