私の会社は、サポートにお金を払っている大規模な組織にオンサイトでインストールされたアプリケーションのコンテキストで、メンテナンス リリースと「通常の」リリースの問題に苦しんでいます。まず、私の用語を定義させてください。
- 製品のバージョン 1.0、1.1、および 1.2 をリリースしたとします。これらは、私が「通常の」リリースと呼んでいるものです。つまり、開発のメイン ブランチからの次のリリースであり、最新かつ最高のバグ修正と機能強化がすべて組み込まれています (リリースごとにそれぞれ数十もの可能性があります)。
- ここで、1.0 の大物顧客が、これまで誰も遭遇したことのないショーストップの問題を報告したと想像してください。この問題は 1.2 にもまだ存在しており、残念ながら 1.3 は数週間または数か月でリリースされません。そこで、コードを 1.0 で分岐して、問題を修正する 1 つの変更だけを含む1.0.1 の「メンテナンス」リリースを作成します。
このアプローチでは、次の通常のリリースまで数週間待たせる代わりに、1 日ほどで問題を修正できるため、お客様は満足しています。また、メンテナンス リリースには小さな変更が 1 つしか含まれていないため、大規模な UAT プロセスを実行する必要はありませんが、次の通常のリリースにアップグレードする場合は、いくつかのバージョンが含まれている可能性があり、おそらく 30 または 40 を受け取ることになります。 (彼らのリスク回避的な意見では) 大規模な UAT を必要とする製品の変更。
問題はそれです:
- ソフトウェアの複数のバージョンを作成してサポートするにはコストがかかります
- これにより、泥沼に固執する顧客が最新バージョンから大幅に遅れることができます
- インストールが他のすべての 1.0 の顧客と微妙に異なるため、これらの顧客を将来最終的にアップグレードするプロセスが複雑になります (データベースのアップグレードは、メンテナンス リリースで何らかの形で変更された場合に特に複雑になります)。
それで、この問題に対する他の人たちのスタンスはどうなのかと思っていましたか? メンテナンス リリースの急増によって自分自身の背中のためにロッドを作成せずに、どうすれば顧客を満足させ続けることができますか? たとえば、一部のカテゴリの修正をメンテナンス リリースとして実行することを許可しますが、他の種類の修正は次の通常のリリースで実行することを主張しますか?
明確化: バグのないソフトウェアを書くことは完全な解決策ではありません。なぜなら、上記の文脈における「問題」は、私たちの製品が依存する外部システムの動作に対する予測不可能な変化である可能性があるからです。