Find the source of truth for each field
Begin with a small record type, such as a customer or order, and list where each field is created and edited. One system may own the customer name while another owns a fulfillment status. Saying that one application is the source of truth for everything is often too coarse.
Identify the reason for each manual copy. Sometimes the second entry is actually a review or approval. Removing it without replacing that control can change the process in a way nobody intended.
Agree on the exchange contract
A field mapping is necessary, but it is not the complete integration design.
- Record key: how is the same item recognized in both systems?
- Direction: which system may change each field?
- Validation: what happens to missing or unsupported values?
- Timing: how quickly must a change arrive?
- Replay: what prevents retries from creating duplicates?
- Recovery: who resolves rejected records and reconciles totals?
Treat a retry as an ordinary event
Networks fail and systems become unavailable. Use a stable identifier to recognize an operation that has already succeeded. A timeout can occur after the destination accepted a record, so blindly creating it again may produce a duplicate.
Keep a visible queue for records that need review. Log enough context to diagnose the problem without copying unnecessary personal data into logs. Reconciliation should compare the records and states expected on both sides, not merely count successful requests.
Pilot one direction before adding complexity
Test a representative set of records and the failure cases before increasing volume. Bidirectional updates add conflict-resolution questions, so introduce them only when the workflow actually requires them.
Measure reductions in rekeying and correction effort, while checking that records remain accurate. Maintain a documented fallback and a responsible owner for interface changes. An integration is an operating dependency, not a one-time cable between two applications.
