レガシー置換のパターン

レガシーソフトウェアシステムの効果的なモダナイゼーション

既存のソフトウェアシステムを置き換える必要に直面した場合、組織はしばしば、未完了のテクノロジー置き換えのサイクルに陥ります。私たちの経験から、レガシーソフトウェアの置換の望ましい成果を認識し、置換を部分に分割し、それらの部分を段階的にデリバリーし、変化は不変の現実であることを認識するための組織文化を変えることによって、このサイクルを断ち切ることができる一連のパターンを学びました。

2024年3月5日


Photo of Ian Cartwright

イアン・カートライトはThoughtworksのテクニカルディレクターであり、アーキテクトおよびハンズオン開発者としての20年の経験を活かして、クライアントが技術能力を向上させるのを支援しています。

Photo of Rob Horn

ロブ・ホーンはThoughtworksのテクニカルディレクターです。経験豊富で情熱的な技術コンサルタントおよびアジャイル実践者であり、25年以上のキャリアのうち約15年間、金融、社会、旅行、公共部門のクライアントとレガシーモダナイゼーションの課題に取り組んできました。

Photo of James Lewis

ジェームズ・ルイスはThoughtworksのテクニカルディレクターであり、テクノロジーアドバイザリーボードのメンバーです。彼は、分散システムアーキテクチャと組織設計についてクライアントにアドバイスしたり、同じトピックに関する会議で講演したりしています。


私たちは過去数十年のほとんどを、大規模な組織がレガシーシステムを刷新するのを支援してきました。その中で、何が有効で、どのような道が失敗につながるかを多く学びました。私たちは、使用されているさまざまなパターンという形で、学んだことを書き出す時間を設けることにしました。

この記事は、これらのパターンのハブとして機能します。あまりにも頻繁に、組織が中途半端なレガシー置換の取り組みのランニングマシーンにはまっているのを見てきました。このサイクルを断ち切るための鍵は、企業生活の中で、ある程度順番に、しかしほとんどの場合反復的に行われる4つの活動が必要だと考えています。私たちは、これらの活動を、説明するパターンを整理するための主要な構造として使用します。

私たちは常に、効果的なソフトウェア開発には価値のある機能の段階的なリリースが必要であると信じており、それは執筆にも当てはまると考えています - 特にWebの時代では。まず、このナラティブ記事から始め、詳細を記述するにつれて、パターンや、それらがどのように組み合わされるかを示す他の例を段階的に追加していきます。私たちの優先事項はクライアントの仕事であり、置換するレガシーには事欠かないため、日付を約束することはできません。この作業の他の部分が登場したときに聞きたい場合は、MartinのTwitterフィードと、このサイトのRSSフィードで発表されます。

レガシー置き換えのランニングマシーン

私たちは、レガシーシステムの削除を複数回試みた多くの組織と協力してきました。比較的典型的なある組織では、3〜5年間のモダナイゼーションプログラムを何度も経験していました。毎回、新しい技術アプローチを定義し、大規模な複数年モダナイゼーションプログラムの一部として、その新しいアプローチに取り組んでいました。

各プログラムの途中で、ビジネスニーズの変化が現在の技術戦略を追い越し、やり直す必要が生じるという危機的な状況に陥ります。プログラムに対してウォーターフォール型の「ビッグバン」アプローチを採用していた場合、これは作業の大部分を放棄することを意味していました。より段階的なデリバリーアプローチを採用した場合、すでにある複雑な状況に、少し新しい技術のレイヤーを追加するアプローチが採用されました。どちらの場合も、レガシー スタックを廃止することはできず、コスト削減とリスク軽減のための主要なビジネス目標は達成されませんでした。これは、多くのレガシー置換の取り組みに共通する結果です。

彼らの繰り返しの失敗には、いくつかの重要な要因がありました。

まず、彼らが見ていた貧弱な成果は、主に組織、特にリーダーシップ、構造、働き方の産物でした。新しい技術を選択するだけで、他のすべてをほぼ変更せずに残した場合、過去とは異なる成果が得られると考えていました。後から考えると、これは明らかに非現実的でした。

