開発にマージされた機能が経営陣によって延期された場合はどうなりますか?


53

最近、Webアプリの機能(自動サインアップ)が管理者によって延期されるという問題が発生しました。彼らは、開始が「冷たすぎる」と感じていたが、彼らが取り組んでいた他のすべての機能を公開したかったためです。

問題は、この機能が次のリリースでライブをプッシュする予定の他のすべての機能と一緒に終了したときに開発にマージされたため、通常のようにdev-> test-> masterをマージできないことです。

この問題をどのように回避できたでしょうか?


あなたがそれをどのように解決したいかという観点に応じて、技術的な解決策を探していないなら、この質問は職場により適しています。
マラヴォス

回答:


74

1つのアプローチは、機能にフラグを立てることです。コードベースに存在することもできますが、構成により無効にできます。

もう1つのオプションは、機能のマージを元に戻すコミットを元に戻して、開発中でないようにすることです。復帰を元に戻す新しいブランチを作成し、後でマージするために保留のままにすることができます。Githubプルリクエストを使用している場合は、マージされたプルリクエストの[マージを元に戻す]ボタンを使用して簡単にこれを行うことができます。


9
構成フラグは、そのコードのテスト作業が2倍になることを意味しませんか?両方のパスをテストする必要があります。

16
この場合、本番環境ではそのフラグをオンにしないので、リリースのために今すぐオフケースをテストしてから、製品に移行する準備ができたらオンケースをテストできます。これは、復帰と再コミットのテストとほぼ同じ作業になるはずです。
アランシュトコ

4
一般的な用語はFeature Toggleです。小さな「機能エントリポイント」がある場合、これはおそらく管理者の決定後に行うことができます。そうでない場合、このメソッドと他のメソッドの両方で問題が発生します。
Doc Brown

3
Feature TogglingDoc Brownが呼んだように、6か月以上開発中の機能があり、それらはによって隠されています。これにより、非実稼働環境で機能(または機能の欠如)をテストすることもできます。これらの機能が既存の機能に追加される場合があります。その場合、古い機能セットと新しい機能セットの両方について単体テストを行う必要があります。各単体テストは、現在のテストを実行するために必要なものにフラグを設定するだけです。
ps2goat

25

この問題をどのように回避できたでしょうか?

プロセスの観点から、以下を把握します。

  • この作業を開始する意思決定者は誰でしたか?
  • この機能をリリースする決定が変更されたのはなぜですか?
    • 期待を逃しましたか?
    • 誤解?
    • ビジネスサポートが不十分ですか?
    • 顧客の関与はありませんか?

おそらく、途中でコミュニケーションが落ちていました。これが機能しない場合、開発プロセスはビジネス要件の誤った理解と誤った理解に基づいているため、これは重要です。


9
+10。管理者が機能のリリースを疑うようになったらすぐに、開発者に通知する必要がありました。そのため、機能を開発にマージすることを決定する際に削除の可能性を考慮することができました。
バートヴァンインゲンシェナウ

14
これはあまり建設的な答えではありません-時にはあらゆる理由で物事は横になります。確かに、後でマージするよりも早くマージするべきではないということが重要ですが、それは最終的に機能が最後に引き出されることを意味しません。契約の変更、顧客の支払い、法的問題などが発生する可能性があります。非難の指を指すのではなく、問題を管理する必要があります
-gbjbaanb

11
組織内に過失を認めるのに十分な力があり、過失を避けたくない幼稚な人が組織にいる場合でも、自分の情報については事後の問題を解決する必要があります。あなたはただ彼らに伝えたくない(あるいはそれをあまりにも明示的に書き留めたくない)。とは言っても、エンダーランドは「非難」という言葉を使用せず、組織がこのアドバイスを「誰が非難するかを見つける」と解釈する場合、それ自体が組織が取り組むべき問題です。これはすべて、「問題が発生した理由を理解する」ことであり、これは将来問題を回避するために不可欠です。
スティーブジェソップ

2
私はこれに完全に同意します。これは管理者の手間であり、開発者のものではありません。
durron597

3
@enderlandの私のポイントは、いくつかの問題を回避できないということです。そのため、状況を修復する方法を検討する必要があります。それほど頻繁には得られないことを願っていますが、遅かれ早かれ起こる可能性があるので、それに応じて計画してください。
gbjbaanb

19

経営陣の問題をしばらく忘れて、コードベースに深く統合された最新の製品リリースに既に「自動サインアップ機能」があったと想像してください。これで、「自動サインアップ」の「オフスイッチ」を追加する新しい要件が得られました。Gitワークフローでこれをどのように処理しますか?

「構成による自動サインアップの無効化」を単に追加機能として宣言することになると思うので(これは単なるFeature Toggleの形式です)、これはワークフローにスムーズに統合されるはずです。必要に応じて機能ブランチを使用できる場合(または、そのような問題に機能ブランチを使用しない場合)、労力を見積もることができます。そして、あなたが説明したusal "merge dev-> test-> master"フローを間違いなく使用できます。

それが実際にあなたの現在の状況でこれを処理できる方法です。gitワークフローの観点からは、変更要求がリリース1.0の管理者からのものであるか、変更要求がリリース2.0を希望する新しい顧客であるかは問題ではありません。


Fowlerの出力は非常に優れていますが、機能紹介のためにこの方法をサポートすることはできません。このようなスイッチの調整された努力は、不必要な負担のようです。私がすることができ、マージ後に機能を削除する機能のトグルを追加することが、要件の一部は私が不快になるように、スイッチで構築をサポート。
ガスドール

@Gusdor:私の編集をご覧ください。
Doc Brown

1

これは、gitflowとGitHubフローで私が抱えている正確な問題であり、Webアプリケーションではこれが頻繁に発生するようです。この問題を遡及的に解決するか(上記を参照)または先を見越して(下記の例を参照)解決するようです。

標準のgitflowブランチに加えて、「バンドルブランチ」を作成しました。バンドルは、uat / qaに対応するすべての機能で構成されています。uat / qa機能のリストが作成されます。これらは一時的なバンドルにマージされ、そのバンドルはuat / qaにデプロイされます。バグ修正はすべて元の機能ブランチで行われ、それがバンドルに再びマージされてデプロイされます。これにより、今後のリリースが分離され、開発ブランチへの道を見つける前にこれらの機能を一緒にテストできます。承認されたブランチは、gitflowプロセスに従ってプルリクエストを開発に取り込みます。テスト準備機能は、一時的なバンドルブランチに追加または削除して、再デプロイできます。

  • これにより、マスターは常に生産準備完了状態を反映します(フックで自動化できます)
  • Developは、常に最新の(およびテスト済みの)次のリリース候補を反映します

短所には、バンドルリストの管理と別のブランチタイプの追加が含まれます。しかし、手遅れだと思うレトロな修正に加えて、これはより実行可能な解決策のようです。

GUIアドオンでは、自動化を念頭に置いて、バンドルの展開ごとに機能ブランチをオフにすることが最適な場合があります。

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