<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joni Collinge</title>
    <description>The latest articles on DEV Community by Joni Collinge (@joni_collinge_fb2fb5b75f9).</description>
    <link>https://dev.to/joni_collinge_fb2fb5b75f9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4171441%2F03dd76a8-423b-424b-b86f-59522ef5ba2e.png</url>
      <title>DEV Community: Joni Collinge</title>
      <link>https://dev.to/joni_collinge_fb2fb5b75f9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joni_collinge_fb2fb5b75f9"/>
    <language>en</language>
    <item>
      <title>What Does Durable Execution Guarantee, and Where Does It Stop?</title>
      <dc:creator>Joni Collinge</dc:creator>
      <pubDate>Tue, 03 Nov 2026 10:11:41 +0000</pubDate>
      <link>https://dev.to/joni_collinge_fb2fb5b75f9/what-does-durable-execution-guarantee-and-where-does-it-stop-48eh</link>
      <guid>https://dev.to/joni_collinge_fb2fb5b75f9/what-does-durable-execution-guarantee-and-where-does-it-stop-48eh</guid>
      <description>&lt;p&gt;Durable execution guarantees that a workflow's &lt;strong&gt;completed steps&lt;/strong&gt; survive a crash and do not run again, so during a failure or restart, the workflow picks up from that last recorded step. It does not guarantee that a step runs exactly once and therefore it won't mitigate bad business logic.&lt;/p&gt;

&lt;p&gt;Think of a delivery company with ten packages to deliver that day. The driver successfully delivers four and records each one in their delivery log, but on the way to the fifth delivery, their vehicle breaks down. A replacement driver is dispatched to take over. They don't need to start from the first delivery; they know which four packages have already been delivered because it's in the log, and they can continue with the remaining six.&lt;/p&gt;

&lt;p&gt;In Dapr Workflow, that log is the workflow history. The workflow can safely replay, and for each completed activity, the engine returns the stored result instead of scheduling it again. If the node hosting a workflow crashes, a reminder reactivates it and execution carries on. Durable timers survive restarts too, whether the wait is minutes or months.&lt;/p&gt;

&lt;p&gt;The durable execution guarantees stop at the last entry. An activity that was running when the process died has no completed entry, so it runs again. The Dapr docs say each activity executes at least once and recommend idempotent activity logic. For a payment or an email, that means an idempotency key or a check before you act.&lt;/p&gt;

&lt;p&gt;Durable execution protects your progress, not your business logic. If there's a bug in your workflow, replay won't fix it. It'll just carry on making the same mistake.&lt;/p&gt;

&lt;p&gt;In practice, treat the workflow history as the guarantee and every side effect as your responsibility to handle.&lt;/p&gt;

&lt;p&gt;Diagrid's FAQ covers the limits in more detail: &lt;a href="https://www.diagrid.io/faq/durable-execution" rel="noopener noreferrer"&gt;https://www.diagrid.io/faq/durable-execution&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dapr</category>
      <category>sre</category>
      <category>distributedsystems</category>
      <category>durableexecution</category>
    </item>
    <item>
      <title>Why Does a Workflow That Runs Forever Need Continue-as-New?</title>
      <dc:creator>Joni Collinge</dc:creator>
      <pubDate>Thu, 22 Oct 2026 08:40:33 +0000</pubDate>
      <link>https://dev.to/joni_collinge_fb2fb5b75f9/why-does-a-workflow-that-runs-forever-need-continue-as-new-1mdl</link>
      <guid>https://dev.to/joni_collinge_fb2fb5b75f9/why-does-a-workflow-that-runs-forever-need-continue-as-new-1mdl</guid>
      <description>&lt;p&gt;Short answer: a Dapr workflow's history only grows, and continue-as-new is the operation that starts it again with an empty one.&lt;/p&gt;