次に、モダナイゼーションは大規模な変更プログラムによってデリバリーされる予定であり、それ自体がさまざまなプロジェクトとチームで構成されていました。これらのプロジェクトは、BAU(通常業務)の取り組みとは直交するものとして扱われました。そのため、既存のシステムに対してビジネス要件のBAUデリバリーが継続され、新しいプロジェクトチームは置換プログラムの開始時に合意された一連の要件に基づいてデリバリーを行いました。

時間の経過とともに、ビジネスが実際に必要としているものと、プログラムの開始時に実際に承認されたものとの間にギャップが広がっていることに気付きました。各プログラムの実行期間が長くなるほど、プログラム計画とBAUおよび将来のニーズとの間のこのギャップは大きくなりました。プログラムに新しい要件を追加するための変更管理プロセスはありましたが、これらは非常に時間がかかり、前払いのサプライヤー契約のために法外に費用がかかりました。

失敗のいくつかの重要な3番目の要因は、既存のシステムとビジネスプロセスとの機能パリティに対する欲求でした。これらの試みは、何らかの方法で、技術が「改善」された状態で、今日のビジネスが持っているものを正確に提供することを約束することから始まりました。その後、複数の失敗を見て、混乱を懸念したビジネスリーダーは、これがよりリスクの低い戦略だと感じました。ここでの課題は、現在の「現状」の機能を定義し、合意することさえも大きな労力であり、大規模な単一の「ビッグバン」カットオーバーリリースの計画につながりました。

この組織や他の多くの組織からの私たちの観察では、テクノロジーはレガシー問題のせいぜい50%にすぎず、働き方、組織構造、リーダーシップも成功にとって同様に重要です。

このサイクルを断ち切る

明らかに、「技術置換プログラム」のサイクルから抜け出す必要があります。つまり、組織は、ビジネスニーズを提供し続けながら、同時に時代遅れの技術を置き換え、加速する技術変革とより厳しい競争環境に対応する必要があります。

これらの課題に対処するのに役立つことがわかっている一連のアプローチがあります。それらは、新しい要件を、改善されたテクノロジーと並行してデリバリーできるように、問題をより小さな部分に分割する課題を支援します。大まかに言って、それらは4つのカテゴリに分類されます。

  1. 達成したい成果を理解する
  2. 問題をより小さな部分に分割する方法を決める
  3. パーツを正常にデリバリーする
  4. これを継続的に行うための組織変更

達成したい成果を理解する

レガシーに取り組む際に達成したい成果に組織が合意することは非常に重要です。これは当然のことのように思えるかもしれませんが、あまりにも頻繁に、組織のさまざまな部門が望ましい成果についてまったく異なる見解を持っている可能性があります。ほとんどのレガシーモダナイゼーションイニシアチブには、以下に示す成果のいくつかが含まれていますが、旅を始める前に、どの成果が優先事項であるかを特定することが不可欠です。

変更コストの削減

多くの組織がレガシーに取り組むことを決定する上での重要な転換点は、望ましいビジネスの変化にかかる費用が、機会費用(別名遅延)または実装費用によって、予想される利益を大幅に上回り始めることです。早期の警告サインは、ビジネスパフォーマンスのわずかな向上しかもたらさないWebサイトに変更を加えるために、数週間、数万または数十万を費やす必要があることです。

この時点で、投資に対して大きなリターンをもたらさない変更を加えることを正当化することはしばしば不可能になります。言い換えれば、テクノロジーの状態が、ビジネスが行うことができる変更の規模を指示し始めたということです。多くの組織にとって、これは「BAU」の変更を行うか、より大規模なプロジェクトを開始する必要があるかの違いを意味します。これらのより大規模なプロジェクトは、以前は正当化できなかったすべての小さな変更の磁石になり、その範囲、コスト、リスクを増大させます。

ビジネスプロセスの改善

私たちは、ビジネスプロセスがレガシーシステムの隣で進化し、プロセスがシステム内の制約と、システムを操作する方法に密接に結びつき、多くの場合、システム外の回避策が、人々が仕事を行うために従うビジネスプロセスを形成する例をたくさん見てきました。

