[{"title": "Designing safe retries for third-party APIs", "url": "/posts/safe-retries-third-party-apis.html", "kind": "Post", "category": "Reliability", "date": "2026-04-28", "tags": ["retries", "idempotency", "timeouts"], "text": "Use idempotency keys per business operation. Separate network retries from semantic retries. Cap retry windows to protect downstream SLOs."}, {"title": "How we reduced webhook incident noise by 42%", "url": "/posts/reducing-webhook-noise.html", "kind": "Post", "category": "Operations", "date": "2026-04-27", "tags": ["webhooks", "alerts", "monitoring"], "text": "Classify transient vs persistent failures. Route incidents by ownership and impact. Tune alert thresholds with error budgets."}, {"title": "Migration checklist: API key to OAuth", "url": "/posts/migrating-api-key-to-oauth.html", "kind": "Post", "category": "Security", "date": "2026-04-26", "tags": ["oauth", "migration", "auth"], "text": "Map legacy permissions to OAuth scopes. Enable dual-mode auth during transition. Sunset old keys in staged waves."}, {"title": "Signature verification at scale", "url": "/posts/signature-verification-at-scale.html", "kind": "Post", "category": "Security", "date": "2026-04-25", "tags": ["webhooks", "security", "hmac"], "text": "Canonicalize payload consistently. Use constant-time compare for signatures. Enforce timestamp and nonce windows."}, {"title": "Building dead-letter queues that teams actually use", "url": "/posts/building-dead-letter-queues.html", "kind": "Post", "category": "Architecture", "date": "2026-04-24", "tags": ["queues", "replay", "operations"], "text": "Attach root-cause hints to each failed event. Provide one-click replay with audit logs. Set retention policies by severity."}, {"title": "Plugin SLAs and error budgets", "url": "/posts/plugin-sla-error-budgets.html", "kind": "Post", "category": "Operations", "date": "2026-04-23", "tags": ["slo", "error-budget", "governance"], "text": "Define SLOs by business-critical flow. Track budget burn by partner. Gate launches when debt rises."}, {"title": "Backfill jobs without triggering rate spikes", "url": "/posts/backfill-jobs-without-rate-spikes.html", "kind": "Post", "category": "Architecture", "date": "2026-04-22", "tags": ["rate-limit", "backfill", "queues"], "text": "Use adaptive worker pools. Throttle per-tenant backfill lanes. Pause low-priority workloads first."}, {"title": "Contract testing for third-party integrations", "url": "/posts/contract-testing-for-integrations.html", "kind": "Post", "category": "Quality", "date": "2026-04-21", "tags": ["testing", "contracts", "ci"], "text": "Version provider contracts clearly. Run provider and consumer checks in CI. Fail builds on schema drift."}, {"title": "Token rotation with zero downtime", "url": "/posts/token-rotation-with-zero-downtime.html", "kind": "Post", "category": "Security", "date": "2026-04-20", "tags": ["tokens", "rotation", "auth"], "text": "Use overlapping token validity windows. Automate dual-secret verification. Audit old token usage before revoke."}, {"title": "Progressive rollouts for connectors", "url": "/posts/progressive-rollouts-for-connectors.html", "kind": "Post", "category": "Operations", "date": "2026-04-19", "tags": ["rollout", "feature-flags", "release"], "text": "Ship by tenant cohorts. Track key health metrics per cohort. Provide instant rollback switches."}, {"title": "Schema evolution for event payloads", "url": "/posts/schema-evolution-for-events.html", "kind": "Post", "category": "Architecture", "date": "2026-04-18", "tags": ["schemas", "events", "compatibility"], "text": "Prefer additive changes first. Mark deprecated fields with timelines. Validate with replayed traffic."}, {"title": "Latency budgeting for plugin calls", "url": "/posts/latency-budgeting-for-plugin-calls.html", "kind": "Post", "category": "Performance", "date": "2026-04-17", "tags": ["latency", "performance", "slo"], "text": "Define hop-by-hop latency budgets. Fail fast when budgets are exhausted. Instrument p95 and tail spikes."}, {"title": "Sandbox environments that match prod", "url": "/posts/sandbox-environments-that-match-prod.html", "kind": "Post", "category": "Quality", "date": "2026-04-16", "tags": ["sandbox", "testing", "environments"], "text": "Mirror auth and webhook workflows. Seed realistic partner datasets. Automate sandbox drift checks."}, {"title": "Secrets management for plugin platforms", "url": "/posts/secrets-management-for-plugin-platforms.html", "kind": "Post", "category": "Security", "date": "2026-04-15", "tags": ["secrets", "vault", "compliance"], "text": "Store secrets in managed vaults. Rotate and revoke on schedule. Never log raw credential values."}, {"title": "Designing an ID mapping strategy", "url": "/posts/designing-id-mapping-strategy.html", "kind": "Post", "category": "Architecture", "date": "2026-04-14", "tags": ["mapping", "data", "consistency"], "text": "Use stable canonical IDs internally. Track partner IDs with versioned maps. Detect collisions proactively."}, {"title": "Handling partial failures cleanly", "url": "/posts/handling-partial-failures-cleanly.html", "kind": "Post", "category": "Reliability", "date": "2026-04-13", "tags": ["failures", "retries", "sagas"], "text": "Model compensating actions explicitly. Separate retriable from terminal errors. Surface degraded states in UI."}, {"title": "Multi-region disaster recovery for integrations", "url": "/posts/multi-region-dr-for-integrations.html", "kind": "Post", "category": "Reliability", "date": "2026-04-12", "tags": ["dr", "multi-region", "recovery"], "text": "Replicate queues and checkpoints. Practice region failover drills. Define RTO and RPO targets."}, {"title": "Cost guardrails for API usage", "url": "/posts/cost-guardrails-for-api-usage.html", "kind": "Post", "category": "Operations", "date": "2026-04-11", "tags": ["cost", "quotas", "governance"], "text": "Set budget alerts by connector. Throttle non-critical syncs under pressure. Tag spend by product surface."}, {"title": "Choosing the right auth model", "url": "/guides/auth-models.html", "kind": "Guide", "category": "Security", "date": "2026-04-10", "tags": ["auth", "oauth", "tokens"], "text": "Choose auth by delegation model. Use scoped permissions by default. Keep revocation pathways simple."}, {"title": "Webhook reliability blueprint", "url": "/guides/webhook-reliability.html", "kind": "Guide", "category": "Reliability", "date": "2026-04-09", "tags": ["webhooks", "retries", "idempotency"], "text": "Design for at-least-once delivery. Build replay-safe handlers. Preserve event ordering where required."}, {"title": "Rate-limit and backpressure control", "url": "/guides/rate-limit-control.html", "kind": "Guide", "category": "Performance", "date": "2026-04-08", "tags": ["rate-limit", "queues", "backpressure"], "text": "Apply per-tenant token buckets. Use bounded queues for pressure control. Scale workers with saturation signals."}, {"title": "OAuth migration playbook", "url": "/guides/oauth-migration-playbook.html", "kind": "Guide", "category": "Security", "date": "2026-04-07", "tags": ["oauth", "migration", "runbook"], "text": "Plan phased customer cutovers. Track adoption and fallback health. Retire legacy keys in waves."}, {"title": "Plugin observability checklist", "url": "/guides/plugin-observability-checklist.html", "kind": "Guide", "category": "Operations", "date": "2026-04-06", "tags": ["observability", "metrics", "tracing"], "text": "Track request lifecycle metrics. Correlate logs with trace IDs. Alert on error-rate anomalies."}, {"title": "Incident response runbook", "url": "/guides/incident-response-runbook.html", "kind": "Guide", "category": "Operations", "date": "2026-04-05", "tags": ["incidents", "runbook", "postmortem"], "text": "Triage with impact-first framing. Coordinate mitigations by owner. Close with prevention actions."}, {"title": "Connector security baseline", "url": "/guides/connector-security-baseline.html", "kind": "Guide", "category": "Security", "date": "2026-04-04", "tags": ["security", "secrets", "hardening"], "text": "Use least-privilege service accounts. Enforce signed webhook payloads. Rotate secrets on strict cadence."}, {"title": "Event versioning guide", "url": "/guides/event-versioning-guide.html", "kind": "Guide", "category": "Architecture", "date": "2026-04-03", "tags": ["events", "versioning", "compatibility"], "text": "Adopt explicit schema version fields. Support parallel versions temporarily. Publish deprecation timelines clearly."}, {"title": "Integration testing pyramid", "url": "/guides/integration-testing-pyramid.html", "kind": "Guide", "category": "Quality", "date": "2026-04-02", "tags": ["testing", "qa", "ci"], "text": "Unit test transformation logic. Use contract tests for boundaries. Run end-to-end smoke tests."}, {"title": "Tenant isolation patterns", "url": "/guides/tenant-isolation-patterns.html", "kind": "Guide", "category": "Architecture", "date": "2026-04-01", "tags": ["multi-tenant", "security", "data"], "text": "Separate credentials per tenant. Enforce row-level authorization. Limit cross-tenant blast radius."}, {"title": "Operational readiness checklist", "url": "/guides/operational-readiness-checklist.html", "kind": "Guide", "category": "Operations", "date": "2026-03-31", "tags": ["operations", "readiness", "slo"], "text": "Define on-call ownership clearly. Document rollback and DR paths. Track launch gating criteria."}, {"title": "Integration lifecycle governance", "url": "/guides/integration-lifecycle-governance.html", "kind": "Guide", "category": "Governance", "date": "2026-03-30", "tags": ["governance", "lifecycle", "compliance"], "text": "Establish intake and review gates. Audit integrations quarterly. Retire stale connectors safely."}]