<?xml version='1.0' encoding='UTF-8'?>
<mxfile host="app.diagrams.net" agent="nishtnr Architecture Design System" version="24.7.17" type="device">
  <diagram id="NR-007-v1-1" name="Integration is a choice of contract">
    <mxGraphModel dx="1440" dy="840" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1440" pageHeight="840" math="0" shadow="0" background="#FFFFFF">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
        <mxCell id="page-white" parent="1" vertex="1" style="rounded=0;strokeColor=none;fillColor=#FFFFFF;" value="">
          <mxGeometry x="0" y="0" width="1440" height="840" as="geometry"/>
        </mxCell>
        <mxCell id="header-id" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#325C72;fontSize=15;fontStyle=1;spacing=0;" value="NR-007   /   ARCHITECTURE REFERENCE">
          <mxGeometry x="70" y="24" width="900" height="26" as="geometry"/>
        </mxCell>
        <mxCell id="title" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#233640;fontSize=32;fontStyle=1;spacing=0;" value="Integration is a choice of contract">
          <mxGeometry x="70" y="60" width="1300" height="46" as="geometry"/>
        </mxCell>
        <mxCell id="dek" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=17;fontStyle=0;spacing=0;" value="APIs, events and batch/CDC solve different interaction problems. Choose deliberately.">
          <mxGeometry x="70" y="111" width="1300" height="44" as="geometry"/>
        </mxCell>
        <mxCell id="header-rule" parent="1" vertex="1" style="strokeColor=none;fillColor={RULE};" value="">
          <mxGeometry x="70" y="166" width="1300" height="1" as="geometry"/>
        </mxCell>
        <mxCell id="api" parent="1" vertex="1" style="rounded=1;arcSize=5;fillColor=#FBFCFD;strokeColor=#DDE5EB;strokeWidth=1.35;" value="">
          <mxGeometry x="70" y="229" width="410" height="420" as="geometry"/>
        </mxCell>
        <mxCell id="api-label" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#325C72;fontSize=15;fontStyle=1;spacing=0;" value="SYNCHRONOUS API">
          <mxGeometry x="90" y="247" width="370" height="23" as="geometry"/>
        </mxCell>
        <mxCell id="api-sub" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=14;fontStyle=0;spacing=0;" value="When the caller needs an immediate answer">
          <mxGeometry x="90" y="274" width="370" height="23" as="geometry"/>
        </mxCell>
        <mxCell id="event" parent="1" vertex="1" style="rounded=1;arcSize=5;fillColor=#FBFCFD;strokeColor=#DDE5EB;strokeWidth=1.35;" value="">
          <mxGeometry x="516" y="229" width="410" height="420" as="geometry"/>
        </mxCell>
        <mxCell id="event-label" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#325C72;fontSize=15;fontStyle=1;spacing=0;" value="ASYNCHRONOUS EVENT">
          <mxGeometry x="536" y="247" width="370" height="23" as="geometry"/>
        </mxCell>
        <mxCell id="event-sub" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=14;fontStyle=0;spacing=0;" value="When state changes should be disseminated">
          <mxGeometry x="536" y="274" width="370" height="23" as="geometry"/>
        </mxCell>
        <mxCell id="batch" parent="1" vertex="1" style="rounded=1;arcSize=5;fillColor=#FBFCFD;strokeColor=#DDE5EB;strokeWidth=1.35;" value="">
          <mxGeometry x="962" y="229" width="410" height="420" as="geometry"/>
        </mxCell>
        <mxCell id="batch-label" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#325C72;fontSize=15;fontStyle=1;spacing=0;" value="BATCH / CDC">
          <mxGeometry x="982" y="247" width="370" height="23" as="geometry"/>
        </mxCell>
        <mxCell id="batch-sub" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=14;fontStyle=0;spacing=0;" value="When a dataset or change stream must move">
          <mxGeometry x="982" y="274" width="370" height="23" as="geometry"/>
        </mxCell>
        <mxCell id="edge-0" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;rounded=0;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#8294A3;strokeWidth=2.25;endArrow=block;endFill=1;endSize=9;dashed=0;" edge="1" parent="1" source="a1" target="a2" value="">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="edge-1" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;rounded=0;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#8294A3;strokeWidth=2.25;endArrow=block;endFill=1;endSize=9;dashed=0;" edge="1" parent="1" source="v1" target="v2" value="">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="edge-2" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;rounded=0;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#8294A3;strokeWidth=2.25;endArrow=block;endFill=1;endSize=9;dashed=0;" edge="1" parent="1" source="c1" target="c2" value="">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="a1" parent="1" vertex="1" style="rounded=1;arcSize=13;html=1;whiteSpace=wrap;shadow=0;fillColor=#F4F6F8;strokeColor=#B6C3D0;strokeWidth=1.65;fontColor=#233640;fontFamily=Arial;fontSize=18;align=center;verticalAlign=middle;spacing=7;" value="&lt;div style=&quot;font-size:18px;font-weight:600;line-height:1.25;&quot;&gt;Caller&lt;/div&gt;&lt;div style=&quot;font-size:14px;color:#586B77;line-height:1.5;margin-top:8px;&quot;&gt;Request&lt;/div&gt;">
          <mxGeometry x="96" y="329" width="147" height="93" as="geometry"/>
        </mxCell>
        <mxCell id="a2" parent="1" vertex="1" style="rounded=1;arcSize=13;html=1;whiteSpace=wrap;shadow=0;fillColor=#E6F5F4;strokeColor=#68B7B5;strokeWidth=1.65;fontColor=#233640;fontFamily=Arial;fontSize=18;align=center;verticalAlign=middle;spacing=7;" value="&lt;div style=&quot;font-size:18px;font-weight:600;line-height:1.25;&quot;&gt;Capability&lt;/div&gt;&lt;div style=&quot;font-size:14px;color:#586B77;line-height:1.5;margin-top:8px;&quot;&gt;Response&lt;/div&gt;">
          <mxGeometry x="295" y="329" width="158" height="93" as="geometry"/>
        </mxCell>
        <mxCell id="v1" parent="1" vertex="1" style="rounded=1;arcSize=13;html=1;whiteSpace=wrap;shadow=0;fillColor=#E6F5F4;strokeColor=#68B7B5;strokeWidth=1.65;fontColor=#233640;fontFamily=Arial;fontSize=18;align=center;verticalAlign=middle;spacing=7;" value="&lt;div style=&quot;font-size:18px;font-weight:600;line-height:1.25;&quot;&gt;Producer&lt;/div&gt;&lt;div style=&quot;font-size:14px;color:#586B77;line-height:1.5;margin-top:8px;&quot;&gt;Committed event&lt;/div&gt;">
          <mxGeometry x="542" y="329" width="147" height="93" as="geometry"/>
        </mxCell>
        <mxCell id="v2" parent="1" vertex="1" style="rounded=1;arcSize=13;html=1;whiteSpace=wrap;shadow=0;fillColor=#F0EAF9;strokeColor=#A98AD3;strokeWidth=1.65;fontColor=#233640;fontFamily=Arial;fontSize=18;align=center;verticalAlign=middle;spacing=7;" value="&lt;div style=&quot;font-size:18px;font-weight:600;line-height:1.25;&quot;&gt;Subscriber&lt;/div&gt;&lt;div style=&quot;font-size:14px;color:#586B77;line-height:1.5;margin-top:8px;&quot;&gt;Independent handling&lt;/div&gt;">
          <mxGeometry x="741" y="329" width="158" height="93" as="geometry"/>
        </mxCell>
        <mxCell id="c1" parent="1" vertex="1" style="rounded=1;arcSize=13;html=1;whiteSpace=wrap;shadow=0;fillColor=#F4F6F8;strokeColor=#B6C3D0;strokeWidth=1.65;fontColor=#233640;fontFamily=Arial;fontSize=18;align=center;verticalAlign=middle;spacing=7;" value="&lt;div style=&quot;font-size:18px;font-weight:600;line-height:1.25;&quot;&gt;Source&lt;/div&gt;&lt;div style=&quot;font-size:14px;color:#586B77;line-height:1.5;margin-top:8px;&quot;&gt;Rows / changes&lt;/div&gt;">
          <mxGeometry x="988" y="329" width="147" height="93" as="geometry"/>
        </mxCell>
        <mxCell id="c2" parent="1" vertex="1" style="rounded=1;arcSize=13;html=1;whiteSpace=wrap;shadow=0;fillColor=#F0EAF9;strokeColor=#A98AD3;strokeWidth=1.65;fontColor=#233640;fontFamily=Arial;fontSize=18;align=center;verticalAlign=middle;spacing=7;" value="&lt;div style=&quot;font-size:18px;font-weight:600;line-height:1.25;&quot;&gt;Consumer&lt;/div&gt;&lt;div style=&quot;font-size:14px;color:#586B77;line-height:1.5;margin-top:8px;&quot;&gt;Sync / transform&lt;/div&gt;">
          <mxGeometry x="1187" y="329" width="158" height="93" as="geometry"/>
        </mxCell>
        <mxCell id="note-0" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=16;fontStyle=0;spacing=0;" value="Design for latency, timeouts, retries &amp; idempotency.">
          <mxGeometry x="96" y="476" width="340" height="32" as="geometry"/>
        </mxCell>
        <mxCell id="note-1" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=16;fontStyle=0;spacing=0;" value="Design for contracts, replay, ordering &amp; duplicates.">
          <mxGeometry x="542" y="476" width="340" height="32" as="geometry"/>
        </mxCell>
        <mxCell id="note-2" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=16;fontStyle=0;spacing=0;" value="Design for freshness, volume, drift &amp; reconciliation.">
          <mxGeometry x="988" y="476" width="340" height="32" as="geometry"/>
        </mxCell>
        <mxCell id="note-3" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#233640;fontSize=18;fontStyle=1;spacing=0;" value="Often the right answer is a composition: APIs for commands, events for change, CDC for data movement.">
          <mxGeometry x="71" y="686" width="1180" height="32" as="geometry"/>
        </mxCell>
        <mxCell id="footer-rule" parent="1" vertex="1" style="strokeColor=none;fillColor={RULE};" value="">
          <mxGeometry x="70" y="773" width="1300" height="1" as="geometry"/>
        </mxCell>
        <mxCell id="footer-brand" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#325C72;fontSize=13;fontStyle=1;spacing=0;" value="nishantr  ·  nishantr.tech">
          <mxGeometry x="70" y="790" width="730" height="26" as="geometry"/>
        </mxCell>
        <mxCell id="footer-meta" parent="1" vertex="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Arial;fontColor=#586B77;fontSize=12;fontStyle=0;spacing=0;" value="NR-007  •  v1.1  •  REFERENCE / ILLUSTRATIVE">
          <mxGeometry x="930" y="790" width="440" height="26" as="geometry"/>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