私たちが目にした例の1つは、「グリーンスクリーン」端末を使用していた航空会社のチェックインシステムです。レガシーシステムの制約により、プロセスは厳密な順序で実行する必要があり、修正やミスが発生した場合はチェックインプロセスをやり直す必要がありました。また、当初、航空会社は乗り継ぎ便を提供していませんでした。これが追加された場合、その技術の制約により、レガシーシステムで個別のワークフローとして行う必要がありました。したがって、チェックイン時に乗客が乗り継ぎ便があることを言及しなかった場合、間違った手荷物タグの印刷などを含む間違ったプロセスが実行され、その後、システムは乗り継ぎ便を通知していました。チェックイン担当者の仕事と乗客の体験は、プロセスを変更することで大幅に改善できたはずですが、レガシーシステムのために不可能でした。

これを考えると、ビジネスプロセスを更新および変更するには、サポートテクノロジーの動作方法を変更する必要があることは驚くべきことではありません。テクノロジーを変更せずに作業プロセスを変更しようとすると、多くの場合、「システム外」での作業が発生し、人々はデータをスプレッドシートなどに抽出してそこで作業し、データをレガシーシステムにインポートし直すことに頼ることになります。

ある組織では、在庫発注プロセス全体が、チームマネージャーのPCで実行されているMicrosoft Access DBで実際に行われていました。彼らは、レガシーシステムがサプライヤーの新しい作業方法をサポートできなかったため、不満を抱いていました。彼らは週に数回、データのインポートとエクスポートを行っていましたが、その間、他の組織は、何が起こっているのか誰も気づいていないため、古い数値を表示していました。

多くの場合、データのインポートとエクスポートをサポートするための置換システムの要件は、この種の回避策に根本的な原因があることに注意してください。

古いシステムを廃止する

旧システムの廃止は、レガシーモダナイゼーションの一般的な理由です。これは多くの場合、古いハードウェアやソフトウェアのサポートにおける課題が原因であり、サポートコストの増大や、ハードウェアとソフトウェアの両方のサポート契約が終了するといった問題があります。

私たちは、旧システムの廃止をビジネスの観点から捉えることが有用であると考えています。したがって、古い技術で構築されたシステムであること自体は、交換するのに十分な理由にはなりません。代わりに、ランニングコストの増大、サポート不足やシステムに関する知識不足によるリスクなど、これがもたらすビジネスへの影響を考慮する必要があります。

一部の組織は古い技術の陳腐化に対して適切に計画を立てていますが、多くは危機的な状況になるまで問題を無視しているようです。その結果、組織は混乱の少ないオプションや手軽な成功例に見えるモダナイゼーションのアプローチに傾きがちになりますが、これらは通常アンチパターンであり、その落とし穴については後述します。

私たちは長年にわたり、非常に多くの大企業が、サポートされていないハードウェアやソフトウェアでビジネスを運営していることに衝撃を受けてきました。eBayでスペアパーツを購入するのは、驚くほどよく聞く話です。レガシー技術をお持ちの場合は、適切な調査を行い、さまざまなサポート終了日を記載したカレンダーを作成することをお勧めします。

多くの組織は、レガシーモダナイゼーションの主要な成果として旧システムの廃止を掲げていますが、実際にはそれが実現しないことも珍しくありません。最終的にはレガシーが使用され続け、関連するビジネス目標は達成されないままとなります。

差し迫った混乱

一部の組織にとって、レガシーに取り組む実際の転換点は、規制の変更、新たな「スタートアップ」競合の出現、既存の競合他社による大きな変化などの外部要因によって生じる可能性があります。多くの場合、「やらなければならない」変更に直面したときに、対応に必要となるお金と時間が大きくなりすぎていることが明らかになります。

外部の出来事が、組織のリーダーシップに対して、もはや適切なコストで変更を行う能力がないことを明確にするのです。

新しいテクノロジー

レガシーモダナイゼーションの理由として、より新しい技術の採用があってはなりません。単に新しい技術を持つこと自体は、どの組織にとっても主要な目標になることはほとんどありません。そうではなく、ビジネスの現在および将来のニーズを最も適切に満たす方法で選択され、選ばれるべきです。ここでの課題は、技術変化のペースが加速しており、技術の「有用な」寿命が短くなっていることです。「有用な」という実際の定義は組織によって異なりますが、一般的には次のようなことを考慮する必要があります。

  • 競争優位性を実現する
  • 競合他社または市場の提供物と一致する
  • より速いペースの変化を可能にする
  • 変更が安価になる
  • ランニングコストが低くなる

