技術的負債の削減に対してどのように支払いを受けることができますか?


16

現在、技術的に複雑な製品がほとんどない中小企業で働いています。私はそれらの1つの唯一の開発者です。約1年前、私は製品のレガシーバージョンを入手し、それを「サポート」し始めました。

顧客は、そのような種類の新機能、ビジネス価値などについてのみ話します。問題は、コードはC#ですが、非常に手続き的なことです。抽象化はありません。クラスはVisual Studioで必要な場合にのみ使用されます-たとえば、フォーム。これらのクラスの実装は本当にひどく、コードの保守は本当に困難です。

これらすべての年の間、私はリファクタリングのために自分の時間を費やしています。最新バージョンでは、かなり抽象化などがあります。多くのコンポーネントをゼロから再実装する必要がありましたが、これらのコンポーネントに新しい機能を追加したり、動作を変更したりするのは、他のコンポーネントよりもはるかに簡単だと思います。

問題は、私が自分の時間を過ごすことです。結果は本当に気に入っていますが、1日12時間働くのは好きではありません。同様の状況に行ったことはありますか?何を試せばいいですか?私はすでにそれを議論しようとしましたが、まだ成功していません。

レガシーコードに多くの変更を必要とする新機能を実装することに決めた瞬間が怖いだけです。それは顧客に衝撃を与える可能性があります。これらのアイコンを変更するのになぜ8時間かかるのですか?顧客は、コードに500箇所の変更が必要であることを気にしません。また、これらの500か所すべてを最初に見つける必要があります。

何か案は?


3
あなたの質問は何ですか?あなたが従業員である場合、なぜこのコードを持っているのですか、なぜ自分でコードを変更したのですか?なんでしょう?それに取り組んでいるあなたの未払いの時間を補償するために?または、単により少ない時間に働きたいですか?あなたの雇用主はあなたが自分の時間で改善を行ったことを知っていますか?あなたの質問は現在書かれているので答えられません。
ロバートハーヴェイ

3
では、具体的な質問は何ですか?自分の時間に開発したアーキテクチャの方が優れている場合、なぜ手続き型のままにしておく必要があるのですか?
ロバートハーヴェイ

8
彼らはあなたの言語を話さないので、あなたは彼らの言語を学ぶ必要があります。これは非常に頻繁に行われる方法です。これは逃げる理由ではありません。ほとんどどこにでもあるからです。別のGOOD coderをオンボードで組み込むには、半ば真実だが正当な理由が必要です。その後、リファクタリング時間を組み込みます。それ以外の場合は、独自の見積もりを埋め込み、リファクタリング時間をプロジェクトに追加するよう最善を尽くします行う。通常、ビジネスマンはどこかにソフトスポットを持っています。目には他のタスクよりも大きなタスクがあります。「大きい」ものを埋めます。ああ、テストを書くことを忘れないでください:)また、今のところ残業を続けてください-invstmnt-
ジョブ

2
@ロバート・ハーベイ、質問者は物事を正しく行う方法を知っていますが、他の誰かのがらくたにこだわっており、多くのリスクに直面している唯一の人は、がらくたが壊れたときにそれを過失する唯一の人です。中小企業は生き残りをかけ、売り上げ/収益を上げていますが、技術的な負債が増えているため、他の人に気付かれずに彼を強調しています。彼はこの穴から抜け出すためのロードマップとヒントを必要としています。
ジョブ

1
質問のタイトルを変更しました。新しいタイトルがあなたの意図をより正確に反映することを願っています。失われた時間を回復できるかどうかはわかりません。私は他の人が提案することを行い、あなたの推定値にいくつかのパディングを追加して、あなたの強化を組み込むためにいくらかのお金が利用できるようにします。
ロバートハーヴェイ

回答:


37

ステップ1:無給の残業をやめる。

現在の開発率が予想されるものであると信じるように、1年間顧客とマネージャーを既にトレーニングしました。これは、彼らが「単純な」ことをするのに丸一日かかることがある理由を理解していない理由の一部です。あなたは彼らを人質にし、プロジェクトを傷つけることを試みる必要はありません。しかし、あなたは彼らの期待が高すぎることを説明する必要があり、あなたは別の開発者が必要か、期限までにもっと時間が必要です。あなたがマネージャーに、あなたが無給の残業で働いており、それをあまりしないことを計画していることを具体的に述べてください。たとえ9時間に短縮しても、違いは認識されます。なぜあなたの仕事が終わっていないのか、上司があなたに尋ねた場合、あなたは彼にこれが事実であると警告することを指摘したという事実を指摘することができます。

ステップ2:メモを作成する

