1. Map the systems and the fields. Every field that crosses a boundary gets an owner and a direction. Disagreements are settled on paper before code is written.
2. Test the API directly. We exercise the real API with an API client before building on it, and write down how it actually behaves, not just what the documentation promises.
3. Build for the bad day. Stable IDs, idempotent writes, reconciliation before retries, timeouts that fail safely, and credentials kept server-side.
4. Log everything that crosses a boundary. What was sent, what came back, and what we did about it, so a problem can be traced in minutes.
5. Hand over. A map of the integration, the log location, and a short runbook for the common failure cases.