今日、最も優れた有用なテクノロジーについて下す選択は、比較的短期間のうちにより良い代替品に追い抜かれる可能性があります。このため、将来のニーズを満たすテクノロジーを見つけるための意思決定を正しく行うことは、非常にリスクの高いものとなる可能性があります。

ここでの良いアプローチは、2~3年で簡単に「やり直せる」ような選択をしないことです。これは、テクノロジーの選択だけでなく、全体的な設計とアプローチにも影響を与えます。変化のペースが加速していることを認識している場合、5〜10年の回収期間を持つ巨大なプラットフォームを選択することは正当化するのが難しいでしょう。

問題をより小さな部分に分割する方法を決める

大まかに言えば、これには、現在のビジネスおよび技術アーキテクチャにおける適切な「境界」を見つけることが含まれます。重要なのは、現在のソリューションの要素が、さまざまなビジネスケイパビリティにどのように対応するかを検討する必要があるということです。レガシーシステムの場合、通常、これは1つの大規模な技術ソリューションがどのように複数のビジネスニーズを満たしているかを発見し、新しいソリューションを使用して個々のニーズを独立して実現できるかどうかを確認することを意味します。理想的には、これらは互いに依存関係を最小限に抑えて配信できる必要があります。

よくある異論は、これらの境界を見つけるのは難しすぎることです。最初は難しいことに同意しますが、私たちは、あまりにも頻繁に機能パリティとビッグバンリリースにつながる他の代替案よりも、より良いアプローチであることがわかりました。また、多くの組織が、技術やビジネスプロセスを単独で検討しているために、そのようなアプローチを却下していることも観察しました。技術の一部だけを変更したり、ビジネスプロセスを1つだけ個別に更新したりしても失敗する可能性がありますが、両方を考慮して実装できれば、「象を食べる」方法があります。

開始する

レガシーモダナイゼーションは、旅の始まりには最も困難な提案のように思えるかもしれません。あらゆる旅と同じように、最初に進むべき方向を理解しようとしなければなりません。また、あらゆる旅と同様に、今いる場所から始めなければなりません。よく遭遇する問題の1つは、先に広がる景色の見えない森の中でスタートすることが多く、したがって、どちらの方向へ進むべきか見当がつかないことです。したがって、最初のステップは、木に登って周囲をよく見渡すことです。これは、現在のシステムとアーキテクチャについて、可能な限り短時間で十分に理解することを意味します。これは多くの場合非常に難しく、あまりにも詳細にこだわりすぎて泥沼化しがちです。

幸いなことに、十分な理解を得て進めるために、共同で使用できる非常に便利なツールがいくつかあります。これらのツールについては別の場所で詳しく説明しますが、概要リストには、イベントストーミングウォードリーマッピング、ビジネスケイパビリティマッピング、ドメインマッピングが含まれます。このリストで注目すべきは、主にビジネスコンセプトがシステムアーキテクチャにどのようにマッピングされ、それがどのようにアーキテクチャが価値創造をサポートするかを理解していることです。これは、特にレガシーシステムの場合、見落とされがちな視点です。

問題を理解するためのパターン
タウンプランの作成 †組織の安定した部分を特定し、チームとソフトウェアを構成する
イベントストーミング †ビジネスプロセスを理解するために使用される手法
ビジネスケイパビリティの特定 †組織の安定した部分を特定し、チームとソフトウェアを構成する
バリューストリームマップ †ユーザーがどのように作業を完了するかを記述した成果物

† 現在はスタブのみ

具体的には、人々は多くの場合、レガシーシステムの境界で発見的な活動を止めてしまうことに気づきます。「ここにはドラゴンがいる」、それ以上進まないということです。境界を越えて、レガシーシステムがビジネスプロセスや活動をどのようにサポート(または妨害)しているかを明らかにせずに、提供する薄いスライスを見つけて抽出することは困難です。

よく見落とされがちな、非常に貴重な情報源は、システム自体のユーザーです。実際、著者の経験では、多くの場合、驚くほど多くの有益なものが見つかり、特に古いシステムの周りに通常構築される、多くの回避策やシャドーITエコシステム(つまり、ビジネスを実際に運営しているAccessデータベースやバージョン管理されたExcelスプレッドシートなど)が明らかになる場所です。カスタマージャーニーマッピング、サービスブループリントの作成、バリューストリームマッピングは、この種の詳細を明らかにするために有効活用されてきたツールです。