仕事をする時間がないからといって、仕事が(できれば)終わったら簡単にできないわけではありません。他の人があなたの懸念に気付くように、コードを修正するために持っているアイデアを追跡し、会議でそれらを持ち出します。最終的には、あなたは遅いパッチを打つか、人々があなたの懸念に価値があることを理解し始めます。この時期が来たら、しばらくの間コードのセクションを見ていなかったので、乾いた状態ではなく、何をすべきかについてのいくつかの基本的なアイデアがすでにあります。


あなたが言うことは絶対に素晴らしいアイデアです。約1か月前に、バグトラッカーにタスクを追加することにしました。このタスクが確認されないことは気にしません。潜在的な問題が発生するたびに、タスクを追加してお客様に通知します。次回にできるだけ早く修正する必要があるとき、数か月前に作成したタスクについて顧客に思い出させるだけです。お役に立てば幸いです。
アンドレイアギバロフ

17
あなたが仕事を絶対に愛していても、「無給の残業をやめる」は当てはまるはずです。あなたは余分な時間の恩恵を受けていません。彼らです。コンピューターの前で時間を過ごしたい場合は、自宅でプロジェクトのためにそれを行います。
クリストファー・マーハン

1
この業界で10年以上経っても、「遅いパッチを当てる」ことはありません。何が間違っていますか?
SBI

@sbi「それを正しく行う」ことができると思う:)
スティーブン

13

...コードを維持するのは本当に難しいです。

これが管理の方法です。バグを修正して新しい機能を追加するだけのコストが、コードのリファクタリングとリライトのコストよりも大きいことを示します。

たとえば、現在のコードで新しい機能を追加するのに2週間かかり、メンテナンスにかなりの時間がかかる場合(たとえば、1週間に1日)、1週間のリファクタリングで1 1/2で開発を完了できることを示します。ただし、メンテナンスは月に1日(またはそれ以下)に削減されます。これらの数字は、短期的な費用はあるものの、中長期的にはあなたがしていることの費用対効果が高いことを示しています。

会社は今、お金を使うことを好まないかもしれませんが、潜在的なメリットははるかに大きいことを確認できます。つまり、生産性が向上し、より短時間でより多くのコードを生成し、コードの品質が向上します。


7

ボーイスカウトルールを適用する:コードに触れるたびに、コードを少し整理します(技術的な負債が少ない)。

あなたが与えるすべての見積もりでこれを行う時間を許可します。その後、魔法のように、時間が経つにつれて技術的な負債が消え、あなたはそれを行うために支払われます。

このアプローチは、技術的負債の時間を明確に切り出す(したがって、顧客/マネージャーに支払いを促す)よりもはるかに簡単です。それはあなたにプロフェッショナリズムと「よくやった仕事」のはるかに大きな感覚を与えます。そして最後に、顧客とマネージャーは、それがどのように起こったかをよく理解していなくても、長期的には感謝します。


ただし、このアプローチでは、これ以上実質的なリファクタリングを行うことができなくなります。
SBI

1
@sbi-驚くべきことです。適切な単体テストと適切なロールバック用のSCMがあれば、制御された検証済みの手順で膨大な量を実行できます。私はかつて、大きな(50以上のクラス)継承階層を、一連のインクリメンタルリファクタリングでプロトタイプベースのモデルに変更しました。
ミケラ

@sbi:実際に実質的なリファクタリングを行うべきではありません-一度に1つの変更/リファクタリングを行うだけです。小さな作業単位、小さな変更、そしてもちろんすべてのテストなどを実行して、何も壊していないことを(二重に)確認します。
クトゥルフ

@Cthulhu:優れた単体テストがある場合、テストはほとんどのエラーをキャッチするため、ほぼ必要なだけコードをノックダウンして再構築できます。
-sbi

4

これは多かれ少なかれ、保守プログラミングの悲しい現実です。あなたは維持するために割り当てられたものにこだわっており、請求書を支払う人が利益なしに変更と考えられるものに支払いたくない場合、それらの変更は行われない傾向があります。

これらの変更に資金を提供することを主張したい場合は、最も単純な更新でも変更する必要があるすべての場所のログを保持してください。いくつかの変更を行った後、そのログについてマネージャーと話し合ってください。文書化できる場合、財布の紐を持っている人は、将来の変更が安くなるので、長い目で見れば実際にコードをきれいにする方が安いことに気付く可能性があります(非常にスリムですが)。

この製品が使用されると予想される期間が長くなるほど、これを売るチャンスが増えます。また、製品の障害が顧客の広報問題を引き起こしたり、顧客の費用が発生したりする可能性がある場合、オッズも増加します。

それがなければ、できることを学び、少ないメンテナンスで別のポジションに移動します。


