リライトは、スコープを正しく設定すると非常に成功する可能性があります。これらが "BIG"(TM)プロジェクトのしきい値を満たしているかどうかはわかりませんが、より成功した2つの書き換えについて説明します。
プロジェクト1
私が働いていた会社では、棚板印刷システムを使用して、プラノグラムと呼ばれるものから小売店の棚に表示されるラベルを生成していました。プラノグラムは業界標準のソフトウェアで生成され、当社のツールはそのドキュメントを読み取り、ターゲットストアのテンプレートを使用してシェルフストリップを作成します。テンプレートソフトウェアは、いくつかのクラスと3つのDLLにまたがるネストされた有限状態マシンの混乱でした。(その後)ペグボードを行うための特許出願中のアプローチを実装するときが来たとき、現在のコードは私たちがやりたいことをサポートできないことは明らかでした。
解決策:書き換えの対象をテンプレートエンジンのみにしました。適切なオブジェクト指向設計を使用して、現在の要件を処理し、新しいペグボードの要件に対処しました。書き換えの時間は1か月でした。ツールチェーン全体を全面的に書き直した場合、1年以上かかりましたが、それを行う必要はありませんでした。
プロジェクト2
私たちのチームが一から構築したWebアプリケーションは、元のデザインよりも大きくなり始めていました。私たちのクライアントには、ユーザーにとってサイトをより良くし、必要に応じて「Web 2.0」に準拠する新しい要件のスイートもありました。既存の設計を現在のフレームワークに靴磨きすることもできましたが、メンテナンスは悪夢でした。私たちはアプリケーションをよく知っていて、新しいバージョンの一部として、どの部分を前に持っていく必要があり、どの部分がなくなるのかを知っていました。
解決策: チームの完成には3か月かかりました。簡単ではありませんでした。最終製品は、エンドユーザーにとってより速く、よりスケーラブルで、より楽しいものでした。クライアントの期待を上回りました。ただし、既存のシステムでより迅速なバグ修正とバンドエイドパッチを行い、残りの半分は新しいシステムで作業できるように、チームを分割する必要がありました。広範なテストを実施し、プロセスの初期段階で組み込みました。これがうまくいった理由は、このアプリケーションとクライアントをよく知っていたからです。
プロジェクト3
ここに失敗を含めなければなりません。災害/危機の状況で使用するための情報管理ツールを必要とするクライアントをサポートしていました。元の開発者がSwingを完全に理解せずに作成したJava Swingアプリケーションを継承しました。つまり、Swingを処理してUIを適切に管理するというSunの推奨事項に従わなかったため、無限のイベントループやその他の奇妙で追跡が難しい問題が発生することになります。その結果、バグ、ユーザーインターフェイスの問題などが多く含まれていました。これは非常に複雑なアプリケーションでした。正気を保つために、私たちはよく書かれていないSwingアプリを、よく書かれたSwingアプリに書き直そうとしました。
解決策: 3か月と見積もった約4.5か月で書き換えを完了しました。UIおよび処理できるデータ量の両方で、アプリケーションのパフォーマンスが向上しました。その後、2004年に津波が発生しました。彼らが追跡しなければならなかった人数の膨大な数は、Swingが本当に必要なものにとって間違ったテクノロジーであることを示しました。パフォーマンスチューニングに追いつくことができず、最終的には、彼らが社内にいたOracleチームによって作成された、丸石で結ばれたWebアプリを優先してツールを放棄しました。確かに当時の知識に基づいてやったことを正当化することはできましたが、書き直しは十分に積極的ではなかったため、追跡する必要がある可能性のある人数の要件もクライアントに伝えることができませんでした低い。
結論
書き換えが必要な場合があり、正しく計画すれば正常に完了することができます。システムの一部を対象にしたリライトを使用すると、ホールセールのリライトよりもさらに向上できます。最後に、プロジェクトが失敗する原因は、必ずしも書き換え自体ではありません。千里眼になることは決してありませんが、最悪のシナリオを思いつくことができます。考えられる最悪のシナリオの2倍をサポートするようにシステムを設計することを学びました。危機管理システムの場合、それだけでは十分ではありませんでした。実際の数値は、与えられた最悪のシナリオの20倍でした。しかし、それは考えられる最悪のシナリオではありませんでした。
- 書き換えのための書き換えはあなたの友達ではありません。目に見えない複雑さは常に多く、見苦しいものはクライアントのトレーニングツールであることがわかります。 最悪の攻撃をキャッチできるように、常に現在の進捗状況を定期的にクライアントに表示してください。
- ターゲットベースの書き換えは、コードベースの最悪の違反に対処するのに役立ちます。範囲を制限して問題の大部分に対処できる場合は、全体を書き直さないでください。