問題を分解するためのパターン
製品ラインを抽出する製品ラインごとにシステムを特定し、分離します。
バリューストリームの抽出 †主要なバリューストリームを特定し、分離します
機能パリティ新しい技術スタックを使用して、レガシーシステムの既存の機能を複製します。

† 現在はスタブのみ

パーツを正常にデリバリーする

より迅速な変更の必要性、および大きな依存関係なしにビジネス要素を段階的に提供および独立して変更できる能力は、多くの場合、マイクロサービスベースのアーキテクチャと並行した「アジャイル」なデリバリーアプローチにつながります。継続的デリバリーは、これらの個別に展開可能なコンポーネントにとって必須になります。通常のソフトウェアデリバリー以外でこれを困難にしているのは、既存の大規模ソリューションからの切り替え、共存、そして最終的には要素の置き換えのための戦略を見つけることです。並行実行、イングレス時のフォーク、フローの迂回など、いくつかの成功した戦略が存在します。

デリバリーのためのパターン
カナリアリリース †変更をユーザーのサブセットにロールアウトする
クリティカルアグリゲータービジネスのさまざまな部分からのデータを組み合わせて、重要な意思決定をサポートする
ダークローンチ †パフォーマンスへの影響を評価するために、結果を使用せずに新しいバックエンド機能を呼び出す。
流れを変える最初に、組織全体の活動をレガシーから遠ざける
イベントインターセプションシステムの状態に対するすべての更新をインターセプトし、その一部を新しいコンポーネントにルーティングする
レガシー模倣新しいシステムは、古いシステムが変更を認識しないような方法でレガシーシステムと対話する。
ソースに戻すデータの発生源を特定し、そこに統合する
全世界停止型切り替え †新しいシステムに切り替えている間、通常のビジネス活動を一時停止する
移行アーキテクチャレガシーシステムの置き換えを容易にするためにインストールされたソフトウェア要素。置き換えが完了したら削除する予定。

† 現在はスタブのみ

これを継続的に行うための組織変更

もし立ち返って新しいビジネス要件を提供するプロセス全体を振り返ってみると、これが一部にすぎない技術的な問題であることがすぐにわかります。より新しいテクノロジーを使用してソリューションを構築する時間とコストを削減すれば、要件に合意し、変更を本番環境に移行することに関する問題が浮き彫りになります。

より優れた技術を最大限に活用するためには、組織構造とプロセスの変更が必要であり、コンウェイの法則によれば、これを促進する技術アーキテクチャも必要です。チームとそのコミュニケーションが既存のレガシーソリューションとプロセスを中心に組織化されている場合、新しいソリューションとそのアーキテクチャに合わせて、逆コンウェイ戦略を使用して再編成する必要があるかもしれません。

レガシーシステムは、特にeXtreme Programmingや継続的デリバリーに関連する最新のエンジニアリングプラクティスを採用する能力を制約し、制限する可能性があります。レガシーシステムを置き換える際には、変更が遅く、困難で、費用のかかるシステムに戻らないように、働き方を変えることが重要です。

レガシーは組織の文化とリーダーシップの産物でもあり、より広範な変化がなければ、以前と同じ結果になることが予想されます。「企業の抗体」が新しい動きを察知し、組織から排除しようとするため、多くのレガシーモダナイゼーションの取り組みが失敗しているのを私たちは観察してきました。

組織全体が変化を拒否する一例を挙げると、私たちは携帯電話用のソフトウェアを構築したいと考えていた非常に大規模な通信会社と協力しました。リーダーシップ層は皆、これは固定インフラストラクチャに焦点を当てた既存のプログラムよりも、はるかに高速なフィードバックサイクルとより頻繁な変更を意味することを理解していました。

リーダーシップ層はこれを理解していましたが、既存の作業慣行や、それらのプロセスを実行する中間管理職には変更が加えられませんでした。そのため、既存の変更管理プロセスが厳格に適用されました。結局、ソフトウェアチームはソフトウェアを作成するよりも、変更管理フォームへの記入や変更管理会議への参加に多くの時間を費やしていました。「企業の抗体」は、新しい働き方を拒否することに成功しました。

