Built to Fail: Design Patterns for Resilient Data Pipelines