3

リファクタリングや製品の改善が企業にどのようなメリットをもたらすかを経営陣に示す必要があります。

顧客は、コードが機能する限り、コードが美しいかいかを気にすることはないでしょう。また、経営陣は、既に支払ったものが不適切に設計され、実装が不十分であることを顧客に説明しようとはしません。同時に、経営陣は、目に見える(請求可能な)方法で製品を改善しない開発時間のコストを食い尽くすことはありません。

だから...あなたはあなたが提案する変更が会社に役立つことを経営者に納得させる必要があります:

  • より優れたアーキテクチャにより、新機能をより迅速に追加できることを示します。
  • 現在のパスに沿って進むことで、彼らは隅に自分自身をペイントすることを説明します。
  • 現在のシステムで行うには非常に高価ですが、より良いデザインで簡単で安価な変更の例を挙げてください。
  • レガシーコードの維持と販売可能な機能の追加に費やした時間を追跡します。-既存のシステムはかなり優れていたが、新しく近代化されたアーキテクチャにより、多くの大きな新しい改善、信頼性の向上などが可能になることを、既存および将来の顧客に説明できます。
  • 提案する変更に関連するリスクを軽減します。マネージャーはリスク回避的であり、既存のシステムへの抜本的な変更は本質的にリスクが高いようです。
    • コストと利益に応じてさまざまなコンポーネントの近代化に優先順位を付け、経営陣があなたの優先事項に同意するようにします。
    • ユニットテストを使用して、最新のコンポーネントが残りのレガシーコードと互換性があることを確認します。
  • 近代化の取り組みの進捗状況を追跡します。できるだけ早く利益を示しますが、やるべきことがもっとあることをすべての関係者に思い出させます。

3

気付かないかもしれませんが、Johnny Cashはリファクタリングの動きを予測し、既存の大規模なコードベースをリファクタリングする最良の方法についての曲を書きました。

もちろん、彼はそれを自動車のメタファーでラップし、聴衆がそれに関連するようにしなければなりませんでした。

「ワンピース」-ジョニー・キャッシュ


2

変更が「必要」な時間に顧客に請求し、それでも長期的には先を行くことができるようです。

コードのクリーンアップを楽しんでいる場合(そして、少なくとも少しはやり直しているように思える場合)、先に進み、コードを実行し続けますが、コードを使い切ってはいけません。それはあなた、あなたの会社、またはあなたの他の顧客に何の役にも立ちません。

経営陣と顧客と協力している人が、コードが最適な形ではないことを知っていることを確認してください。そうすれば、十分な情報に基づいた意思決定を行うことができます。コードの問題に気付いていない場合、彼らは仕事をすることができません。


1
@robertharvey:ええ、彼は自分の時間にコードをクリーンアップしているので、更新が請求される顧客は、コードがよく書かれている場合よりも多くを支払う必要がありません。彼の会社は、コストの大部分を負担する必要があります(発生した場合)。顧客がある程度の時間を支払うことは合理的ですが、コードががらくたであるため過剰請求する場合、それは善意と将来のビジネスを失う良い方法です。
DKnight

2

クライアントのアプリケーションにはいくつかの技術的負債がありますが、忘れないでください、おそらくわずかな割引で請求されました。彼らはこれに気付いていなかったかもしれませんが、それはあなたが最低の入札を取るとき起こることです。

機能の変更に対して全額を支払うか、機能を変更しないかを決定する必要があります。それは彼らの選択です。決定を下すか、無料で仕事を続けることができます。行ったクリーンアップ作業に言及して言及し、完了した作業に対してわずかな割引を提供できます。繰り返しますが、それは彼らの選択です。


1

私がこれにアプローチする方法は、上司に技術的負債の概念を説明することから始めて、彼らがそれを確実に得られるようにすることです。収益、ビジネスの観点からアプローチしてください。彼らが新しい機能を要求するたびに、製品に蓄積された技術的な負債はあなたの効率に影響を与えるため、この負債のために各機能には少し余分な費用がかかります。

彼らがあなたの話していることを理解したら、技術的な負債を減らすために少し時間をかけて交渉してみてください。私の会社では、技術的負債の削減に取り組むために、各開発者の10%の時間の請願でかなり成功しています。

この作業を行う時間を確保したら、実際に使用することを確認してください(10%の時間外に作業するだけでなく、銃に執着してください)。技術的な負債項目のカタログを作成し、それらに優先順位を付けて、削り出します。一度に一口ずつ象を食べなければなりません。


1

そして、より良いツールを考慮することを忘れないでください。Resharperは、Visual Studioにプラグインする優れたリファクタリングツールです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.