組織の変革は大きなテーマであり、すでに多くの文献が存在しますが、レガシーに関する主な課題は、時間に関連することが多いです。組織構造や主要なビジネスプロセスに加えて、デリバリーアプローチ全体を修正(またはアウトソーシングの犠牲者の場合は再構築)している間、レガシーのモダナイゼーションを遅らせる余裕のある組織はほとんどありません。組織変革というより広範なトピックは私たちの範囲を超えていますが、レガシーのコンテキストで新しい働き方を適用し、保護するためのいくつかの戦略を推奨します。レガシーだけを変更して他に何も行わない場合、数年後に再びレガシーを置き換えることになると予想するのは当然です。

継続的な組織変革のためのパターン
継続するつもりの方法で構築する稼働開始後も継続する必要がある方法で、レガシーの代替を作成します。
段階的な置き換え稼働開始後も継続する必要がある方法で、レガシーの代替を作成します。
新しい会社市場の破壊を追求するために、新しい会社を設立します
保護されたパイロット新しい仕事のためのパイロットプログラムを作成し、通常の企業ガバナンスプロセスから切り離します

† 現在はスタブのみ

組織変革には他にもさまざまな戦略とアプローチがありますが、私たちは、これらの2つがレガシーのモダナイゼーションを後回しにすることなく、ある程度早く開始できるため、強調しました。

例:インテグレーションミドルウェアの削除

この例では、私たちのチームの1つが、大規模なレガシーモダナイゼーションプログラムの一環として、クライアントのビジネス運営に不可欠な統合ミドルウェアの置き換えに成功するために、いくつかのレガシーモダナイゼーションパターンをどのように使用したかを説明します。彼らは、ビジネスのリスクをうまく管理し、特にこの骨の多い象の部分を食べるのを促進するために、パターンとリファクタリングを組み合わせました。

成果を理解する

私たちのチームが直面した課題は、サポートが終了し、変更が難しく、非常にコストのかかる統合ミドルウェアを、ビジネスにとってサポート可能で柔軟な新しいソリューションに置き換える方法でした。既存のビジネス運営を中断したり、リスクにさらしたりすることなくです。問題のミドルウェアは、バックエンドシステムとストアフロント間の統合に使用されていました。これらのシステムは、毎日数千万ポンド相当の価値のある高価値のユニークな製品の販売を共同で担当していました。

この作業は、大規模なプログラムの中でも優先度の高い部分でした。ビジネスをサポートするバックエンドシステム全体が置き換えられており、ストアフロントも数年以内にモダナイゼーションプログラムの対象となる予定でした。

したがって、上記のステップ1に従って、チームが達成する必要のあるビジネス成果が定義されました。

  1. ビジネスプロセスを改善する
  2. どのように?この特定の統合ミドルウェアソリューションには、ビジネスの中核となるルールなど、製品をどのチャネルで販売するか、ストアフロント内で製品をいつどのように販売するかなど、重要なロジックが含まれていました。この既存のシステムは変更が非常に難しく、ビジネスのイノベーションを妨げており、ロジックの欠陥により、製品が販売されていない期間があるなどの問題が発生していました。

  3. できるだけ早く古いシステムを廃止する
  4. なぜ?既存の(そして増加している)ライセンスおよびサポートコストを削減するため。さらに、サポートが終了したミドルウェアおよびデータベース技術で重要な機能を運用することによってビジネスに発生するリスクを軽減するため。

Integration Middleware Removal Example

問題の分割:最初の縫い目とリファクタリング

インセプション中、チームはレガシーシステムに関する深い知識を持つ人々とワークショップを開催し、現状と将来のソフトウェアアーキテクチャを共同で視覚化しました。これを行った結果、レガシーバックエンドと統合ミドルウェア間のメッセージングベースの統合という形で利用できる技術的な継ぎ目を発見しました。老朽化したJ2EEアプリケーションであるレガシーバックエンドは、「製品を公開する」メッセージを非常に古いバージョンのSwiftMQによって提供されるキューに配置しました。イベントインターセプションパターンはここで役立ち、コンテンツベースルーティングとして実装すると、レガシーバックエンドからのメッセージのルーティング方法を制御できるようになり、メッセージを新しいシステムにルーティングできるオプションが作成されます。

統合ミドルウェアは、ストアフロントからのメッセージ(例:製品の販売)も処理し、JDBCを使用してレガシーバックエンドの背後にあるマスターデータベースの状態を直接更新しました。SwiftMQを介した非同期メッセージングとJDBCデータベースの更新が、レガシーバックエンドと統合ミドルウェア間のインターフェイスを形成しました。

