緊急事態
時には、できるだけ早く全体のコードレビュープロセスを通過する必要がある緊急CLがあります。
緊急事態とは何ですか?
緊急事態のCLは、以下のような小さな変更です:メジャーローンチをロールバックせずに続行できるようにする、本番環境のユーザーに重大な影響を与えるバグを修正する、緊急の法的問題を処理する、重大なセキュリティホールを閉じるなどです。
緊急事態では、コードレビュー全体のスピードに本当に気を使います。ただし、レビュアーのスピードだけでなく、コードの正確性(緊急事態を解決するかどうか)についても、他の何よりも重視すべきです。また、(おそらく明らかですが)このようなレビューは、発生した場合には他のすべてのコードレビューよりも優先されるべきです。
ただし、緊急事態が解決された後は、緊急事態のCLを再度見直し、より詳細なレビューを行う必要があります。
緊急ではないものは何ですか?
明確に述べると、以下の場合は_緊急ではありません_:
- 来週ではなく今週にローンチしたいということ(ただし、パートナーとの合意など、実際の厳しい締切がある場合を除く)。
- 開発者が長い時間をかけて機能を開発し、CLを取得したいと思っている場合。
- レビューアーが現在夜間である別のタイムゾーンにいるか、オフサイトで不在である場合。
- 金曜日の終わりであり、開発者が週末に出発する前にこのCLを取得するのが良いと思われる場合。
- マネージャーが、ソフト(厳しいではない)締切のため、このレビューを完了し、CLを今日中にチェックインする必要があると言っている場合。
- テストの失敗やビルドの破損を引き起こしているCLをロールバックする場合。
などなど。
ハードデッドラインとは何ですか?
ハードデッドラインとは、もしもそれを逃すと何か災害的なことが起こるというものです。例えば:
- 特定の日までにCLを提出することは契約上の義務です。
- 特定の日までに製品をリリースしなければ、市場で完全に失敗します。
- 一部のハードウェアメーカーは年に一度しか新しいハードウェアを出荷しません。彼らにコードを提出する期限を逃すと、提出しようとしているコードの種類によっては、それが災害的な結果をもたらす可能性があります。
リリースを1週間遅らせることは災害的ではありません。重要な会議を逃すことは災害的かもしれませんが、しばしばそうではありません。
ほとんどの締め切りは、ハードデッドラインではなく、ソフトデッドラインです。それらは特定の時間までに機能が完了することを望んでいます。重要ですが、それを達成するためにコードの品質を犠牲にするべきではありません。
リリースサイクルが長い(数週間)場合、次のサイクルの前に機能を追加するためにコードレビューの品質を犠牲にすることは誘惑されるかもしれません。しかし、このパターンは、プロジェクトが圧倒的な技術的負債を蓄積する一般的な方法です。開発者がサイクルの終わり近くに「絶対に入れなければならない」という理由だけで表面的なレビューだけでCLを提出し続ける場合、チームはプロセスを変更して、大規模な機能変更がサイクルの初めに行われ、十分な時間があるようにすべきです。