アプリケーションの新しいメジャーバージョンを開始するが、古いバージョンを「有効」に保つ方法


8

AとBという2つのアプリケーションがあります。これらのアプリケーションの現在のバージョンは7.xです(7.1を実行している顧客もいれば、7.2を実行している顧客もいます)。両方のアプリケーションは、次のように同じ共通フレームワーク(これをCと呼びます)を使用します。

+---+ +---+
| A | | B |
+---------+
|    C    |
+---------+

重要な新規顧客がいるため、AとBの機能を1つの大きなアプリケーションにしたいと考えています。AとBを1つのアプリケーションにマージすることは不可能なので、今はAの機能をBに統合しようとしています。これまでのところ良好ですが、いくつかの問題が発生し始めています。

まず、Bの基本機能のみを使用する顧客は、追加されたAのすべての新機能に関心がない(そして、追加のオーバーヘッドが発生する)。彼らは、新しいWindowsバージョンをサポートしてバージョンBをアップグレードしたいだけで、C(共通フレームワーク)に追加されたすべての優れた機能も望んでいるだけです。

次に、現在アプリケーションAを使用している顧客は、アプリケーションBに直接移動したくありませんが、A + Bの機能を組み合わせることで、長期的には役立ちます。アップグレードを簡単にするために、彼らはAを使い続けたいと思っています。

3番目に、Bで行っているすべての開発は、Bのモジュールのパフォーマンスを向上させるために共通層CEgに影響を与える可能性があるため、Cのモジュールをリファクタリングする必要がありますが、CはAでも使用されているため、もっと多くの仕事をする必要があります。さらに、Aは古い、あまり構造化されていないアプリケーションであり、Cのすべての変更はAをより不安定にする可能性があります。

問題はどのように進めるかです。私は現在、7.xリリースでBを分割することを考えています(必要に応じて、ここでいくつかのマイナーな開発とリリース7.3、7.4を今後数年で行うことができます)、および8.xリリース(すべての新機能が含まれます)。 。共通層の問題を解決するために、Cを古いC(7.x)と新しいC(8.x)に分割することもできます。これにより、次の結果が得られます。

+-------+ +-------+  +-------+
| A 7.x | | B 7.x |  | B 8.x |
+-----------------+  +-------+
|      C 7.x      |  | C 8.x |
+-----------------+  +-------+

アプリケーションAはもう進化せず、7.xバージョンの共通レイヤーCに固執します。

Cを分割するとは、Cでのすべての開発が古いAとB(まだリリース7.xである)では見られないか、AとBのリリース7.xで行う必要がある場合は、両方のリリースでの開発。

BをB 7.xとB 8.xに分割することもできますが、これはCでのリファクタリングの可能性を制限し、実際には最初の2つの問題のみを解決します。

誰かがそのようなメジャーリリースの変更について何か経験がありますか?他のアイデアは?


3
7.xバージョンのマイナーアップデートとバグ修正のみを行うつもりであれば、最後の提案は問題ないようです。次に、7.xを段階的に廃止する予定であり、追加の機能が必要な場合は8.xに移行する必要があることを顧客に伝えます。8.xでは、機能のモジュールを構成(場合によっては個別に販売)します。最初は2つで、AとBの機能に非常によく似ています。技術的には、今後は2つの別々のコードベースを維持します。
Jan Doggen

回答:


3

まず、Bの基本機能のみを使用する顧客は、追加されたAのすべての新機能に関心がない(そして、追加のオーバーヘッドが発生する)。

これは通常、ユーザーインターフェースの問題のみです。Aの機能を組み合わせたアプリケーション「B 8.x」に組み込みますが、UIレベルでBのユーザーに表示されないように分離します。「A顧客」に対してのみA機能をアクティブ化できるように、アプリケーションにスイッチを組み込みます。おそらく、Aの顧客に対してBの機能を非表示にする別のスイッチが必要です(これにより、Bの機能を別のモジュールとして販売することもできます)

次に、現在アプリケーションAを使用している顧客は、アプリケーションBに直接移動したくありませんが、A + Bの機能を組み合わせることで、長期的には役立ちます。

次の2つの点に注意を払えば、これは問題にならないと思います。

  • 「B 8.x」の「A機能」のユーザーインターフェイスを、A 7.xと比べてあまり変わらないように設計する方法を見つける
  • これらのAのお客様に、A 7.xからA 7.(x + 1)と同じ価格でB 8.xへの移行を提供します。または、B機能を無効にして "B 8.x"を "A 7.(x + 1)"としてAの顧客に宣言します(フォローアップに名前を付ける方法は契約の問題になる可能性があるため、これを確認する必要があります)。

最後に、この方法でAカスタマーをB 8.xに移行できれば、3番目の問題は自動的に解決されます。

追加すべきことの1つ:約15年前に非常に似た状況にあったアプリケーションを維持しています(「A 7.x」はMS DOSプログラムであり、「B 7.x」は多くの新機能を備えたWindowsプログラムでした、および「B 8.x」には、以前の「A 7.x」機能がBに統合され、別個のモジュールとして販売された、両方の先行バージョンのすべての機能が含まれていました。MS DOSの顧客が10年以上いないので、移行にはまったく問題がなかったと言っても、驚くことはありません。

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