Keep provider status strings out of UI components
Translate provider states at the integration boundary. Give the product an explicit unknown state instead of scattering external status checks through its interface.
Keep provider outcomes, pagination, caches, durable acceptance, and repairs explicit. Each guide gives a concrete reproduction, the resulting decision, and the limits of the evidence.
Translate provider states at the integration boundary. Give the product an explicit unknown state instead of scattering external status checks through its interface.
Translate upstream rate limits into a product contract. Distinguish a customer's quota from a shared provider limit and avoid exposing raw provider errors.
Nested SDK, transport, and worker retries can multiply attempts. Give one logical operation an effective retry budget and a deadline that every layer respects.
A timed-out request may already have committed. Preserve the operation identity and use a documented lookup or same-key retry contract to resolve the result.
A read that discovers drift should not accidentally become an unbounded repair job. Report an honest state and coordinate bounded reconciliation separately.
A page cursor belongs to an ordering, filter, and authorized scope. Version its format and reject incompatible reuse without mistaking encoding for authorization.
A database tenant policy cannot protect a cache entry returned before the query. Carry the complete identity scope into cache keys and invalidation.
Give every bulk item a stable identity and an explicit outcome. Distinguish atomic batches, independent writes, and unresolved results before designing retries.
Persist a verified webhook before acknowledging durable acceptance. Keep received and applied states separate so a crash cannot turn deduplication into lost work.
Separate repair planning from application. Show the selected records and proposed changes, then reject stale versions instead of applying an old preview blindly.