<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>octabits — writing</title><description>Architecture notes from building and running production software — boundaries, constraints, Postgres, and the trade-offs behind the decisions.</description><link>https://octabits.io</link><language>en</language><copyright>© 2021–2026 DK2 Ventures UG (haftungsbeschränkt)</copyright><item><title>One checkout cannot pay two parties</title><link>https://octabits.io/blog/one-checkout-two-parties</link><guid isPermaLink="true">https://octabits.io/blog/one-checkout-two-parties</guid><description>A payment architecture was designed, reviewed and scheduled before a paragraph in our own terms of service made it unbuildable. The constraint was legal, not technical — and the append-only ledger underneath it did not care.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><category>Architecture</category><category>Payments</category><category>Compliance</category><author>mail@dk2.eu</author></item><item><title>Your workflow engine can&apos;t tell you what it&apos;s about to do</title><link>https://octabits.io/blog/the-graph-is-a-value</link><guid isPermaLink="true">https://octabits.io/blog/the-graph-is-a-value</guid><description>Temporal, Inngest, Trigger.dev and DBOS all survive a crash — by three different mechanisms, each charging a different tax. None of them can tell you what a workflow contains before it runs. A declarative DAG can, and that one property is the whole argument.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><category>Architecture</category><category>TypeScript</category><category>Workflows</category><author>mail@dk2.eu</author></item></channel></rss>