Branch by abstraction

当時発見されませんでしたが、チームはレガシーミドルウェアの置き換えを可能にする戦略として、サブシステム規模で抽象化による分岐パターンを使用することができました。抽象化レイヤーは、キューとJDBCです。新しい実装がその抽象化レイヤーに準拠していることを確認することで、ビジネス運営に影響を与えることなく、「欠陥のあるサプライヤー」と交換することができました。

チームが最初に行ったことは、リファクタリングによってイベントルーターを追加することで、イベントインターセプションを実装することでした。

(P)Refactoring to add Event Interceptor

イベントルーター(1)は、3つの主な機能を念頭に置いて作成されました。

  1. あるSwiftMQキューからメッセージをデキューし、別のSwiftMQキュー(2)にエンキューします。(2)この新しいキューからメッセージを消費できるように、一部の構成を簡単に変更することで、統合ミドルウェアを有効にしました。
  2. 全体として、リファクタリングによって目に見えるシステム動作は変更されませんでしたが、メッセージ処理パイプラインに挿入されたことで、イベントルーターは移行アーキテクチャの一部になりました。

  3. イベントルーターのビジョンは、構成を通じて、メッセージを代替宛先にルーティングできるようにすることでした。これにより、新しい実装で公開メッセージを処理できるようになります。イベントインターセプション
  4. イベントルーターは、古いSwiftMQテクノロジーからターゲットアーキテクチャ用に選択された新しいActiveMQテクノロジーへの橋渡しにもなります。

イベントルーターの実装は、当初予想していたほど簡単ではありませんでした。利用可能なドライバーやライブラリが不足していたため、SwiftMQとの統合は問題が多く、そのアプローチは何度も見直しを迫られました。しかし、チームは、このアプローチがもたらす可能性のある価値を理解し、作業を完了して本番環境にリリースしました。新しいコンポーネントを実環境で監視し、新しい継続的デリバリーパイプラインを利用して、その機能を段階的に強化する準備を整えました。

パーツを正常にデリバリーする:機能の構築、契約の維持

New Implementation and Rollout

新しいストアフロントマネージャー(1)は、チームによって反復的に構築されました。この例に関連して、その構築には、レガシー模倣パターンを実装するマスターデータベースアダプター(2)が含まれていました。これは、抽象化レイヤーの一部として、ストアフロントから受信した販売情報でマスターデータベースを更新するために必要でした。イベントルーターはメッセージを変換しないため、レガシーイベントアダプター(3)(メッセージトランスレーター)が作成され、レガシーの世界を新しい世界にさらさず、新しいアーキテクチャの原則に沿ってメッセージを新しい形式に変換しました。また、新しいストアフロントマネージャー(1)とレガシーストアフロントの間には、新しい実装を、ストアフロントが置き換えられる際に将来発生する変更から隔離するために、レガシーストアフロントアダプター(4)も実装されました。

新しいストアフロントマネージャーが使用するレガシーストアフロント(5)に新しいAPIが導入されました。さらに、新しいAPIで公開された製品のコールバックを新しいストアフロントマネージャーのアダプター(4)に送信できるようにする機能が追加されました。重要なことに、これにより、レガシー実装と新しい実装を並行して実行できるようになりました。

パーツを正常にデリバリーする(続き):ライブサービスへの移行 - 2つ目の縫い目を使用

すべての要素が揃ったことで、ビジネス側は新しいソリューションをテストすることができましたが、リスク管理された方法でどのように本番サービスに展開するかが課題でした。

これを実現するために、彼らは別の継ぎ目、今回は製品による分割パターンを利用しました。イベントルーターは、製品タイプと一意の製品IDによる設定可能なルーティング(6)を追加するように強化されました。チームは、個々の製品のIDによる公開、管理、および販売をテストし、その後、ルーターを徐々に多くの製品タイプで構成し、事実上、新しいソリューションによって処理される製品の割合を増やしていきました。

すべての製品が新しいシステムによって処理されるようになったとき、レガシーインテグレーションミドルウェアは廃止され、ライセンス、サポート、データセンターホスティング費用で大幅なコスト削減を実現しました。

Legacy Gone

これを継続的に行うための組織変更

