01
Scope
Decide what sync means for each record type
Sync may mean importing a user-selected profile, showing a conversation beside a contact, proposing a company update, or reflecting an accepted relationship. These are separate contracts with different sensitivity and failure modes. DewEngine's target catalog includes profiles, companies, relations, chats, and messages, but none is implemented for LinkedIn. Start with an explicit field and direction matrix instead of promising a universal two-way sync.
- Name the source of truth for every field
- Mark each flow as one-time import, observation, or maintained projection
02
Identity
Map provider identities without collapsing tenants
A provider-scoped profile identifier should be namespaced by the connected account and retained separately from the CRM contact key. The same person can appear in multiple customer workspaces with different relationships and permissions. Email, name, or profile URL alone should not authorize a merge. Store the evidence for each link and require review when a source identifier conflicts with an existing customer record.
- Make cross-workspace identity joins impossible by construction
- Keep manual unlink and split operations available
03
Conflict policy
Protect human-maintained CRM truth
A newer observation is not automatically a better business value. A visible job title might be current while the CRM's account owner, lifecycle stage, legal basis, and notes remain customer-controlled. Define precedence for each field and show proposed changes before overwriting curated data. For multi-value facts such as roles or companies, consider preserving history rather than forcing one source into a single slot.
- Never overwrite ownership or consent from provider context
- Record both values when a conflict cannot be resolved mechanically
04
Incremental flow
Use resumable observations and honest coverage
A production connector would need a durable cursor or equivalent provider contract, deduplication, partial backfill state, retry boundaries, and account health. Missing pages, permission loss, or an expired session must not be interpreted as deletion. Expose when coverage is incomplete and keep the last confirmed CRM projection visible while repair runs. Events should advance state idempotently rather than trigger full unbounded polling.
- Persist progress before requesting the next page
- Differentiate stale, missing, deleted, and inaccessible states
05
Workflow control
Keep data synchronization separate from outbound action
A profile or relationship update can improve context without enrolling anyone in outreach. Campaign membership, invitation eligibility, and message approval must use their own customer rules at the moment of action. If an inbound reply appears, the CRM can pause automation without rewriting the source conversation. This separation limits blast radius and lets read-only value ship independently if provider authorization permits only a narrower surface.
- Do not trigger sends from field-change events alone
- Carry conversation ownership and suppression into every action decision
06
Acceptance
Prove reversibility, privacy, and stop behavior
Tests should cover duplicate contacts, shared companies, rebrands, wrong merges, concurrent edits, partial history, deleted CRM records, account disconnect, retention expiry, export, and workspace deletion. Legal and provider authorization must clear before LinkedIn implementation or sale. A reviewer should be able to trace every synchronized value, undo it safely, and confirm that revoked access stops new collection without corrupting existing customer records.
- Run tenant-isolation and identity-substitution tests
- Demonstrate deletion from normalized data, raw observations, and caches