&lt;p&gt;The hard part is that the history is also how the workflow survives. Dapr Workflow keeps an append-only log of every step and replays it to rebuild state after a restart. For a ten-step workflow that costs nothing. For a monitoring workflow written as a while (true) loop that checks something every five minutes, every cycle adds entries, and every replay reads all of them.&lt;/p&gt;

&lt;p&gt;Continue-as-new restarts the workflow with a new input and a fresh history. The Dapr docs recommend it for "eternal workflows" such as monitoring agents. The loop body becomes one cycle: run the check, wait on a durable timer, then continue-as-new with whatever the next cycle needs to know.&lt;/p&gt;

&lt;p&gt;Two things catch people out.&lt;/p&gt;

&lt;p&gt;Pass everything forward. The old history is discarded, so state you leave out of the new input is gone.&lt;/p&gt;

&lt;p&gt;Await your work before you continue. Continue-as-new restarts immediately and drops any activities, timers or child workflows that were started but not awaited.&lt;/p&gt;

&lt;p&gt;A long-lived agent that wakes, checks, acts and sleeps fits this shape well. It is a monitoring workflow with a model call in the middle.&lt;/p&gt;

&lt;p&gt;Docs on continue-as-new and history size: &lt;a href="https://docs.dapr.io/developing-applications/building-blocks/workflow/workflow-features-concepts/" rel="noopener noreferrer"&gt;https://docs.dapr.io/developing-applications/building-blocks/workflow/workflow-features-concepts/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How durable agents use workflow history: &lt;a href="https://www.diagrid.io/learn/durable-agents" rel="noopener noreferrer"&gt;https://www.diagrid.io/learn/durable-agents&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dapr</category>
      <category>workflow</category>
      <category>ai</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>Control Plane vs. Data Plane: Who owns what?</title>
      <dc:creator>Joni Collinge</dc:creator>
      <pubDate>Mon, 12 Oct 2026 13:49:46 +0000</pubDate>
      <link>https://dev.to/joni_collinge_fb2fb5b75f9/control-plane-vs-data-plane-who-owns-what-3n2o</link>
      <guid>https://dev.to/joni_collinge_fb2fb5b75f9/control-plane-vs-data-plane-who-owns-what-3n2o</guid>
      <description>&lt;p&gt;A lot of confusion when evaluating cloud platforms comes from the lack of clarity surrounding two terms: &lt;em&gt;control plane&lt;/em&gt; and &lt;em&gt;data plane&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In reality, the distinction is simple.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;data plane&lt;/strong&gt; handles runtime execution: processing your requests, running workflows and agents, and interacting with application state and dependencies.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;control plane&lt;/strong&gt; manages the platform: provisioning resources, distributing configuration, managing upgrades and exposing operational controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does this matter?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;“Where does my data go?”&lt;/strong&gt; Understand what the data plane processes, where it runs, what it stores and what crosses the boundary to the vendor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“What happens when the vendor has an outage?”&lt;/strong&gt; Understand whether the data plane can continue running independently if the control plane becomes unavailable. A management API going down shouldn't necessarily mean your running workflows stop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“What does BYOC actually mean?”&lt;/strong&gt; It depends on the architecture. Your data plane might run in your cloud account while the vendor operates the control plane remotely. Or you might operate both yourself. Those are materially different deployment models.&lt;/p&gt;

&lt;p&gt;You don't need to understand every detail of a vendor's internals. You need one clear diagram showing both planes, where they run, and what crosses the boundary between them.&lt;/p&gt;

&lt;p&gt;If a vendor can't explain that clearly, it's worth asking why.&lt;/p&gt;

&lt;p&gt;Here's how we've mapped it across all five of Diagrid Catalyst's deployment models: &lt;a href="https://www.diagrid.io/blog/catalyst-deployment-models" rel="noopener noreferrer"&gt;https://www.diagrid.io/blog/catalyst-deployment-models&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>cloud</category>
      <category>infrastructure</category>
      <category>systemdesign</category>
    </item>
  </channel>
</rss>
