Circular dependencies rarely announce themselves as circles on a whiteboard. They show up as deploy order arguments, as staging environments that only pass when services start in a lucky sequence, and as on-call threads where two teams each wait for the other to ‘fix their side.’
During service dependency mapping we look for mutual synchronous calls, shared databases that both sides write as if they owned them, and feature flags that paper over missing contracts. Staging hides many of these because traffic shapes differ and because teams restart stacks together.
Untangling starts with ownership of the shared fact — the record, the event, or the decision — not with drawing a prettier box. One team becomes the writer; the other becomes a reader or an asynchronous consumer. That decision is often social before it is technical.
Pre-release architecture reviews are a good moment to force the question while calendars still have room. Waiting until production shows a deadlock is a more expensive teaching method.