我们的产品是一个分布式系统。我工作的模块是相当新的、相当严格的、经过良好测试的。它们的开发考虑了最近的最佳实践。其他模块可以被视为遗留软件。
虽然我对我负责的模块中发生的一切保持警惕,但我一直承受着处理从其他模块发送给我的不良数据的压力。本质上,我是一个“快速失败”的原则开发人员,因此,当出现问题时,我通常能够消除模块中出错的可能性。与其说是责备,不如说是为了避免在错误的地方追逐错误而浪费精力。
但我一直反对的论点是:“我们不能让这些东西在生产中失败,客户希望它能够工作,你为什么不解决这个问题”。这将是稳健性的一个论据:在你接受的东西上要自由,在你发送的东西上要保守。
我还应该注意,这些大多是间歇性问题。我们在集成测试中看到它们,但它们很难重现。涉及时间和并发性。
我很难在这两个原则之间取得平衡。部分原因是我担心如果我开始允许和传播异常数据,我会招来麻烦,而且我对我的系统不会有太大的信心。但是,即使其他模块向我发送了错误的数据,我也不能反对保持系统正常工作。其他模块没有得到修复的原因是它们太复杂和脆弱,而我的仍然看起来清晰和安全。但是,如果我不抗拒压力,我的模块将慢慢地背负我一直拒绝的相同问题。
我应该说系统在生产中没有“崩溃”,但我的模块可能只是向操作员显示错误并要求他们联系支持。崩溃将是一个大问题,但如果我清楚地报告错误,那么这不是正确的做法吗?我怀疑我的同行只是不希望客户看到任何问题。但是我的模块拒绝来自我们产品中其他模块的数据,而不是客户输入。所以在我看来,我们只是没有解决问题。
那么,我需要更加务实还是坚守自己的立场?