私たちのチームはすでに組織内の別の部門でクライアントと協力しており、別のレガシーシステムをすでに正常に置き換えていました。

組織全体のエンジニアリングレベルでは、継続的デリバリーと質の高いサポートプラクティスが確立された標準となっており、マイクロサービススタイルのアーキテクチャにより、クラウドベースのプラットフォームへのコンテナ化されたサービスの定期的かつ独立したデプロイが可能になりました。

新しいプログラムのチームは、新しいステークホルダーと協力して、ビジネスの他の部分を同じ「アジャイルとCD」の旅に導く必要があり、初期のリスク管理されたリリースによって信頼を得ることができました。時間が経つにつれて、CDを含む新しいエンジニアリングおよび品質プラクティスが、歴史的に高いレベルの官僚主義とガバナンスをもたらしていた同じリスクをどのように軽減しているかを実証することができました。そのため、頻度の低い、より大規模なリリースの代わりに、より小さく、より頻繁で、信頼性の高いデプロイと、ビジネス側が変更を受け入れる準備ができたときに変更を切り替えるリリースも実現しました。

終わりに

もちろん、上記の単純化されたストーリーよりもはるかに複雑な統合要件がありました。新しい実装を本番環境でテストした直後に、アーケオロジーの必要性が現れた例がありました。多くのビジネスに不可欠な管理情報レポートが一致しませんでした。製品が「紛失」していたのです。

徹底的な調査の結果、チームは、(長期的なビジネストランザクションの状態を保存するために)インテグレーションミドルウェアで使用されていたデータベースが、組織のデータウェアハウスに複製されていることを発見しました。多数のバッチジョブ、ストアドプロシージャ、およびビューを介して、このデータはビジネスに不可欠なKPIレポート内で使用できるようになりました。

LegacyModernizationExample_Archeology

これらのレポートが壊れないようにするために、追加のレガシー模倣が必要でした。チームは、ストアフロントからの販売メッセージにワイヤータップを使用し、JDBCを使用して、データウェアハウス内の適切なテーブルにデータを注入しました。これらの追加の模倣も移行アーキテクチャの一部となり、可能になったら削除される予定でした。

抽象化による分岐、および上記のパターンとプラクティスの使用というアプローチは、リスクを軽減することを目的としていました。

イベントインターセプション(技術的な継ぎ目)、レガシー模倣、および移行アーキテクチャを使用することで、クライアントは問題を分割することができました。次に、製品(ビジネスの継ぎ目)、この場合は製品タイプで分割することにより、より広範な展開をきめ細かく制御し、リスクをさらに管理することができました。全体として、このアプローチにより、ビジネス側は、無理のないペースでシステム置換を進めることができました。

このアプローチによりリスクを管理することができましたが、それにはコストがかかりました。したがって、検討すべき問題は、「ビジネスはこのリスク軽減にどのような価値を置くか?」ということです。これを明確にし、定量化することで、チームはそれに対する投資を追跡することができます。イベントルーターとレガシー模倣は、リスクを管理することを目的とした移行アーキテクチャへの投資の一部でした。それらの役割は、リスクを管理できるようにするオプションを作成することでした。このような作業は、「使い捨て」と見なされやすく、したがって可能な限り回避すべきコストと見なされる可能性があります。この「リスク軽減の価値」対「移行アーキテクチャのコスト」のトレードオフを明確かつ透明にしてください。


謝辞

Bill Codding、Chris Ford、James Emmott、Kief Morris、Mark Taylor、Meaghan Waters、Peter Gillard-Moss、Rebecca Parsons、およびSimon Brunningが、社内メーリングリストでこれらのパターンの草案について議論しました。James Emmottは、タイトルに「置き換える」ことを提案しました。

カードのイラストで使用されている新旧のマンチェスターのトラムの写真は、Picasaによるもので、トリミングおよびカラー処理されています。

重要な改訂

2024年3月5日:イベントインターセプション

2022年7月7日:ソース公開に戻す

2022年3月28日:移行アーキテクチャの初回公開

2022年1月20日:フローの迂回

2022年1月19日:クリティカルアグリゲーター

2022年1月12日:レガシー模倣

2021年7月27日:フィーチャーパリティ

2021年7月21日:製品ラインの抽出

2021年7月20日:レガシー置換のパターンを公開