当社の製品は分散システムです。私が取り組んでいるモジュールはかなり新しく、非常に厳密で、よくテストされています。これらは、最近のベスト プラクティスを念頭に置いて開発されました。その他のモジュールは、レガシー ソフトウェアと見なすことができます。
私は自分が担当しているモジュール内で発生するすべてのことに注意を払っていますが、他のモジュールから送信された不良データを処理するというプレッシャーに常にさらされています。本質的に、私は「フェイル ファスト」原則の開発者であり、その結果、問題が発生した場合、通常はモジュールのエラーの可能性を排除することができます。責めるということではなく、間違った場所でバグを追跡する無駄な労力を節約するだけです。
しかし、私が常に反対している議論は、「このようなものを本番環境で失敗させることはできません。顧客はこれが機能することを期待しています。この問題を回避してみませんか」というものです。そして、これは頑強さの議論になります。受け入れるものにはリベラルであり、送信するものには保守的であることです。
また、これらはほとんど断続的な問題であることにも注意してください。それらは統合テストで見られますが、再現するのは困難です。タイミングと並行性が関係しています。
2 つの原則のバランスをとるのに苦労しています。その理由の 1 つは、例外的なデータを許可して伝播し始めると、問題が発生し、自分のシステムにあまり自信が持てなくなるのではないかという心配です。しかし、他のモジュールが間違ったデータを送信している場合でも、システムを動作させ続けることに反対することはできません。他のモジュールが修正されていない理由は、それらが複雑すぎて壊れやすいためですが、私のモジュールはまだ明確で安全に見えます. しかし、私がプレッシャーに抵抗しなければ、私のモジュールは、私が今まで拒否してきたのと同じ問題をゆっくりと抱え込むことになります.
システムが本番環境で「クラッシュ」することはありませんが、モジュールが単にエラーをオペレータに表示し、サポートに連絡するように依頼する場合があります。クラッシュは大きな問題ですが、エラーを明確に報告しているのであれば、これは正しいことではないでしょうか? 私の同僚は、顧客に問題を見せたくないだけだと思います。しかし、私のモジュールは、顧客の入力ではなく、製品内の他のモジュールからのデータを拒否しています。ですから、私たちは問題に取り組んでいないだけのように思えます。
では、私はもっと現実的になる必要がありますか、それとも自分の立場を維持する必要がありますか?