機能リクエストが届き、作業を開始するとします。これをfeature-1と呼びます。これは、アプリケーションにいくつかの新しいロジックを導入します。これをlogic-Aおよびlogic-Bと呼びます。プログラマーはリリースブランチから分岐し、機能の作業を開始します。
その後すぐに、feature-2と呼ばれる別の機能リクエストを受け取ります。 logic-Aおよびlogic-Cをアプリケーションに実装します。この機能によって実装されるlogic A)は、実装されたものと同じlogic-Aです。 infeature-1。
また、与えられたlogic-B、logic-Aは、与えられたものとは少し異なる方法で実装される可能性があるとしましょうlogic-C、およびlogic-Bとlogic-C(たとえば、機能が1つしかない場合、コードは両方の場合よりも柔軟性が低くなります)。
この状況はどのように処理する必要がありますか?
具体的な例(私の言い回しの混乱を助けるため)
状況は常に完全に予測できるとは限りません。変化にすばやく適応できることが、このアジャイルなもののすべてです。あなたはできるだけ早く顧客のために価値を解放したいと思っていますが、それはあなたがほとんどすぐに再設計を必要とすることがわかっているコードを作成することによってあなた自身を隅に追いやる必要があるという意味ではありません。
私があなたの例でfeature-2開発者だった場合、割り当てを受け取り、他の誰かがすでに同様のことに取り組んでいることを知ったとき、私は次のようになります。
Feature1で多くの作業が行われる前にfeature2が到着したと思います。それ以外の場合は、最初にfeature1を終了する必要があります。ただし、選択する余裕がある場合は...プロジェクトに追加する価値に基づいてfeature1とfeature2に優先順位を付けます。最初に追加する機能に役立つ方法でlogicAを追加します。少なくとも、別の機能にlogicAを使用することに注意することは問題ありませんが、気を悪くしないでください。最初の機能を終了すると、logicAは可能な限り最高の価値を獲得します(最も価値のある機能を優先したため)。必要に応じてlogicAをリファクタリングして、他の機能を実装します。これにより、最も早く最大の価値が得られます。
最初の機能をコーディングした後、logicAのリファクタリングのコストが高すぎるかどうかを判断し、より価値が高くならない限り2番目の機能を実行しない機会が得られます。あなたはlogicAについてもっと知っています。たぶん、logicAを再利用できないというあなたの恐れは根拠がありません。また、logicAの実装経験もあります。したがって、logicAをリファクタリングまたは完全に再設計する必要がある場合は、ユースケースの実際の知識がないという観点から考えられる用途向けにlogicAを設計しようとするのではなく、知識の観点から行うことができます。
これは、gitの質問というよりもプロジェクト管理の質問です。
2 [〜#〜]投資[〜#〜] ストーリーを作成するのが最善です:
次に、ストーリー2を計画する前に、スプリント/リリースでストーリー1を計画します。ストーリー2の作業は、ストーリー1が終了するまで開始できないため、ストーリー1が配信された後のリリースで計画する必要があります。ストーリー1はストーリー2の依存関係です。したがって、ストーリー1が何らかの理由で終了しない場合、ストーリー2はブロックされます。
したがって、ストーリー1がリリース1にならず、リリース2に移動した場合、ストーリー2をリリース3に移動する必要があります。これは、ストーリー1が実際に終了するまで続きます。
同じストーリーに共通のロジックを実装する必要がある理由。これは、実装時に、共通ロジックの開発中に予測していなかったエッジケースで実行されるためです。
実装せずに最初に共通ロジックを構築するだけでは、付加価値がないため、 [〜#〜] Investment [〜#〜] ではありません。このように作業すると、 オーバーエンジニアリング および機能の追加 必要ない のリスクが高まります。
両方の機能の開発中に依存関係が発見された場合。ベストプラクティスは、これらの機能の1つを障害物に置き、その機能の開発を一時停止することです。