<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Payments Engineer Playbook]]></title><description><![CDATA[The only publication on Earth tailor-made for the builders of money software.]]></description><link>https://news.alvaroduran.com</link><image><url>https://substackcdn.com/image/fetch/$s_!8YPL!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png</url><title>The Payments Engineer Playbook</title><link>https://news.alvaroduran.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 09 Jul 2026 17:50:24 GMT</lastBuildDate><atom:link href="https://news.alvaroduran.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Alvaro Duran Barata]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[alvaroduran@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[alvaroduran@substack.com]]></itunes:email><itunes:name><![CDATA[Alvaro Duran]]></itunes:name></itunes:owner><itunes:author><![CDATA[Alvaro Duran]]></itunes:author><googleplay:owner><![CDATA[alvaroduran@substack.com]]></googleplay:owner><googleplay:email><![CDATA[alvaroduran@substack.com]]></googleplay:email><googleplay:author><![CDATA[Alvaro Duran]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Losing The Fear of SQL]]></title><description><![CDATA[Why ORMs are an obstacle, and what to replace them with]]></description><link>https://news.alvaroduran.com/p/losing-the-fear-of-sql</link><guid isPermaLink="false">https://news.alvaroduran.com/p/losing-the-fear-of-sql</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 08 Jul 2026 10:51:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SdnE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SdnE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SdnE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SdnE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SdnE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SdnE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SdnE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1621660,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/206016308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SdnE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SdnE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SdnE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SdnE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd31f881a-d37c-4687-9007-c07bfeafe54e_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>ORMs are more harm than good. Everybody knows it.</p><p>They start fine&#8212;that&#8217;s one reason everyone adopts them in the first place. No boilerplate. But then there&#8217;s some special use case down the line where you yearn for the expressiveness of SQL (rather than the way your ORM forces you to write it), and there&#8217;s no way to do it.</p><p>Which is why every engineer worth their salt will tell you not to use an ORM. Even when they have one, spread throughout the software.</p><p>&#8220;Why?&#8221;</p><p>I used to ask that question too. It first started as a thought I stared at, one that had never struck me before. Software is of our own making, and if it feels like a prison, then we&#8217;re the warden.</p><p>And it&#8217;s not like this is a new problem. There&#8217;s a well-known article by Ted Neward called <a href="https://www.odbms.org/wp-content/uploads/2013/11/031.01-Neward-The-Vietnam-of-Computer-Science-June-2006.pdf">The Vietnam War of Computer Science</a> in which the problems of using ORMs are described, and the fact that it uses the Vietnam War as a metaphor should tell you how long ago this article was written.</p><p>Even Steve Wozniak has written on the topic, arriving at the same conclusion: <a href="https://wozniak.ca/blog/2014/08/03/1/index.html">just learn SQL</a>:</p><blockquote><p>I&#8217;ve come to the conclusion that, for me, ORMs are more detriment than benefit. In short, they can be used to nicely augment working with SQL in a program, but they should not replace it.</p><p>&#8212; Steve Wozniak, <a href="https://wozniak.ca/blog/2014/08/03/1/index.html">What ORMs have taught me: just learn SQL</a></p></blockquote><p>I resonate strongly with that quote. But not with the title.</p><p>I don&#8217;t think it&#8217;s a matter of not knowing SQL. Wozniak may very well think it is, but note that he wrote his software without the Internet, without Google, and, crucially, without Stack Overflow.</p><p>He wrote database queries at a time when if you wanted to do it well you needed to learn SQL.</p><p>That&#8217;s not the case anymore. Not that you would be better off if you knew SQL well (and I&#8217;ve already recommended you to <a href="https://news.alvaroduran.com/i/181156551/the-art-of-postgresql-by-dimitri-fontaine">pick up a database book in a previous article</a>), but there&#8217;s enough out there to write SQL well without having to understand the language as deeply as Wozniak does.</p><p>So it&#8217;s not a lack of knowledge that people keep using ORMs against their own judgement; people already &#8220;just know&#8221; SQL.</p><p>The problem is something else.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, I&#8217;m going to argue that ORMs are a good thing, as long as you build them yourself. That, and not SQL syntax, is the knowledge you&#8217;re missing.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>Why your own ORM trumps everything out there</p></li><li><p>What an ORM does (it&#8217;s simple, but not easy)</p></li><li><p>How to start building one (step by step)</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/losing-the-fear-of-sql">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[A Ledger is 3 Products in 1]]></title><description><![CDATA[Finding out where the real cause of your ledger's "bugs" really is]]></description><link>https://news.alvaroduran.com/p/a-ledger-is-3-products-in-1</link><guid isPermaLink="false">https://news.alvaroduran.com/p/a-ledger-is-3-products-in-1</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 01 Jul 2026 11:22:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7Rol!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Rol!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Rol!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Rol!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Rol!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Rol!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Rol!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1888810,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/204404208?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7Rol!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Rol!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Rol!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Rol!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a981e17-8242-4091-913e-c91f7a1a20e0_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A couple of days ago, in one of those meetings that are going nowhere, someone casually coined one of the most wonderful terms I&#8217;ve ever heard: the <strong>root-root cause</strong>.</p><p>Not root cause, no. Double-root. The root of the root cause.</p><p>It was a moment as memorable to me as it was to all those journalists who were in the room when US Secretary of Defense Donald Rumsfeld <a href="https://web.archive.org/web/20160406235718/http://archive.defense.gov/Transcripts/Transcript.aspx?TranscriptID=2636">first talk about unknown unknowns</a>.</p><p>It was corporatespeak in the making.</p><p>I&#8217;m half joking. The term &#8220;root-root cause&#8221; is superficially absurd: if there is a root to a root cause, then it wasn&#8217;t a root cause to begin with. But on the other hand, I&#8217;ve witnessed problems caused by an underlying bug that was caused by something even deeper. Problems whose actual cause wasn&#8217;t slopiness, carelessness or a misunderstanding of the mechanicals of the problem, even if they were looked like, and addressed as, such.</p><p>Problems that were caused by something more fundamental. A root-root cause.</p><p>Bugs in ledgers, like in any other software system, are usually treated as engineering problems. When ledgers fail, they do so because they&#8217;re slow or because the calculations are off. And when engineers inspect them, they search for performance bottlenecks, off-by-one errors, or the use of floats to represent money.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;78bae70c-2587-426f-a072-749ad1f89965&quot;,&quot;caption&quot;:&quot;You've heard that one before: never represent money with a float.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Richard Pryor Stole a lot of Half Cents and Bought a Ferrari&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-27T11:16:51.258Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab20ba23-a16e-49aa-b2a2-1a32a8b3f365_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/richard-pryor-stoles-a-lot-of-half&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:172075705,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:2,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>That&#8217;s one way to look at ledgers&#8217; problems. But it&#8217;s incomplete. When you look at ledgers as if they were simply technical problems to solve, <strong>you&#8217;re overlooking the fact that they&#8217;re a critical piece of business technology for fintechs</strong>. Which means that there are multiple areas of the company using the ledger in fundamentally different ways.</p><p>&#8220;Fixing&#8221; a bug may involve a tradeoff that benefits one of those areas at the expense of the others. And, in time, the other areas will notice how their way of interacting with the ledger has gotten worse, and will demand it &#8220;goes back to how it was behaving before.&#8221;</p><p>Spice this up with two different engineers looking at this problem at different points in time, and you&#8217;re going back and forth between doing and undoing the &#8220;fix&#8221;, never going anywhere.</p><p>Because none of them are really seeing the root-root cause.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, we&#8217;re looking at the 3 products subsumed in a ledger system, their conflicting requirements, and some of the &#8220;scalability&#8221; or &#8220;performance&#8221; issues that arise from it. It&#8217;s one of those topics that makes it clear that being an engineer takes a special kind of courage, the courage to admit that you don&#8217;t know everything, and the courage to tell others that they don&#8217;t either.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>The 3 root-root causes of all of ledger&#8217;s problems</p></li><li><p>What you will be forced to do if you ignore this for too long</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/a-ledger-is-3-products-in-1">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Don't Be Careful, Be Competent]]></title><description><![CDATA[On the fallacy of "writing code is low level thinking", the ability to get things done, and the Faustian bargain of vibe coding.]]></description><link>https://news.alvaroduran.com/p/dont-be-careful-be-competent</link><guid isPermaLink="false">https://news.alvaroduran.com/p/dont-be-careful-be-competent</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 24 Jun 2026 10:36:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a3f64e05-b9b6-4b06-820f-26bcdee049b8_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Near the end of <em>Mission Impossible: Dead Reckoning</em>, Tom Cruise is about to do a scene so outrageous that will have a lot of people howling in the theater.</p><p>In his crusade to destroy <em>the Entity</em>, a sentient AI, he&#8217;s got to jump into a moving train and rescue one of his teammates. This time, however, as he gets closer and closer to the train on his motorbike, he arrives at the edge of a cliff, and is told to use his parachute, and jump.</p><p>So, he jumps.</p><div id="youtube2-C1X4joevHsc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;C1X4joevHsc&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/C1X4joevHsc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>If you&#8217;ve watched <a href="https://www.youtube.com/watch?v=-lsFs2615gw">the behind the scenes</a>, you know that this scene is actually more scary than it looks. It is arguably one of the best stunts in cinema history: a motorbike jump off a cliff into a base jump. The cliff is real, the motorbike and the parachutes are real and, of course, the stuntman is Tom Cruise himself.</p><p>He said <a href="https://www.youtube.com/watch?v=-lsFs2615gw">he wanted to do it since he was a little kid</a>.</p><p>There is something gripping about the Mission Impossible franchise or the Jason Bourne saga that other action movies like Fast &amp; Furious or Mad Max can&#8217;t simply replicate.</p><p>Yes, there&#8217;s impossibly high stakes, cars racing and explosions in all of them. But you can measure the emotional difference of leaving the theater after watching Tom Cruise jump of a cliff, or <a href="https://www.youtube.com/watch?v=Gj5LqGdQwQ4">climb the Burj Khalifa</a>, and after watching Vin Diesel &#8220;drive&#8221; a sportscar <a href="https://www.youtube.com/watch?v=ARfFoRZBfnY">from one of the Etihad Towers to the other</a>.</p><p>The difference, of course, is that you can believe the former, but not the latter.</p><p>I don&#8217;t want to argue that there&#8217;s one type of action movies that are &#8220;better&#8221; than others. Leave that to Rotten Tomatoes. What I want to persuade you is that there is a kind of action movie that&#8217;s impossible to replicate by others, no matter how much money, technology or people you put into it, and that this difference is precisely what make these movies unique and immediately recognizable by the broader public, while the others blur into a cloud of sameness (&#8220;was this movie before, or after Paul Walker&#8217;s accident?&#8221;).</p><p>Having spent huge amounts of money on a movie, the outcome is vastly different when the work involves some member of the staff saying &#8220;Vin, look focused and angry behind the wheel, we&#8217;ll do the rest&#8221;, or Tom Cruise <a href="https://www.youtube.com/shorts/NK_DTQUU5Kk">laying out his plan to the safety guy, getting some push back from him, then getting a new safety guy</a>.</p><p>The difference boils down to the creator&#8217;s vision.</p><p>Weirdly enough, software engineering has been drifting away in a similar cloud of sameness for a long time. Since the 2010s, virtually all software engineers work under the umbrella of Agile and Lean methodologies, and nowadays the only effective difference between the large enterprise and the small startup is that the former has more ceremony, and the latter has less people.</p><p>This, however, is ripe for change, now that there&#8217;s a machine that can write code for us.</p><p>The invention of LLMs and coding agents has, for the first time in history, unlocked the possibility of one-person teams. Just as cloud computing allowed companies to avoid buying servers upfront, LLMs allow them to avoid hiring large engineering teams upfront, keeping headcount small, reducing coordination overhead, and minimizing the need for middle management.</p><p>However, much like the first news program on television were just someone repeating on camera what they had just broadcasted on radio, early adopters of LLM have focused on replicate the human scaffolding of enterprise software organizations into their own workflows. These &#8220;AI-native&#8221; companies &#8220;hire&#8221; agents and give them tasks to do, and use &#8220;loops&#8221; as the artificial equivalent of middle manager, whipping and &#8220;harnessing&#8221; the agent until the task is done.</p><p>It is tempting to put distance between you and the code that makes your product. Coding is, after all, mentally demanding, and we know from the work by <a href="https://en.wikipedia.org/wiki/Prospect_theory">Kahneman and Tversky</a> that humans are repelled by mentally demanding work.</p><p>The promise of a machine that can do the low level thinking for us is too good to pass on.</p><p>Still, <strong>you must still write most of the code yourself</strong>. Not because LLMs don&#8217;t deliver; they may very well do. But because the writing of the code is the highest level of thinking you can make.</p><p>What you have to do isn&#8217;t to let the LLM run amok, and build the tooling around it to prevent bad things from happening. What you have to do is, for the first time in software history, <strong>be in total control of a software system no unaided human can build on their own</strong>.</p><p>Tom Cruise has a saying that deeply resonates with this:</p><p>Don&#8217;t be careful, be competent.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. This is the only newsletter on Earth tailor made for the engineers who build money software. And in these engineers&#8217; minds, the most important question right now has to do with this brand new machine that promises to take most code-related jobs, and leave the rest unrecognizable.</p><p>My gut tells me that this is just marketing. If your company decides to fire you on the grounds that AI can replace you, they&#8217;re either wrong, or commanding a ship that will be automated away by somebody else. Which means that, in the end, you were better off leaving the company anyway.</p><p>Building software will always be an activity that requires humans, just like ChatGPT has eliminated the stock photograph industry, but not photographers. The reason isn&#8217;t that there&#8217;s something called &#8220;taste&#8221; that can&#8217;t be replicated by machines (most people have Big Mac levels of taste about many things), but because using LLMs to replicate enterprise software organizations won&#8217;t give you enterprise levels of success.</p><p>Let me tell you why, and what you should do instead.</p><h2>From Zero To One</h2><blockquote><p>&#8220;What is morality?&#8221; she asked.</p><p>&#8220;Judgement to distinguish right and wrong, vision to see the truth, courage to act upon it, dedication to that which is good, integrity to stand by the good at any price. But where does one find it?&#8221;</p><p>The young boy made a sound that was half-chuckle, half-sneer: &#8220;Who is John Galt?&#8221;</p><p>&#8212; Ayn Rand, <a href="https://en.wikipedia.org/wiki/Atlas_Shrugged">Atlas Shrugged</a></p></blockquote><p>Peter Thiel&#8217;s book <em>Zero To One: Notes on Startups, or How to Build the Future</em> made a profound influence on me when I read it, about ten years ago.</p><p>On a superficial reading, Thiel&#8217;s claim simply echoes Christensen&#8217;s concept of disruption from <em>The Innovators Dilemma</em>. Thiel&#8217;s point, however, is much deeper than that: <strong>Zero to One is a book about the practical aspects of building a company meant to disrupt an industry</strong>, from the kind of ideas that are &#8220;disruption material&#8221;, the kind of founder, the kind of funding, the kind of business model, the kind of team.</p><p>Thiel&#8217;s argument is that only the startups that are weird and absurd to the general public can succeed. <strong>That heresy is the point</strong>.</p><p>This article is the application of such thinking to LLMs: <strong>the AI-native companies that will succeed will have their engineers writing the code by hand</strong>.</p><p>That&#8217;s because the real obstacle between a company and the ability to create value has never been speed to market, or productivity. In software, the biggest obstacle is, and always will be, the gap between what the customer needs, and is willing to pay for, and the implementation of a product that satisfies that need.</p><p>Speed has always been a catalyst. A company gathers feedback from a potential customer, and the race is to nailing down a product that satisfies it. Because of the dynamics of disruption, enterprise companies won&#8217;t even address that need: <em>these are not the customers they&#8217;re looking for</em>. That&#8217;s what give startups a chance to succeed (and why only heretical companies can eschew competition from incumbents).</p><p>So the race isn&#8217;t against enterprises, but against other startups. But the thing is that it isn&#8217;t really a race on a defined track, but a treasure hunt in the dark. That&#8217;s why Medium, with a 5 year head start and millions of dollars in the bank <a href="https://www.piratewires.com/p/what-happened-to-medium">was brought to its knees by Substack</a>: Medium was trying to become another <em>New York Times</em>; Substack wasn&#8217;t.</p><h2>Agile may finally be dead, after all</h2><blockquote><p>&#8220;The F-18 Natops. Contains everything they want you to know about your aircraft. I&#8217;m assuming you know the book inside and out.&#8221;</p><p>&#8220;Damn right!&#8221;</p><p>&#8220;So does your enemy.&#8221;</p><p>&#8212; <a href="https://www.youtube.com/watch?v=STRpcqrSnGY">Top Gun: Maverick</a></p></blockquote><p>What&#8217;s changed is that, now that there&#8217;s an LLM out there, and that everyone has it, undifferentiated software won&#8217;t cut it anymore.</p><p>The software products that will win have a point of view. A vision, coherent from the top down. A single, unified mental model of what the customer needs, and how and why the product address that need.</p><p>Let us call that <strong>conceptual integrity</strong>.</p><p>Conceptual integrity, a contribution from Brooks&#8217; <em>Mythical Man Month</em>, makes the product easier to develop and easier to use. This integrity pervades every decision in software, down to the line of code. And you haven&#8217;t heard of conceptual integrity because it has been remarkably absent from Agile discourse.</p><p>In other words, Agile is all about collaboration. Which sounds like a good thing, but it really isn&#8217;t. What you want instead is having as little collaboration as you can get by.</p><p>The only reason you need to collaborate is because you can only build so much of the product in a given time, up to some standards, and maintain those standards.</p><p>But now that there&#8217;s a tool that can help you build and understand the code you write, the threshold of collaboration you need has gone down, sharply. To the point where Agile may be actively harmful to the interests of a company.</p><p>Maybe you shouldn&#8217;t be token-maxxing, but sense-making-maxxing.</p><h2>The Real Villain is Convenience</h2><p>Fidelity to a coherent vision about a software product, all in the head of one person, may now be possible.</p><p>What stands in your way is your own unwilligness to get down into the trenches and understand the code, line by line, aided by some new piece of technology that could make that understanding faster. Not to engage in the kind of apathy and disengagement that comes from the fact that someone told you that there&#8217;s a thing that can do it for you.</p><p>That&#8217;s the mission, should you choose to accept it.</p><p>I&#8217;ve always seen every piece of technology as a Faustian bargain, some smaller and some bigger. We use our GPS to orient ourselves, and have given up on having a sense of our surroundings or engaging with strangers (something that used to give some quirky flavors to our holidays and make for good anecdotes later). We use search engines to ask questions, failing to curate our own sources of information, failing prey to lies and deceit.</p><p>Technology is what can, and will, be enshittified.</p><h2>Another approach to build software</h2><p>I encourage you to keep writing code with your own hands, to keep reading the docs yourself, and to spend your time focused on the minutia of functions, methods and classes.</p><p>You&#8217;ll quickly notice, as I have, the following.</p><p>First, you&#8217;ll reengage with your job in a way that you didn&#8217;t noticed you were missing. You weren&#8217;t that productive to begin with, because the off times between writing the prompt and looking at the outcome were spent on your phone, on Slack, or drinking coffee. There&#8217;s nothing as joyful as being engaged on a single, well defined task of moderate difficulty, making progress, and seeing it to completion. What&#8217;s now well known as <a href="https://en.wikipedia.org/wiki/Flow_(psychology)">flow</a>.</p><p>Second, you&#8217;ll noticed over time that you&#8217;re more knowledgeable than your peers in some area of the product in a way that&#8217;s richer and more nuanced. Obviously, it is a consequence of the fact that they&#8217;re letting AI write the code for them, and you don&#8217;t. It could be a remark you hear yourself saying on a meeting, an edge case they&#8217;ve overlooked, or a solution to a problem they didn&#8217;t consider because of some seemingly disconnected parts of the system. You&#8217;ve earned it: it&#8217;s your time to shine.</p><p>And third, you&#8217;ll realize that you&#8217;re actually in a better position to prompt the machine for suggestions. You&#8217;re behind the wheel, ready to reengage with the LLM for brainstorming, rubber duck debugging, and review, but not delegation.</p><p>This, in time, is how software engineers will work. There&#8217;s simply no way around it. The rest will burn out from the inhumane task of prompting prompts to prompt prompts all day long.</p><p>Is the software engineer industry going to change? No doubt about it. But it isn&#8217;t going to look like Fast &amp; Furious, with ever more technology creating ever more unimaginative slop.</p><p>It&#8217;s going to look more like single humans, on a motorbike, with a parachute on their back.</p><p>Ready to jump and see what happens.</p><p>This was it for this week in <em>The Payments Engineer Playbook</em>. I&#8217;ll see you next week.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/dont-be-careful-be-competent?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Feel free to share this article with a colleague.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/dont-be-careful-be-competent?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://news.alvaroduran.com/p/dont-be-careful-be-competent?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Missing State In Your State Machine]]></title><description><![CDATA[The situation in which an item is acknowledged but not yet stored is a perennial problem in state machines]]></description><link>https://news.alvaroduran.com/p/the-missing-state-in-your-state-machine</link><guid isPermaLink="false">https://news.alvaroduran.com/p/the-missing-state-in-your-state-machine</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 17 Jun 2026 12:05:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sm57!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sm57!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sm57!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sm57!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sm57!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sm57!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sm57!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1927875,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/202307520?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sm57!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sm57!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sm57!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sm57!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05075264-a61e-4097-8b60-58cabb3997cd_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The state machine you built is almost certainly incomplete.</p><p>I can see the whiteboard in your office, or the Miro board you had prepared, full of details and notes. I can visualize the transitions, the edge cases. But I can also see what went wrong, in a very subtle way.</p><p>Let me tell you what I see.</p><blockquote><p>Let&#8217;s say we want to implement a service that handles the process of placing an order. This order goes through multiple stages during its lifetime. Initially it is <em>pending, </em>then goes to <em>confirmed</em> and <em>paid</em>. Finally it ends up as either <em>completed</em> or <em>canceled</em>.</p><p>&#8212; &#220;rgo Ringo, <a href="https://medium.com/wise-engineering/implementing-entity-states-as-separate-classes-abc3c745fa2">Implementing entity states as separate classes</a></p></blockquote><p>State machines are unexpectedly one of the most difficult components of the domain logic in any domain system. They&#8217;re meant to represent the lifecycle of a given entity under all possible interactions with users, and they almost always seem to be missing something crucial, and impossibly hard to introduce retrospectively.</p><p>Which is why I&#8217;ve been very vocal against them in the past.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b54ddf95-1314-4b12-bc46-fe684f6f63e9&quot;,&quot;caption&quot;:&quot;There are two ways to represent movement.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why Payments Engineers Should Avoid State Machines&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-09-25T09:24:09.159Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/246d560d-1a15-4782-a2d1-ff3729c5326b_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/why-payments-engineers-should-avoid&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:149387157,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:13,&quot;comment_count&quot;:1,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>That said, &#220;rgo Ringo&#8217;s article on implementing state machines, not as enums, but as separate classes, has made a profound influence in how I build software systems.</p><p>And that&#8217;s because I resonate with the idea that <strong>the compiler can help you become aware of gaps in the way you represent an entity&#8217;s lifecycle before you go live with the changes</strong>.</p><p>This, alongside Alexis King&#8217;s <a href="https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/">Parse, Don&#8217;t Validate</a>, made me realize that in order to build a more robust approach to how state machines are implemented in the wild (full of <em>switch </em>statements and <a href="https://news.alvaroduran.com/p/youre-implementing-the-basics-of">guard clauses</a>), <strong>I had to treat entities as completely different types as they evolve</strong>.</p><p>If you do this, you&#8217;ll quickly realize something: identifiers are optional, in a very weird way.</p><p>Let&#8217;s say, just like in &#220;rgo Ringo&#8217;s article, that we&#8217;re implementing a system to place orders, Amazon style. An order may have creation time, items, nothing out of the ordinary. And it has an <code>order_id</code>.</p><p>Is that id optional?</p><p>On the one hand, no, not really. Orders must be uniquely identified in the system, and you&#8217;d benefit greatly from not having to check if the damned id is null or not every time you check its value, or cache it, or use it in any other way. It wouldn&#8217;t make sense to separate orders into different classes to avoid if statements, only to reintroduce them in the silliest way possible.</p><p>On the other hand, you may need to pass an order instance in order to create the record in the database, but until you do, there&#8217;s no <code>order_id</code> you can assign to that entity.</p><p>So you probably bit the bullet and made <code>order_id</code> optional.</p><p>That was a mistake.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, we&#8217;re going down into the weeds and ask <strong>how can I make an entity&#8217;s identifier non-optional, without losing the ability to pass that entity to the database?</strong></p><p>This time, and by popular demand, I&#8217;m going to show you some code. It&#8217;s Go, but the takeaways should be seamlessly portable to any language, even Java.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>How to use interfaces and DTOs instead of inheritance</p></li><li><p>Type assertions as a way to add information to the compiler</p></li><li><p>A practical example on how to use interfaces to solve a state-machine-like transition without state machines</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/the-missing-state-in-your-state-machine">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Recover The Flexibility of Paper In Ledgers]]></title><description><![CDATA[What paper-based ledgers got right about flexibility that got lost when we moved everything to computers]]></description><link>https://news.alvaroduran.com/p/how-to-recover-the-flexibility-of</link><guid isPermaLink="false">https://news.alvaroduran.com/p/how-to-recover-the-flexibility-of</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 10 Jun 2026 10:44:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aULN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aULN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aULN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aULN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aULN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aULN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aULN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1199316,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/201423931?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aULN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aULN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aULN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aULN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6654fd-4788-426d-915d-cdcbddc0b52c_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Imagine if paper had just been discovered.</p><p>A new storage medium, local-first, with unlimited battery life, more schemaless than any database out there. Multi-model: you can store text as well as drawings and pictures. Lossless serialization and O(1) read latency to the nearest page (O(log n) otherwise).</p><p>A killer app in every aspect.</p><p>We call the systems that keep track of a company&#8217;s finances <em>ledgers</em>, paying homage to the notebook that was open in some corner of the office table during the workday<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. 16th-century Venetian merchants ran multiple books, each updated independently throughout the day by different clerks (concurrently, and without locks), and reconciled them at the end of the day.</p><p>They had already invented <a href="https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type">CRDT</a> centuries before it was formally defined in 2011.</p><p>But now that we have computers, most of this work is done for us, and we&#8217;ve lost a few things in the translation.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;7641cc7d-8bc3-4409-ba59-d92d75d90d71&quot;,&quot;caption&quot;:&quot;You don&#8217;t know what a ledger is for.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;You Don't Know What a Ledger Is For&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-18T17:37:21.316Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!SsFp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191347022,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>It&#8217;s a bit disheartening. Because the irony of treating paper as a new technology is that <em>we already had it for a long time</em>. And now that we&#8217;ve &#8220;migrated&#8221; everything to the computer, we&#8217;ve left behind unique traits about it that are far superior than what computers have to replace it.</p><p>Case in point: everything is now <em>archived</em> <em>in folders</em> or <em>stored in containers</em>.</p><p>Both are clearly metaphors of what people used to do with paper, but these weren&#8217;t the only things we do with paper.</p><p>I&#8217;m a very analog person, and I have paper spread out all over my desk, and <strong>none of it is archived or stored</strong>. Many engineers, if they saw that, would be prone to organizing, categorizing, and compiling all this paper.</p><p>They can&#8217;t see paper for what it is; they only see computerized reality. And that&#8217;s how we lost something that 16th-century clerks had: task management across transactions.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, I&#8217;m going to make the case that many ledger systems are missing a piece of the puzzle that would make them ten times more useful. Not surprisingly, I&#8217;ve called this missing piece <strong>the Folio entity</strong>: a piece of data that relates multiple transactions across time, aiding reconciliation efforts, facilitating changes in revenue recognition frameworks, and making ledgers entries way easier to understand beyond their metadata.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>The limits of Transactions as the highest abstraction for ledgers</p></li><li><p>The case for the Folio entity</p></li><li><p>Why Folios aren&#8217;t containers of Transactions</p></li><li><p>The soundness of older, paper-based architectures for ledgers</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/how-to-recover-the-flexibility-of">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[In An Agentic Commerce World, Fraud Will Be Indistinguishable From Legit]]></title><description><![CDATA[Why purchasing intent is the last irreducibly human part of any transaction, and what 16th century England can teach us about what's next.]]></description><link>https://news.alvaroduran.com/p/in-an-agentic-commerce-world-fraud</link><guid isPermaLink="false">https://news.alvaroduran.com/p/in-an-agentic-commerce-world-fraud</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 03 Jun 2026 10:54:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wo0g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wo0g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wo0g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wo0g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wo0g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wo0g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wo0g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1672080,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/200307445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wo0g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wo0g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wo0g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wo0g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90316b99-8d19-45c7-ba02-9209e5cc7edd_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The AI futurists are approaching agentic commerce totally backwards.</p><p>They believe that the Internet is going to <a href="https://en.wikipedia.org/wiki/Dead_Internet_theory">go full dead</a> (as in &#8220;99 percent of traffic will be non-human&#8221;), and plan for a world in which commerce is done by machines to machines, with no human involvement at all.</p><p>And that, if you think about it, is nonsense.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2076e96a-83b2-40d8-bcfb-91d84ee3127c&quot;,&quot;caption&quot;:&quot;The more I work with AI tools, the more implausible it looks to me that AI commerce will go anywhere.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why AI Commerce Isn't Going Anywhere&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-15T11:46:44.155Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!BZDS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a95deba-06c4-466f-9687-0d52c5feb41d_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/why-ai-commerce-isnt-going-anywhere&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:176222551,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Even if the Internet becomes something you no longer surf, navigate or <a href="https://en.wikipedia.org/wiki/Information_superhighway">information-superhighway</a>-drive, there&#8217;s something irreducibly human in every purchase that cannot, by design, be automated away: <strong>intent</strong>.</p><p>However impulsive your shopping is, purchasing decisions start with the intent of the human.</p><p>That&#8217;s why an end-to-end agentic commerce doesn&#8217;t make any sense at all.</p><p>If AI gets adopted more widely, and we rely less on click and tap and more on vibes and prompts, it&#8217;s not the increased traffic or the bad quality code that&#8217;s going to be a problem.</p><p>It&#8217;s that <strong>fraud will be indistinguishable from legit</strong>.</p><p>For that reason, agentic commerce, in order to succeed, will have to rely on the only thing that has to be human.</p><p>The intent to buy.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. In this chapter, I want to persuade you that most authentication measures that are now commonplace, such as 3DS, are <strong>incompatible with a world in which agentic commerce is the norm</strong>.</p><p>And I want to present you with an alternative that can work, even when fraudsters use frontier models and you&#8217;re stuck with an open source model you downloaded from Hugging Face.</p><p>An alternative inspired by 16th century pirates like Francis Drake.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>A metaphor from the days of piracy that reinforces a new approach to AI-mediated commerce</p></li><li><p>How to use Intent, not Presence, as the core of the authentication process</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/in-an-agentic-commerce-world-fraud">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Virtual Bank Accounts Are Virtually Inexhaustible]]></title><description><![CDATA[Why are we using unstructured text when a strict alphanumeric ID can do the job better?]]></description><link>https://news.alvaroduran.com/p/virtual-bank-accounts-are-virtually</link><guid isPermaLink="false">https://news.alvaroduran.com/p/virtual-bank-accounts-are-virtually</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 27 May 2026 10:54:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iq4Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iq4Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iq4Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iq4Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iq4Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iq4Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iq4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1991550,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/199332580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iq4Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iq4Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iq4Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iq4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1103e9d-45f5-4d7c-bec1-14a8a00ad2ba_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There&#8217;s something paradoxical about reconciliation.</p><p>On the one hand, it looks simple: here&#8217;s a receipt, or a confirmation of payment, and here&#8217;s a bank transfer with the same amount, go figure if they&#8217;re related. If you had all inside a massive database, a simple JOIN statement would be all you need to make this relation apparent.</p><p>On the other hand, reconciliation is a perennial problem, and big companies have given up on having an automated solution that doesn&#8217;t involve humans at some point.</p><p>I just don&#8217;t get it.</p><blockquote><p>For the last several hundred years, [B2B payments] have followed a very well-understood dance. A deal is struck. The exact amount of compensation is decided upon and memorialized by the sender in an invoice. The purchaser receives the invoice, reads it, then wraps money around a metaphorical brick and throws it through a metaphorical window. Someone on the other side of the window then applies forensic science to the question of what caused this <em>particular</em> brick to arrive.</p><p>&#8212; Patrick McKenzie, <a href="https://www.bitsaboutmoney.com/archive/a-game-that-intentionally-frustrates-the-player/">Reconciliation: A game designed to frustrate the player</a></p></blockquote><p>Well, I <em>kind of</em> get it: reconciliation is one of those things that&#8217;s invisible when things go well, but <strong>panic-inducing when things go wrong</strong>. That&#8217;s why there seems to be no way around humans getting involved in it: machines have no skin in the game.</p><p>But that&#8217;s suboptimal. <strong>In order for reconciliation to work 100%, we need the JOIN key that makes the two &#8220;tables&#8221; </strong>(receipts and bank transfers) <strong>work</strong>.</p><p>What we had so far is that free-text, sender-controlled piece of data most banks call &#8220;Concept&#8221;. Especially in B2B, where <a href="https://www.bitsaboutmoney.com/archive/bank-transfers-as-a-payment-method/">bank transfers as a payment method are the norm</a> (though it&#8217;s becoming <a href="https://stripe.com/en-es/resources/more/bizum-in-depth-guide">more frequent in B2C as well</a>), there&#8217;s a disconnect between the invoice, which gets created automatically at the Point of Sale, and the transfer, which gets created manually by the payer when they receive the invoice.</p><p>The Concept, then, becomes the only piece of data that the purchaser can control, under the advice of the seller, to make the reconciliation process easier, or at least possible.</p><p>That said, notice that humans don&#8217;t <em>need</em> to get involved. They aren&#8217;t for card payments, and they definitely aren&#8217;t involved anymore in stock exchanges. <strong>The only reason humans are still involved in B2B reconciliation is because it has always been that way</strong>.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d5a377f6-651c-46f3-b39b-e6f16164f97a&quot;,&quot;caption&quot;:&quot;From 9.30 am to 4.00 pm, Eastern Time, all bets are off at 18 Broad Street.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;From Stock Markets To Ledgers, Part I: Fairness&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-29T10:16:36.770Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!VedF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9721a852-31cb-4a09-857d-5bb010fd2506_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/from-stock-markets-to-ledgers-series&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:177361471,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>That, and a lack of creativity when it comes to the other pieces of data involved in a transfer.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, we&#8217;re going to look at creative ways to make reconciliation easier without human involvement. We&#8217;ll start with the hackiest of all, all the way to using bank accounts in a more flexible way, and what it would take for this solution to become widespread, eliminating the need to keep discussing reconciliation.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>How to use the transfer amount as a reconciliation tool</p></li><li><p>Seeing bank accounts beyond a depositor&#8217;s vaults of cash</p></li><li><p>Why virtual bank accounts cannot be exhausted, no matter how much you try</p></li><li><p>Moving from BAN as address to BAN as intent</p></li></ul><p>Enough intro, let&#8217;s dive in.</p><h2>Sneaky Discounts As Reconciliation Tool</h2><p>Bank transfers have in practice 5 pieces of metadata:</p><ul><li><p>The receiving account number</p></li><li><p>The receiving account name</p></li><li><p>The sender&#8217;s name</p></li><li><p>The amount</p></li><li><p>The concept/reason/description</p></li></ul><p>Given that the first two are about you, and therefore a bit pointless, and that names aren&#8217;t as straightforward as you may think<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>, the only pieces of data you can use to coordinate with the buyer are the amount and the concept.</p><p>You&#8217;ve probably been in situations where you were expected to input some invoice ID in the concept line item, and know by now that people seem able to fill in <em>everything except the actual invoice ID</em>, turning reconciliation into a nightmare for the Accounts Payable team.</p><p>So let&#8217;s try the amount instead.</p><p>One hacky way <strong>that&#8217;s really a thing</strong> is to sneak a line item into the invoice for a specific discount for the customer, one in the order of cents. The purpose of this discount is that the final two digits of your invoice are unique among the invoices you expect to send that month (if you&#8217;re <a href="https://en.wikipedia.org/wiki/Net_D">Net 30</a>).</p><p>These 2 digits are the JOIN key you need to match invoices and transfers. Problem is, this breaks down at scale.</p><p>Something else you can do, though, is to change your approach to bank accounts, so that they become less about you, and more about the invoice.</p><h2>Bank Accounts As Intent</h2><p>Because of the tiny scale on which B2B transfers used to happen, bank accounts are considered a form of primary key of the accountholder&#8217;s deposit box. If banks still were a metallic vault full of gold coins, you&#8217;d still expect your small container to be labeled with the IBAN of your bank account, the string of numbers and sometimes letters of up to 34 characters in length you&#8217;re familiar with.</p><p>It almost looks heretical for somebody to have 2 accounts in a bank, unless there were some special use case for it, such as the business&#8217;s account or the one for investments.</p><p>But banks no longer have vaults in the basement, and you don&#8217;t have a deposit box.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;055a6af1-3e12-494a-b91d-b17aaec108a1&quot;,&quot;caption&quot;:&quot;Pay by bank is a white lie.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Banks move money by sharing files, and that's OK&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-01-22T10:01:55.410Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/667b4b3d-edd6-49b2-ad7b-90088f863e50_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/banks-move-money-by-sharing-files&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:155329100,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Instead, I want to persuade you that, if your bank were more conducive to it, you could have thousands, even millions of IBANs available, so that every time you issued an invoice to a customer, you could add a unique bank account number to it, so that each individual account had a history of a single transfer, making the reconciliation process so stupidly straightforward, even a machine could do it.</p><p>I call that the <strong>Bank Account As Intent</strong> approach.</p><p>The reason this is possible is because banks can issue a massive number of &#8220;virtual&#8221; bank accounts (VBAs) that serve as proxy for a single, &#8220;physical&#8221; account.</p><p>You&#8217;ve probably heard of <a href="https://en.wikipedia.org/wiki/Controlled_payment_number">Virtual Credit Cards</a>: they are an extension of the ISO 8583 credit card protocol, but for identifiers that don&#8217;t have an actual plastic card associated with it, can live on your phone, and can pay via <a href="https://en.wikipedia.org/wiki/Near-field_communication">NFC</a>.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;59b4cea5-be98-41b2-b363-5c9a388bcff8&quot;,&quot;caption&quot;:&quot;This is a chapter from Code-First Reliability.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Ultimate Guide to Payment Tokens&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-09T09:33:02.471Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6335c79-4b01-40a5-8eb0-a03a720eac16_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/the-ultimate-guide-to-payment-tokens&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167799157,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In fact, many companies, including travel agencies, have been <a href="https://www.altexsoft.com/blog/virtual-credit-cards-travel/">using VCCs for a long time in order to become merchants of record</a> rather than merely recommender systems. By issuing a single-use VCC for each payment, travel agencies are able to uniquely match the payment made to the airline with the one received from the customer.</p><p>These VCC programs, though, only work with a modicum of scale. VBAs, instead, can be used at <em>any</em> scale.</p><h2>Can&#8217;t A Bank Run Out of Bank Accounts?</h2><p>How much traffic would a bank need in order to run out of bank accounts?</p><p>More than a lot. IBANs, <em>as currently implemented</em>, can hold in the order of 1 nonillion bank accounts, or <a href="https://lcn2.github.io/mersenne-english-name/tenpower/tenpower.html">1 followed by 30 zeros</a><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> per country. In some countries, given that they allow for letters as well as numbers, that number is even higher.</p><p>For comparison, the Earth weighs around 6 septillion kilograms, or <a href="https://en.wikipedia.org/wiki/Earth_mass">1 followed by 24 zeros</a>. If you could divide the planet into 1 kg rocks, <strong>you&#8217;d need one million Earths to have as many rocks as bank accounts</strong>. Again, per country.</p><p>Bank accounts, without any modification or upgrade, are virtually inexhaustible.</p><p>So the question isn&#8217;t whether we&#8217;re going to run out of bank accounts eventually. We&#8217;re not, even if we only recycle them every couple of decades.</p><p>The actual question is: <strong>why are we so greedy with our bank accounts?</strong></p><h2>How To Live In a World With Unlimited Bank Accounts</h2><p>If bank accounts cannot be exhausted, <strong>I want to have one bank account per purchase</strong>.</p><p>Rather than sharing the same bank account on every invoice I issue to a customer, I want to <em>never reuse bank accounts</em>, and <strong>attach each invoice its own virtual bank account</strong>.</p><p>Of course, your bank may object to it. Banks, especially traditional banks, aren&#8217;t used to this approach to bank accounts, and you may incur fees in order to create new virtual bank accounts.</p><p>No problem. There are already a bunch of new banks already geared towards the indiscriminate use of virtual bank accounts (<a href="https://www.increase.com/">Increase</a>, <a href="https://www.modulrfinance.com/">Modulr</a>, and others) that provide the ability to buy VBAs <em>in bulk</em>, at a discount.</p><p>It is only a matter of time that this practice will be prevalent: how hard could it be for a bank to issue one more bank account?</p><p>And if it&#8217;s hard, why is that?</p><p>But even if your bank has no objections, the regulator may have something to say about this. This is where we the engineers step in: each invoice, and the metadata involved in creating it, can be stored alongside the bank account details, so that auditors can review the process and approve or reject each individual transaction.</p><p>But now that we can use the bank account as the link between the invoice and the transfer, we&#8217;ve just found our JOIN key. One that&#8217;s unique and standardized.</p><p>After all, VBAs are <em>indistinguishable</em> from physical bank accounts. The customer would have no idea it&#8217;s happening. And, since they don&#8217;t need to be recycled, they can use it and reuse it for recurring payments.</p><p>From the point of view of the customer, life is still the same. But from the point of view of the seller, life is so much easier.</p><h2>The only thing blocking the adoption of VBAs</h2><p>The only thing blocking the adoption of Virtual Bank Accounts more widely is the banks&#8217; unwillingness to do it.</p><p>Payments is still a very path-dependent industry. They still use mental models close to checks and vaults in the basement to describe it. And are missing out on entirely new ways to approach B2B payments so that reconciliation becomes a problem solved once and for all.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;69166c43-ed7e-491c-90bb-8e814d43207e&quot;,&quot;caption&quot;:&quot;This is a chapter from Code-First Reliability.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why Payments Are Path-Dependent&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-02T10:02:58.289Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b762039-692c-4221-aef3-92dd55a13fb8_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/do-not-honor-is-a-symptom-that-proves&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167100528,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Reconciliation, therefore, isn&#8217;t a matching problem. It&#8217;s an addressing problem. For the longest time, we were missing a JOIN statement that made the whole process straightforward.</p><p>We now have it.</p><p>That&#8217;s it in <em>The Payments Engineer Playbook</em>. I&#8217;ll see you next week.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/virtual-bank-accounts-are-virtually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Feel free to share this article with a colleague.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/virtual-bank-accounts-are-virtually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://news.alvaroduran.com/p/virtual-bank-accounts-are-virtually?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Spanish names, to give you an example I&#8217;m familiar with, are notably long, something that confuses the hell out of foreigners. Most Spaniards (if not all), have <em>at least</em> two surnames, and each can be a compound surname. Note that the city of Los Angeles, when it was claimed by Juan Rodriguez Cabrillo (see, two surnames) in 1542, was named <a href="https://en.wikipedia.org/wiki/Los_Angeles#Toponymy">El Pueblo de Nuestra Se&#241;ora la Reina de los &#193;ngeles del R&#237;o Porci&#250;ncula</a>. Imagine putting that in a baseball cap.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Not all numbers are <a href="https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN">valid under the IBAN protocol</a>, which is why the number isn&#8217;t exactly that, but it&#8217;s close enough for the purpose of showing how staggering the number is.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[No Such Thing As A Currency Of Reference]]></title><description><![CDATA[If nobody traded on the exchange rate you wrote down, is it really a record?]]></description><link>https://news.alvaroduran.com/p/no-such-thing-as-a-currency-of-reference</link><guid isPermaLink="false">https://news.alvaroduran.com/p/no-such-thing-as-a-currency-of-reference</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 20 May 2026 09:47:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!B0eb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B0eb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B0eb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!B0eb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!B0eb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!B0eb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B0eb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1509254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/198462152?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B0eb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!B0eb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!B0eb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!B0eb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcb271-f14e-42bf-9b3d-86803d7253e7_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most ledgers approach accounting with foreign currencies wrong.</p><p>Every accounting software I know is designed to have, as one of its most fundamental configurations, a currency of reference. The one in which all the ledger&#8217;s debits and credits are denominated.</p><p>It is a convention so prevalent that we no longer see it. Ledgers may be split into USD subledgers, EUR subledgers, and so on. But that&#8217;s because the assumption is that movements across subledgers, across currencies, are rare.</p><p>That assumption is becoming less and less correct every day.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9e33c883-8711-4159-8fad-315df7b71575&quot;,&quot;caption&quot;:&quot;You don&#8217;t know what a ledger is for.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;You Don't Know What a Ledger Is For&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-18T17:37:21.316Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!SsFp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191347022,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>I don&#8217;t blame you if you don&#8217;t agree with me on this. Your day to day is denominated in a single currency. There&#8217;s only one currency you think about when you buy groceries, pay your taxes and receive your salary. Only the occasional trip abroad may require thinking of some exchange rate, and even then you use one that&#8217;s both fixed and easy to use for mental math.</p><p>The US dollar isn&#8217;t really worth 0.8 euros, but if you&#8217;re buying a souvenir in a flea market, that rate will work just fine.</p><p>That, however, is no longer a way in which fintech companies can operate. They aim to be global, and to manage transactions at high volume and high speed. Focusing on a single economic zone with a single currency means missing out on so much of their Total Addressable Market; venture capital would abandon you.</p><p>But treating the world as if it were denominated in a single currency is not just an oversimplification, but actively harmful. And yet, most ledgers are designed to do just that, because engineers aren&#8217;t used to, or refuse to, think in terms of multiple currencies.</p><p>They may say that it&#8217;s unnecessarily complex. But the truth is that they just don&#8217;t want to do it.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, I&#8217;m going to persuade you not to have &#8220;base amount&#8221; and &#8220;base currency&#8221; in your ledger&#8217;s entries.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>Why multi-currency ledgers are more relevant than ever</p></li><li><p>Why GAAP and IFRS don&#8217;t really require a currency of reference</p></li><li><p>And what the Green Lumber fallacy has to do with any of this</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/no-such-thing-as-a-currency-of-reference">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Source-Destination Pairs Need Imaginary Accounts to Work]]></title><description><![CDATA[Why Debits and Credits are the universal grammar of accounting]]></description><link>https://news.alvaroduran.com/p/source-destination-pairs-need-imaginary</link><guid isPermaLink="false">https://news.alvaroduran.com/p/source-destination-pairs-need-imaginary</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 13 May 2026 13:42:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Nksm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nksm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nksm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nksm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nksm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nksm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nksm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:713033,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/197462094?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nksm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nksm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nksm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nksm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c5a141c-867a-441a-b354-09d9901827de_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every ledger that uses source-destination pairs as a primitive ends up creating accounts that have no use other than making everything work.</p><p>Source-destination pairs are a Python dataclass, or a Java class, or a Go struct, that contains two mandatory fields that represent Accounts; one for the source of funds, another for the destination.</p><p>Engineers are tempted to use S-D pairs because there&#8217;s a rigidity in it that can be easily transferred to the type system. &#8220;If I can make this work&#8221;, they think, &#8220;I&#8217;ll be able to enforce double-entry safety in the compiler, rather than having to write lots of tests and be paranoid about it&#8221;.</p><p>Consider Nubank. There&#8217;s <a href="https://www.youtube.com/watch?v=aw6y4r4NAlw">an interesting talk by Lucas Cavalcanti</a>, now a Distinguished Engineer at Nubank, in which he claimed that double-entry accounting is &#8220;the perfect fit for functional programming&#8221;, and described how they build their ledger on top of an Entry schema that contains &#8220;a positive amount, a debit, and a credit&#8221;, and that &#8220;modeling it this way, by design, the sum of credits is equal to the sum of debits.&#8221;</p><p>Which is factually not true.</p><p>Why? Because, when I built a ledger for the first time, we used S-D pairs just like Nubank. And we used append-only, immutable records. And our Tech Lead couldn&#8217;t stop talking about Haskell and how what we were doing was as close to functional programming as you could get in Ruby.</p><p>And yet, we were <a href="https://news.alvaroduran.com/p/engineers-do-not-get-to-make-startup">losing track of a few cents on every transaction</a>.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;aeace658-8376-4ab7-b8a4-3ce2c3f48199&quot;,&quot;caption&quot;:&quot;Not losing track of money is the bare minimum for fintech companies.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Engineers Do Not Get To Make Startup Mistakes When They Build Ledgers&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-09-11T07:03:52.397Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4356d89-8463-4b67-bf0a-90bc8e50bae8_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/engineers-do-not-get-to-make-startup&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148755990,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:38,&quot;comment_count&quot;:6,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, we&#8217;re going to look at the fallacy of trying to enforce double-entry safety on the type system. I&#8217;ve already covered <a href="https://news.alvaroduran.com/p/how-to-explain-accounting-to-payments">why thinking of accounting in terms of flows is a bad idea</a>, and not using S-D pairs is its natural consequence. Enforcing a beginning and an end of funds is a misrepresentation of what accounting is really about, and ledgers that use S-D pairs as their primitive end up having to do all sort of workarounds to make the tests pass.</p><p>You used S-D pairs to get the compiler&#8217;s help, and then you make its help pointless.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>The imaginary accounts needed to make S-D pairs work</p></li><li><p>Which ledgers <em>could</em> work with S-D pairs (not many)</p></li><li><p>The financial operations that S-D simply cannot model</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/source-destination-pairs-need-imaginary">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Why Database-Layer Double-Entry Is a Bet, Not a Guarantee]]></title><description><![CDATA[An invariant baked into the schema doesn't survive a changing business]]></description><link>https://news.alvaroduran.com/p/why-database-layer-double-entry-is</link><guid isPermaLink="false">https://news.alvaroduran.com/p/why-database-layer-double-entry-is</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 06 May 2026 10:56:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WqBI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WqBI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WqBI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WqBI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WqBI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WqBI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WqBI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1691192,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/196584803?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WqBI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WqBI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WqBI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WqBI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07a075b-445e-44f3-a0b4-c4c047936d9c_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can go too far and design a ledger that&#8217;s too rigid.</p><p>When you engineer software, there&#8217;s a tendency to push the most basic rules of your code as close to the storage layer as possible. The reasoning is that things that must always be true don&#8217;t change, and must be the foundation of the rest of the system. Or so the argument goes.</p><p>This is a good heuristic. But if that thing you call invariant needs to be modified, or you need to change the database engine as a result of scale, closeness to storage will make the migration more difficult and expensive.</p><p>Database invariants either age well, or get rewritten.</p><blockquote><p>It ain&#8217;t what you don&#8217;t know that gets you into trouble. It&#8217;s what you know for sure that just ain&#8217;t so.</p><p>&#8212; <a href="https://quoteinvestigator.com/2018/11/18/know-trouble/">Not Mark Twain</a></p></blockquote><p>In ledgers, the most foundational of business rules is double-entry safety. And so, many ledger systems have placed its logic as close to the database as possible.</p><p>TigerBeetle takes this argument to its purest expression. Its primitives are not tables. They are <code>Account</code> and <code>Transfer</code>. A transfer &#8220;<a href="https://docs.tigerbeetle.com/reference/transfer/">debit a single account and credit a single account</a>.&#8221; There is no <code>INSERT INTO transfers</code> that can produce an unbalanced row, because the API does not expose a shape in which an unbalanced posting is a valid input.</p><p>Which sounds like a good thing, and it is, unless the world suddenly becomes multi-currency. TigerBeetle is built for speed, but makes multi-currency scenarios unmanageable.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;462685b2-c371-4c26-9203-ba0a73391091&quot;,&quot;caption&quot;:&quot;You&#8217;ve heard this one already: &#8220;skate where the puck is going, not where it has been&#8221;.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;TigerBeetle's Stablecoin Mistake&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-01-21T11:32:24.318Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8aa71a66-867a-4985-aaf7-d023ac567cf2_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/tigerbeetles-stablecoin-mistake&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:185167359,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The thing about ledgers is that, although they&#8217;re hard to build correctly, there isn&#8217;t One Canonical Ledger Design that every ledger must conform to. Every company has nuanced finances, idiosyncratic approaches, tricky and ever changing regulation, and evolving business needs.</p><p>TigerBeetle proved that double-entry deserves a primitive. But it didn&#8217;t prove that the primitive has to live in the database.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to be great at your job</strong>. Especially as a payments engineer, where stakes are sky-high, and the margin for error is razor-thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful, and more successful payments engineer. And we do that by cutting off one sliver of it and extracting tactics from it.</p><p>In today&#8217;s article, I&#8217;m going to make the case for placing all the ledger&#8217;s logic, even its most foundational, in the application layer, and away from the database. When you do that, you&#8217;re one bug away from corrupting the books without the database to help you. But the reality is that ledger bugs can&#8217;t be prevented by database schemas unless you make these schemas so rigid that you lose the ability to adapt to the needs of the company.</p><p>In other words: database safety is an illusion.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>Seeing the tech stack as a business bet</p></li><li><p>Persistence ignorance as a mitigation mechanism for scale</p></li><li><p>The only valid way to ensure double-entry safety</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/why-database-layer-double-entry-is">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Only Accounting You Need to Know to Build a Ledger]]></title><description><![CDATA[5 use cases, 6 operations, and why your accounting course skipped the parts that matter to you.]]></description><link>https://news.alvaroduran.com/p/the-only-accounting-you-need-to-know</link><guid isPermaLink="false">https://news.alvaroduran.com/p/the-only-accounting-you-need-to-know</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 29 Apr 2026 12:08:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nSX3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nSX3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nSX3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nSX3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nSX3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nSX3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nSX3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:847328,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/195451078?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nSX3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nSX3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nSX3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nSX3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5a5e9fa-5c99-4d00-a4ac-12431f0afcde_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What do you do when you&#8217;re tasked with building a ledger? You sign up for an accounting course online.</p><p>That makes all the sense in paper: ledgers are financial systems, governed by accounting rules. Go learn your debits and credits, depreciations and equities, balance sheets and P&amp;L statements, and you&#8217;ll be ready to build.</p><p>Except that none of that will help you.</p><p>The reason is that accounting, as it&#8217;s usually taught, is universally aimed at accountants and financial analysts. And that means, to put it very simply, <strong>that accounting courses are taught so that you learn how to prepare financial statements</strong>. Yes, there&#8217;s way more to it, but the central point is either to learn to write them (for accountants that do their clients&#8217; taxes) or to read them (for analysts that track the value of companies).</p><p>And that&#8217;s not the accounting you need to build a ledger.</p><p>Every ledger system out there is built to support one of 5 use cases:</p><ul><li><p>Wallets</p></li><li><p>Marketplaces</p></li><li><p>Loyalty programs</p></li><li><p>Lending</p></li><li><p>Insurance</p></li></ul><p>The thing is, I own a copy of Accounting Information Systems, by Romney, Steinbart, Summers and Wood (16th edition!). It&#8217;s the book I bought when I realized that I had to fix a single-entry ledger that was losing track of users&#8217; money</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6f0d4c38-a09b-49b6-9df7-f706e5a1843f&quot;,&quot;caption&quot;:&quot;Not losing track of money is the bare minimum for fintech companies.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Engineers Do Not Get To Make Startup Mistakes When They Build Ledgers&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-09-11T07:03:52.397Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4356d89-8463-4b67-bf0a-90bc8e50bae8_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/engineers-do-not-get-to-make-startup&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148755990,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:38,&quot;comment_count&quot;:6,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>And although it&#8217;s the book ChatGPT would recommend you if you want to build financial systems, <strong>none of these use cases are covered</strong> in that book.</p><p>All case studies and lessons in that book are for accounting systems that need to keep their own organization&#8217;s finances, <strong>not for technology companies offering, or using, financial services for themselves or their users</strong>.</p><p>Sure, if you&#8217;re working at a company selling appliances and consumer electronics, the AIS book is what you need. </p><p>But if you move your users&#8217; money around, you&#8217;ve bought the wrong book.</p><p>I&#8217;m<a href="https://www.linkedin.com/in/alvaroduranbarata/"> Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. In today&#8217;s article, we&#8217;re going to cover, one by one, all the <em>actual</em> ledger use cases, and the accounting needed to handle them correctly:</p><ul><li><p>How they work</p></li><li><p>The operations needed</p></li><li><p>A quick real-world company that operates under that use case</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/the-only-accounting-you-need-to-know">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[There Are Only 3 Databases You Can Trust With Your Money]]></title><description><![CDATA[Why the most popular choices are the most risky, and which ones to choose instead.]]></description><link>https://news.alvaroduran.com/p/there-are-only-3-databases-you-can</link><guid isPermaLink="false">https://news.alvaroduran.com/p/there-are-only-3-databases-you-can</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 22 Apr 2026 10:38:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9W0p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9W0p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9W0p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9W0p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9W0p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9W0p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9W0p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2088707,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/194893667?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9W0p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9W0p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9W0p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9W0p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d69af9-64dc-4322-bcfa-36def75ecda0_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;The nature of promises, Linda&#8221;, Frank Underwood said <a href="https://www.youtube.com/watch?v=hs3iqvOKCvY">in the pilot of House of Cards</a>, &#8220;is that they remain immune to changing circumstances.&#8221;</p><p>He was talking about the president-elect&#8217;s promise to nominate him as Secretary of State, but we may feel the same outrage and betrayal about &#8220;open source&#8221; databases: Redis being BSD-licensed until 2025; Elasticsearch being Apache 2.0 until 2021; and MongoDB being AGPL until 2018.</p><p>Frank was wrong, of course.</p><p>Promises are not immune to changing circumstances. Open source databases have to face the pressure of two, in particular:</p><ul><li><p>Having a cloud provider like AWS productizing your database and eating your main source of funding (also known as getting <a href="https://www.youtube.com/watch?v=XZ3w_jec1v8">Jeff&#8217;d</a>)</p></li><li><p>Having the VCs you&#8217;ve raised funds from pressuring you into capturing the market instead of serving the community built around your database.</p></li></ul><p>Unlike choosing a logging library or a linter, the database is the foundation of financial systems because<strong> most money software&#8217;s value is derived from its data</strong>. Once a database is chosen and deployed in production, it becomes incredibly difficult and expensive to migrate away from.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;bd7ceb9b-1156-4605-8beb-083a36d06a61&quot;,&quot;caption&quot;:&quot;I find the expression &#8220;best tool for the job&#8221; disappointing.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Best Payments Database Is the One You Aren't Using&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-03-19T10:03:34.811Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c10b46dd-8362-4ba5-99d3-c731928763af_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/the-best-payments-database-is-the&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:159326319,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:2,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The problem, however, is made worse by the fact that engineers are often the least reliable judges when it comes to choosing databases.</p><p>Under the veil of &#8220;best tool for the job&#8221;, many engineers argue endlessly about what the best database is based on a combination of past experience, CV-driven development, and marketing. Confronted with a database choice, they go for the familiar, the shiny, or the coolest new thing.</p><p>And that&#8217;s how you get <a href="https://turso.tech/blog/introducing-limbo-a-complete-rewrite-of-sqlite-in-rust">SQLite rewritten in Rust</a>.</p><p>Engineers are often dismissive of marketing done to others, but are helpless to the marketing done to them: open source databases most likely to appear in the Stack Overflow Developer Survey are VC-funded<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p><p>The problem with the effectiveness of marketing is that <strong>the databases most likely to hurt you down the line are often the ones &#8220;most admired&#8221; and &#8220;most popular&#8221;</strong>. If engineers weren&#8217;t so susceptible, database choice would be more niche and less &#8220;general purpose&#8221;, and cloud providers wouldn&#8217;t be so prone to &#8220;Jeff&#8221; them. We probably wouldn&#8217;t have VC-funded databases to begin with.</p><p>But we would know which promises to trust.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. There is a lot of content out there on how to choose a database for money software. Most of it, however, is marketing. <em>The Playbook </em>is <strong>the only newsletter on Earth tailor-made for engineers of money software</strong>, which teaches you how to design money software, not to pass interviews, but to handle real users and real money.</p><p>Every week, more than 2,000 subscribers from companies like Stripe, Coinbase and Modern Treasury get a deep dive on how to build software that moves money around. </p><p>This week, we&#8217;re going to investigate one of the most crucial questions that every CTO must face before building money software:<strong> which database should I use?</strong> And since I can&#8217;t make that choice for you, because I don&#8217;t have your full context, today&#8217;s article is less about the database engine to pick, and more about which promises to believe.</p><p>Those that are immune to changing circumstances.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>What is Open Source Enclosure</p></li><li><p>The 3 categories you can choose a money database from</p></li><li><p>And why durably governed open source is rare (hint: that&#8217;s actually the point)</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/there-are-only-3-databases-you-can">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Nobody Got Fired for Uber's $8 Million Ledger Mistake?]]></title><description><![CDATA[LedgerStore became a case study for DynamoDB, and system design publications keep praising it to this day. But the design was abandoned 3 years after it went live.]]></description><link>https://news.alvaroduran.com/p/nobody-got-fired-for-ubers-8-million</link><guid isPermaLink="false">https://news.alvaroduran.com/p/nobody-got-fired-for-ubers-8-million</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 15 Apr 2026 11:52:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!t-tn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t-tn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t-tn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!t-tn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!t-tn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!t-tn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t-tn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2673923,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/193967466?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!t-tn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!t-tn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!t-tn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!t-tn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8fa04-8488-4534-a1a8-63158b84137a_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Uber has rewritten its ledger systems five times in the last ten years. And at least one of those rewrites, if not all, could have been avoided.</p><p>That&#8217;s because the root of each generation of money software at Uber was driven from bad incentives. Each started with a brand new proposal, approved as the definitive solution; in time, a fatal flaw was surfaced; and finally, a new proposal came along to replace it.</p><p>Every rewrite was someone&#8217;s promotion project.</p><p>At least one of them could&#8217;ve been avoided: the one where Uber moved to DynamoDB. In 2017, Uber launched their new payment platform on it, and the critical factor that everyone involved seemed to miss was that <em>DynamoDB is a consumption-priced database</em>.</p><p>You pay for every read, and every write.</p><p>With each trip generating multiple ledger entries, and Uber as a whole processing 15 million trips per day, it didn&#8217;t matter that DynamoDB was great because of high throughput at global scale. The proverbial bean counter should&#8217;ve stopped this madness from happening.</p><p>Within 2 years, the cost became prohibitely expensive:</p><blockquote><p>At Uber&#8217;s scale, DynamoDB became expensive. Hence, we started keeping only 12 weeks of data (i.e., hot data) in DynamoDB and started using Uber&#8217;s blobstore, TerraBlob, for older data (i.e., cold data). TerraBlob is similar to AWS S3. For a long-term solution, we wanted to use LSG.</p><p>&#8212; <a href="https://www.uber.com/us/en/blog/migrating-from-dynamodb-to-ledgerstore/">Migrating a Trillion Entries of Uber&#8217;s Ledger Data from DynamoDB to LedgerStore</a></p></blockquote><p>A redesign that gets replaced 2 years later is a catastrophe.</p><p>And yet, history remembers Uber&#8217;s ledger on top of DynamoDB as a masterpiece. As late as 2024, <a href="https://blog.bytebytego.com/p/trillions-of-indexes-how-ubers-ledgerstore">ByteByteGo has an article praising it</a>.</p><p>And that&#8217;s what concerns me. Uber&#8217;s design was a failure, but nobody seems to remember it that way.</p><p>That ends today.</p><p>I&#8217;m Alvaro Duran, and this is <em>The Payments Engineer Playbook</em>, <strong>the only newsletter on Earth tailor-made for engineers of money software</strong>. Every week, more than 2,000 subscribers from companies like Stripe, Coinbase and Modern Treasury get a dive deep on how to build software that moves money around. Not to pass interviews, but to <strong>do their job exceptionally well</strong>.</p><p>When money is on the line, stakes are sky high and the margin for error is razor thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful and more successful payments engineer. And we do that by cutting off one sliver of it and extracting insights from it.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>Why DynamoDB works for payments but breaks when you use it as a ledger</p></li><li><p>The napkin math that would have saved Uber millions of dollars</p></li><li><p>And one shocking conclusion from all of this</p></li></ul><p>Enough intro, let&#8217;s dive in.</p><h2>The Consistency Trap</h2><p>But first: is DynamoDB a bad choice for financial software?</p><p>Not necessarily. I&#8217;ve already <a href="https://news.alvaroduran.com/p/what-makes-dynamodb-a-good-database?utm_source=publication-search">covered DynamoDB as a potential data store for payment systems</a>, and it has many features that are worth it: zero-downtime migrations, low latency for a global audience, and built-in replication and failover.</p><p>If you&#8217;re accepting payments at scale around the globe, DynamoDB is a great choice.</p><p>It is because DynamoDB, while not enforcing full linearizability across partitions, can guarantee consistency within a Region. DynamoDB gives you strong consistency on a per-partition basis, but not across partitions &#8212; and for a global-scale payments system, that&#8217;s a trade-off worth making.</p><p>PostgreSQL can; DynamoDB cannot.</p><p>This is quite a property when it comes to payments, because they are independent from each other. You can interleave the authentication of one with the capture of another. There&#8217;s no need to maintain full linearizability across your data; causal consistency is enough. DynamoDB trades off the linearizability that you don&#8217;t actually need for all those nice features I mentioned earlier, which means that for large enterprises that serve customers all over the world in high volume and frequency, DynamoDB is better than PostgreSQL.</p><p>But a ledger isn&#8217;t a payments system.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;74364874-0ee5-4051-8a57-9ddff7c841cb&quot;,&quot;caption&quot;:&quot;You don&#8217;t know what a ledger is for.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;You Don't Know What a Ledger Is For&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-18T17:37:21.316Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!SsFp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191347022,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>A ledger cannot simply say &#8220;hey, this account and that account can be dealt with independently&#8221;. The scope of a ledger system is The World; a data store that can&#8217;t enforce full linearizability isn&#8217;t going to cut it, no matter how good at throughput and latency it is.</p><p>In other words: DynamoDB works well in payments because payments can give up global consistency for better availability. But ledgers can&#8217;t give up global consistency, even if that means they get worse availability.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;79f609a6-3796-460f-90ce-f9542dcf6863&quot;,&quot;caption&quot;:&quot;I find the expression &#8220;best tool for the job&#8221; disappointing.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Best Payments Database Is the One You Aren't Using&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-03-19T10:03:34.811Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c10b46dd-8362-4ba5-99d3-c731928763af_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/the-best-payments-database-is-the&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:159326319,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:2,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h2>The Napkin Math (Because Someone Has To Do It At Some Point)</h2><p><a href="https://aws.amazon.com/dynamodb/pricing/">DynamoDB capacity pricing</a> is based on two main models: Provisioned and On-demand. You can buy reads and writes in bulk, buy reads and writes when you need them, or both.</p><p>And then, there&#8217;s the storage and add-on features. For most, throughput is the real deal, and storage is just the cream on top of the invoice. But for data-heavy applications, such as ledgers, storage can become the dominant cost. That&#8217;s why reserving capacity is important, but it demands from you some predictive abilities, or at least making an educated guess about how much you&#8217;re going to need in advance, because you&#8217;re going to get a discount of more than 50 percent if you do it right.</p><p>If you use DynamoDB at scale, you need to do some napkin math.</p><p>In 2017, Uber was doing around 11 million trips a day. Assuming 10 entries per trip and 5 WCUs per entry<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>, that&#8217;s 550 million writes per day, and at $1.25 per million writes, that&#8217;s $687 per day.</p><p>$687 per day doesn&#8217;t sound like a lot. But <em>that&#8217;s $250K a year, just in writes</em>.</p><p>With 3x annual growth, the math is unsustainable: by year 3, we&#8217;re talking $2.25 million a year. I don&#8217;t have visibility into reads, indexes and global tables, but at Uber&#8217;s scale, the read side likely costs as much as the write side.</p><p>Which means that Uber was burning 5 million dollars in a freaking ledger.</p><p>Based on Uber&#8217;s data, by 2020 they had accumulated <a href="https://www.uber.com/us/en/blog/migrating-from-dynamodb-to-ledgerstore/">1.2 petabytes</a> of data. That, at $0.25 per gigabyte is 300K <em>per month</em>. And assuming the same 3x annual growth from 2017 to 2020 with a final size of 1.2 petabytes, that&#8217;s a cumulative cost of $3.5 million.</p><p>No wonder they switched to storing only the last 12 weeks of data in Dynamo, and stored the rest on premises.</p><p>Add the writes to the storage, and you&#8217;re looking at <strong>an 8 million dollar bill for a ledger</strong> that didn&#8217;t need to exist on DynamoDB in the first place.</p><h2>Somebody Should Have Been Fired For This</h2><p>What do you do with an 8 million dollar bill? You turn it into a case study.</p><p>Since 2020, Uber has migrated away from DynamoDB into their own internal ledger, called LSG (Ledger Store...Gateway?<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>), built on top of their own internal distributed database called <a href="https://www.uber.com/es/en/blog/schemaless-sql-database/?uclick_id=09609eaf-c5d1-4c8d-9d33-3fd6ee101ed3">DocStore</a>:</p><blockquote><p>Docstore is a general-purpose multi-model database that provides a strict serializability consistency model on a partition level and can scale horizontally to serve high volume workloads. Features such as Transaction, Materialized View, Associations, and Change Data Capture combined with modeling flexibility and rich query support, significantly improve developer productivity, and reduce the time to market for new applications at Uber.</p><p>&#8212; <a href="https://www.uber.com/es/en/blog/schemaless-sql-database/?uclick_id=09609eaf-c5d1-4c8d-9d33-3fd6ee101ed3">Evolving Schemaless into a Distributed SQL Database</a></p></blockquote><p>Why not use an open-source alternative? Because Uber builds in-house. That&#8217;s what Uber does.</p><p>You could argue that DocStore provided the features they needed in a way no other alternative could. But <a href="https://www.uber.com/es/en/blog/dynamodb-to-docstore-migration/">you would be wrong!</a></p><blockquote><p>Our homegrown Docstore was a perfect match for our database requirements, except for Change Data Capture (CDC) a.k.a., streaming functionality. [...] We decided to build a streaming framework for Docstore (project name &#8220;Flux&#8221;) and used that for LedgerStore&#8217;s Manifest generation.</p><p>&#8212; <a href="https://www.uber.com/es/en/blog/dynamodb-to-docstore-migration/">How Uber Migrated Financial Data from DynamoDB to Docstore</a></p></blockquote><p>So let me get this straight: DynamoDB was a bad choice because it was expensive, which is something you could have figured out in advance. You then decided to move everything to an internal data store that had been built for something else<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>, that was available when you decided to build on top of DynamoDB. And that internal data store wasn&#8217;t good on its own, so you had to build a streaming framework to complete the migration.</p><p>And nobody got fired for this?</p><p>But nobody was optimizing for cost. They were optimizing for their next promotion. Each rewrite was a new proposal, a new design doc, a new system to put on a resume. The incentive was never to pick the boring, correct choice &#8212; it was to pick the complex, impressive one.</p><p>This isn&#8217;t Metaverse-levels of disaster, but relative to Uber&#8217;s scale, gets pretty close.</p><h2>Catastrophes Disguised as Case Studies</h2><p>What bothers me the most is this: by 2019, it was painfully obvious that Uber had made a terrible decision when they built LedgerStore on top of DynamoDB.</p><p>And yet, when AWS invited Uber to present at re:Invent 2019, they said yes.</p><p>I&#8217;ve <a href="https://news.alvaroduran.com/p/cringey-but-true-how-uber-tests-payments">written about Uber&#8217;s testing practices before</a>, and praised them for it &#8212; the article hit the front of Hacker News.</p><p>But let&#8217;s call a spade a spade: when you actively disguise an atrocious decision as a case study for a database technology, you&#8217;re no less fraudulent than one of those hedge fund managers talking their book on TV.</p><p>It is the technological equivalent of an arsonist writing a fire safety manual.</p><p>On a second level, there&#8217;s the publications that regurgitated this case study without looking at the full picture: <a href="https://blog.bytebytego.com/p/trillions-of-indexes-how-ubers-ledgerstore">ByteByteGo</a> has an article on LedgerStore praising &#8220;The cost savings from this migration&#8221; with yearly savings &#8220;exceeding $6 million due to reduced spend on DynamoDB&#8221;.</p><p>I can&#8217;t possibly comment on this.</p><p>When you&#8217;re tasked with building a system of any kind, not just ledgers, the technology is never enough. If you&#8217;re building a system that makes the economics of your company impossible, <em>you&#8217;re better off not building it</em>.</p><p>Focusing solely on the technical requirements, and not seeing the costs, is a disservice to the business that employs you.</p><p>Uber didn&#8217;t make a ledger mistake. It set the wrong incentives.</p><p>And it paid millions of dollars for it.</p><p>This was <em>The Payments Engineer Playbook</em>. I&#8217;ll see you next week.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/nobody-got-fired-for-ubers-8-million?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Feel free to share this article with a system designer about to make a costly mistake.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/nobody-got-fired-for-ubers-8-million?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://news.alvaroduran.com/p/nobody-got-fired-for-ubers-8-million?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>At the risk of making this article become an interview question for McKinsey, here are my assumptions: A single ride must generate entries for the rider charge, the driver payout, the commission, taxes, insurance, payment processor fees, currency conversions... the right order of magnitude seems to be 10. The 5 WCUs is way shakier, but makes the math easy enough without having to use 10 WCU, which would be too much capacity for a single entry.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p><a href="https://www.uber.com/us/en/blog/migrating-from-dynamodb-to-ledgerstore/">One article</a> uses the LSG acronym, referencing <a href="https://www.uber.com/es/en/blog/dynamodb-to-docstore-migration/">another article</a> that doesn&#8217;t use it, and calls the new service LedgerStore, even though the name was already used for <a href="https://www.youtube.com/watch?v=iN6mhI5hFt4">the ledger built on top of DynamoDB</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Project Mezzanine, something so old (2014), the article no longer exists, and Wayback Machine didn&#8217;t archive it, but summarized <a href="https://www.uber.com/es/en/blog/schemaless-part-one-mysql-datastore/?uclick_id=09609eaf-c5d1-4c8d-9d33-3fd6ee101ed3">in this article</a> as &#8220;how we migrated Uber&#8217;s core trips data from a single Postgres instance&#8221;.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Ledger Transactions Don't Have to Be Atomic]]></title><description><![CDATA[Up-in-the-airness, and looking at ledgers through the lens of Sagas]]></description><link>https://news.alvaroduran.com/p/ledger-transactions-dont-have-to</link><guid isPermaLink="false">https://news.alvaroduran.com/p/ledger-transactions-dont-have-to</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 08 Apr 2026 15:33:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5ZRJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5ZRJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1433419,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/193553859?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5ZRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4929e989-6677-4280-9567-9850a6c58862_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Financial transactions aren&#8217;t database transactions.</p><p>Sure, they are <em>the inspiration for</em> database transactions. Turing Award-winner <a href="https://en.wikipedia.org/wiki/Jim_Gray_%28computer_scientist%29">Jim Gray</a> defined the standard measure of database transaction processing <a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2005/04/tr-2005-39.pdf">in terms of debits and credits</a>. They also follow a layman&#8217;s intuition that, when money leaves an account, it immediately arrives at another.</p><p>But that&#8217;s not what usually happens.</p><p>When you make a transfer from your bank account, those funds almost always <em>take some time to arrive</em>. It may be a few seconds, or a business day, or a whole month (if your bank is settling payments made to you in Brazil<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>). </p><p>What happens during that time is <em>treasury</em>. Whoever is holding the funds in transit can use them as a (very) short-term collateral. It can deposit them and earn some interest, it can use them to improve their cash-flow, it can do as they please, as long as the funds arrive where they&#8217;re supposed to, when they&#8217;re supposed to.</p><p>That&#8217;s not how database transactions work at all.</p><p>Nevertheless, modeling ledger transactions as atomic units can work fine. You wrap debits and credits, make sure they&#8217;re double-entry safe, and work under the assumption that all those entries are all pending, or all posted. And if something goes wrong, you archive those entries, knowing that you don&#8217;t have to do anything else. It&#8217;s clean, safe, and predictable.</p><p>You may very well do that; Stripe doesn&#8217;t.</p><p>Stripe processes billions of events per day through a system they call <a href="https://stripe.dev/blog/ledger-stripe-system-for-tracking-and-validating-money-movement">Ledger</a>. And in Ledger, they don&#8217;t assume that both sides of a money movement arrive together. After all, they don&#8217;t have to come from the same service, or in the same order. Each event is its own thing, with its own timestamp, source system, and moment of arrival; the only thing they share is an identifier.</p><p>That&#8217;s one limitation we already saw in stock markets: the risk of quickness versus completeness.</p><blockquote><p>This risk is central to stock market systems. In order to scale, multiple matching engines are running in parallel, processing massive amounts of buy and sell orders with low latency. As soon as two orders are crossed (a buy order matches a sell order for a given price), there&#8217;s an execution, and that information gets disseminated quickly and fairly.</p><p>But what if something <em>bad</em> happens? What if regulators step in and ask &#8220;what happened here <em>first</em>&#8221;?</p><p>Like, two buy orders for the same price get sent at the same time by two traders, but one gets crossed and the other doesn&#8217;t, or does at a higher price.</p><p>How can you be sure that you were fair to both orders? Which one is &#8220;technically first&#8221;?</p><p>That, weirdly enough, is an ambiguous question. Because you haven&#8217;t clarified which notion of time is being used to sort the orders.</p></blockquote><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;21a03b2e-3086-49e9-8e91-2f5c63f24caa&quot;,&quot;caption&quot;:&quot;I find Feynman&#8217;s quote that &#8220;nobody understands quantum mechanics&#8221; a bit silly.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;From Stock Markets To Ledgers, Part III: Time&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1153821,&quot;name&quot;:&quot;Alvaro Duran&quot;,&quot;bio&quot;:&quot;Every stroke contributing to the point of the painting.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d227a4d-6bf5-4798-86e2-23020700e54a_3024x4032.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-19T11:17:05.154Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9363d0b6-94f3-4ab7-8fbe-e37880e0951b_1920x1080.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://news.alvaroduran.com/p/from-stock-markets-to-ledgers-part-f5f&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:179234238,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1699418,&quot;publication_name&quot;:&quot;The Payments Engineer Playbook&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8YPL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a99386-e8f8-4abb-9e8c-4bc7e19c93df_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>It&#8217;s not that transactions in a ledger can&#8217;t be atomic; they can. It&#8217;s that you don&#8217;t need them to.</p><p>And the real question is: <strong>what are you missing out when you force transactions to be atomic?</strong></p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>, <strong>the only newsletter on Earth tailor-made for engineers of money software</strong>. Every week, more than 2,000 subscribers from companies like Stripe, Coinbase and Modern Treasury get a dive deep on how to build software that moves money around. Not to pass interviews, but to <strong>do their job exceptionally well</strong>.</p><p>When money is on the line, stakes are sky high and the margin for error is razor thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful and more successful payments engineer. And we do that by cutting off one sliver of it and extracting insights from it.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>Why computer science trained us to think of transactions as atomic, and why that assumption breaks down in distributed ledgers</p></li><li><p>How Stripe&#8217;s Ledger posts individual entries instead of atomic transactions, and gets away with it</p></li><li><p>The trade-offs between atomic and non-atomic models, and when to pick which</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/ledger-transactions-dont-have-to">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Luxury Playbook for Online Businesses]]></title><description><![CDATA[Introducing a different kind of playbook for a different kind of startup]]></description><link>https://news.alvaroduran.com/p/what-approach-to-building-an-online</link><guid isPermaLink="false">https://news.alvaroduran.com/p/what-approach-to-building-an-online</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 01 Apr 2026 09:00:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9azf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9azf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9azf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9azf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9azf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9azf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9azf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1501249,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/192743904?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9azf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9azf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9azf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9azf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f62ac0-1a28-44f0-af5c-525c810083cf_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There&#8217;s a playbook for building successful companies that contradicts everything Paul Graham ever wrote.</p><p>Most business advice, what circulates on X, on Hacker News, and on Youtube, is modeled on <a href="https://paulgraham.com/articles.html">PG&#8217;s essays</a>. &#8220;A startup is a company designed to grow fast&#8221; (<a href="https://paulgraham.com/growth.html">Startup = Growth</a>); &#8220;the main value of whatever you launch with is as a pretext for engaging users&#8221;; &#8220;put a big piece of paper on your wall and every day plot the number of users&#8221; (<a href="https://paulgraham.com/13sentences.html">Startups in 13 Sentences</a>).</p><p>But the reality is that there are companies out there designed to grow slow, to launch late, and to deliberately restrict sales, that not only survive, but thrive.</p><p>The tech industry business model feels played out. Silicon Valley is both a place and <a href="https://en.wikipedia.org/wiki/Silicon_Valley_(TV_series)">a comedy show</a>. It has grown so much that we now have a term for the point when these platforms have gone too far: <strong>enshittification</strong>.</p><blockquote><p>Here is how platforms die: first, they are good to their users; then they abuse their users to make things better for their business customers; finally, they abuse those business customers to claw back all the value for themselves. Then, they die. I call this <em>enshittification</em>, and it is a seemingly inevitable consequence arising from the combination of the ease of changing how a platform allocates value, combined with the nature of a &#8220;two-sided market&#8221;, where a platform sits between buyers and sellers, hold each hostage to the other, raking off an ever-larger share of the value that passes between them.</p><p>&#8212; Cory Doctorow, <a href="https://www.wired.com/story/tiktok-platforms-cory-doctorow/">The &#8216;Enshittification&#8217; of TikTok</a></p></blockquote><p>But as far as I can tell, nobody has articulated an alternative way of building online businesses. There&#8217;s a collective aloofness in the industry about this: &#8220;sure, enshittification is bad,&#8221; they seem to say, &#8220;but it&#8217;s the only way to build a startup.&#8221;</p><p>PG&#8217;s advice is battle tested: if you ignore his essays, you&#8217;re probably going to fail. But I argue that you can do something else: <strong>not to ignore PG, but to deliberately disobey him</strong>.</p><p>Let us call that approach <em>The Luxury Playbook</em>.</p><p>I&#8217;m <a href="https://es.linkedin.com/in/alvaroduranbarata">Alvaro Duran</a>, and you know I like playbooks. This article of <em>The Payments Engineer Playbook</em>, however, isn&#8217;t about the technology that moves money around. Today is April Cools: <a href="https://www.aprilcools.club/">a celebration of what doesn&#8217;t fit the mold</a>, so instead, I&#8217;m discussing business strategy.</p><p>But not your usual MBA pablum.</p><p>Since most startup founders learn how to build businesses from tech adjacent media, they usually treat PG&#8217;s advice as gospel. Thus, alternative approaches are poorly understood and underutilized in tech, and <strong>for exactly that reason, can be a secret weapon </strong>for those who wield them.</p><p>This is tricky advice, though. Most investors won&#8217;t understand it either, so funding will be more difficult. This article therefore has two main goals:</p><ul><li><p>To make you understand The Luxury Playbook and apply it to your company.</p></li><li><p>To be a reference for investors who want to fund companies using this approach.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">To receive new articles and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Enough intro, let&#8217;s dive in.</p><h2>Make Something People Want, and then what?</h2><p>It is impossible to build a successful business if you don&#8217;t make something people want.</p><p>That&#8217;s why both luxury brands and startups are, initially, very much alike. They both reject building for &#8220;everyone&#8221;, because that&#8217;s the same as building for no one. And both are designed to amplify the intensity of their founders.</p><p>Startups call it &#8220;founder mode&#8221;. But luxury founders go as far as naming their companies after them: Ferrari, Herm&#232;s, Yves Saint Laurent, Beats by Dr. Dre.</p><p>So the startup and the luxury brand agree on the starting conditions: make something real, stay close to it, and find Product Market Fit.</p><p>What separates them is what happens next.</p><p>The startup, once PMF is achieved, treats it as a milestone. From then on, it&#8217;s all about growth, speed, and distribution. The luxury brand, however, treats PMF as a horizon. Startups leave product market fit behind; luxury brands never fully reach it.</p><h2>Luxury As The Anti-Playbook</h2><p>You probably don&#8217;t dream of buying a <a href="https://en.wikipedia.org/wiki/Birkin_bag">Birkin bag</a>.</p><p>But Samantha from <em>Sex and the City</em> can&#8217;t simply pay $4,000<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> to get it. It&#8217;s not that she can&#8217;t afford it; it&#8217;s that she has to wait 5 years.</p><div id="youtube2-GDKmQP_vDOY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;GDKmQP_vDOY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/GDKmQP_vDOY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Luxury seems to operate in a completely different universe: rising prices famously spur demand (economists call these <a href="https://en.wikipedia.org/wiki/Veblen_good">Veblen goods</a>), websites do not show the price of the items, and physical shops are empty most of the time, usually because there&#8217;s a bouncer at the door.</p><p>Paul Graham&#8217;s advice is widespread <em>because it makes sense</em>. People understand in their bones that the right product must win, that being close to the users is a good thing, and that charts going up and to the right are indications of valuable companies.</p><p>On the other hand, Ferrari cars are uncomfortable, way too expensive, and you have to wait a few years to get one. </p><p>And yet, every kid wants a red car for Christmas, and every man wants a red Ferrari when they turn 40.</p><h3>Different concepts of value</h3><p>Luxury brands aren&#8217;t built to maximize growth. But that doesn&#8217;t mean they don&#8217;t make sense. Growth, for startups, vindicates the product. It&#8217;s evidence that a lot of people value what they&#8217;re selling.</p><p>Luxury brands, however, maximize the desirability of the product. It is very much the way consultants sell their services, and it&#8217;s not a coincidence. Luxury products have delayed gratification built in, which justifies the price in the mind of the buyer.</p><p>Startups make something PEOPLE want; luxury brands make something people WANT.</p><h3>Move fast, or never break things</h3><p>A <a href="https://en.wikipedia.org/wiki/Cartier_Tank">Cartier Tank watch</a> you buy today is largely unchanged to the one introduced in 1918.</p><p>Startups iterate and move fast. Their founders understand that every iteration is both a product to sell and a quest for market data; continuous change refines it, adapts to the changing environment, and sharpens the model of its ideal customer.</p><p>Luxury sees frequent change as instability, and the product as a promise. The Rolex you&#8217;ve waited years to buy isn&#8217;t just for yourself; in time, your kid will grow up, and you&#8217;ll give it to them, as if to pass the baton.</p><p>Startups move fast; luxury brands make timeless things.</p><h3>Feedback as contamination</h3><p>Startups iterate quickly, because the point is to gather feedback.</p><p>Their founders have gaps in their knowledge. These gaps are hard to spot, because your brain papers over them with assumptions. It is best to find paying customers, and figure out as much as you can from them, invade their privacy if required, so that the product feels tailor made to the ideal customer.</p><p>Luxury brands could not care less about that.</p><p>Obsessive attention to users is anathema in luxury. The creative genius is the source of all product decisions, and customers have little to say about that. A luxury brand dominates their customers the way a parent dominates their kids: &#8220;this is what is best for them, even if they don&#8217;t like it at first.&#8221;</p><p>Startups build bottom-up; luxury brands build top-down </p><h3>The value of friction</h3><p>Stripe&#8217;s entire thesis was to accept payments &#8220;in 7 lines of code&#8221;.</p><p>Nascent companies often position themselves against a big, but well-known competitor. Inertia and status quo are their biggest barriers to growth, and friction is the conversion killer. Startups, therefore, iterate on the way users interact with their product and remove friction every step of the way.</p><p>You can&#8217;t have startups without User Experience.</p><p>Luxury, on the other hand, embraces friction. <strong>A dream is the negation of the obstacle to attain the desire</strong>, but the obstacle must be there, and it must hurt. It is precisely the fact that not many people can have what you&#8217;re buying that makes it valuable. It says something about why you&#8217;re not just like anybody else.</p><p>Startups search for a moat in their business; luxury brands build a moat in their products.</p><h2>What this means for online businesses</h2><p>The luxury logic can&#8217;t be confined just to handbags, watches and sports cars. </p><p>One of the reasons I&#8217;ve been obsessed with luxury recently is because I have a thesis of my own: that luxury can be applied to online businesses, and digital products.</p><p>Since in digital markets the marginal cost of selling a product is near zero, everything naturally drifts towards commoditization. Things are free to sell, so we might as well give you cat videos for free, and aggressively pay for it with ads.</p><p>But this can&#8217;t be the only way to build successful businesses online. <strong>I have a visceral reaction to pointless ads</strong>. So, I&#8217;ve been mulling over this idea of online businesses that eschew commoditization.</p><p>And that brought me to luxury.</p><p>Luxury is taste, and there isn&#8217;t anything as tasteless as advertising. Therefore, online luxury brands, if they exist, build on the ideas I&#8217;ve described:</p><ul><li><p>Maximize the desirability of the product, not the user count</p></li><li><p>Move slowly, and expand their offering only when it adds to the overall experience</p></li><li><p>Manufacture scarcity, even when the Internet has removed it</p></li></ul><p>And you know what? I believe they exist, even if they don&#8217;t call themselves luxury. In fact, I believe that the first luxury digital product that has ever existed was the Bloomberg Terminal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6qof!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6qof!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6qof!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6qof!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6qof!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6qof!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Getting Started - How do I use Bloomberg - Research Guides at Singapore ...&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Getting Started - How do I use Bloomberg - Research Guides at Singapore ..." title="Getting Started - How do I use Bloomberg - Research Guides at Singapore ..." srcset="https://substackcdn.com/image/fetch/$s_!6qof!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6qof!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6qof!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6qof!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6369cf1e-612d-47d9-b4a5-50b2fb8ef5ec_1024x1024.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The Terminal is an informational product, accessed online, that signals that your financial company means business, and that it&#8217;s profitable enough to afford the price tag: $30,000 per user per year.</p><p>Why so expensive? Well, why not? Wall Street pays a premium for high-quality business information, delivered instantly, and that&#8217;s become even more true over time.</p><p>The Terminal is complex, intentionally dense, not optimized for casual users. And yet, sales from the Terminal account for <a href="https://web.archive.org/web/20120105091916/http://www.wallstreetandtech.com/trading-technology/229400082">more than 85 percent of the company&#8217;s revenue</a>. The product itself is largely unchanged since its inception in 1982. Sure, &#8220;if it ain&#8217;t broke, don&#8217;t fix it.&#8221; But that sounds a lot like a Cartier watch.</p><p>Bloomberg made financial data feel like a professional credential. A founder following Paul Graham&#8217;s advice would have never invented the Bloomberg Terminal.</p><p>Superhuman is a more recent and interesting case. It launched with a wait-list, onboarding gatekeeping, and a high price for an email client.</p><p>That scarcity worked as a growth mechanism in the early days; everyone wanted in, precisely because not everyone could get in.</p><p>And yes, eventually Superhuman abandoned scarcity in order to keep growing. But that doesn&#8217;t invalidate the luxury approach. Superhuman simply abandoned it.</p><p>What does a digital product that remains faithful to The Luxury Playbook look like?</p><h2>Beyond Y Combinator</h2><p>Graham&#8217;s advice is not wrong. Making something people want is a valid way of building startups.</p><p>But I&#8217;m just tired of it. I&#8217;m tired of the same kind of CEO, selling their product onstage, sporting a black turtleneck in my memory, even when they actually dressed in something else.</p><p>I&#8217;m tired of a business model that puts the online user at odds with the company in order to build a business moat. Of treating users as the product, then customers as the product, then even the shareholders as the product.</p><p>The Startup Playbook feels played out at this point.</p><p>It&#8217;s time for companies to test if The Luxury Playbook makes sense for them. It&#8217;s not that the odds are in their favor anyway. So they might as well try something different.</p><blockquote><p>In a big company, you can do what all the other big companies are doing. But a startup can't do what all the other startups do. I don't think a lot of people realize this, even in startups.</p><p>&#8212; Paul Graham, <a href="https://paulgraham.com/avg.html">Beating the Averages</a></p></blockquote><p>The choice between the two playbooks is a choice about the kind of value you want to create in the world. The Luxury Playbook is the natural consequence of people <a href="https://www.are.na/editorial/notes-on-taste">taking taste more serious</a>ly.</p><p>Go make your taste a differentiator.</p><p>This is it for this week in The Payments Engineer Playbook. I&#8217;ll see you next week.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/what-approach-to-building-an-online?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading The Payments Engineer Playbook! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/what-approach-to-building-an-online?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://news.alvaroduran.com/p/what-approach-to-building-an-online?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><p><strong>PS</strong>: You&#8217;ve come this far, I have some secret to share with you.</p><p>I&#8217;ve written this article with a not-so-secret question in mind: <em>how can I turn my newsletter into a luxury brand?</em></p><p>And after writing it, I&#8217;m convinced that newsletters are the perfect playground for building luxury brands online. This, as I said, is somewhat uncharted territory, and that&#8217;s why the most well-known publications out there are funded with ads, not with paid subscribers.</p><p>In this new model, newsletter articles are more like bottles in a wine cellar. That&#8217;s why they&#8217;re paywalled: because subscribers are the newsletter&#8217;s patrons.</p><p>I&#8217;m deliberately turning <em>The Payments Engineer Playbook</em> into something much more exclusive and much more valuable for a smaller set of highly interested individuals. <em>The Playbook</em> is the only newsletter on Earth tailor-made for engineers who build money software, and I want to speak to those who want to do their job exceptionally well.</p><p>For that reason, I&#8217;m putting together a Flagship Membership.</p><p>It&#8217;s going to be expensive, and it&#8217;s going to demand work from you. But it&#8217;s going to be worth your money and your time.</p><p>If you&#8217;re interested, please <a href="https://forms.gle/QgLyWcgZ7cMjdXF58">write down your name and your email in this form</a>, and I&#8217;ll be in touch.</p><p>I&#8217;ll see you around.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>It&#8217;s around 45,000 nowadays.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Why Ledgers Are More Than Data Warehouses of Money]]></title><description><![CDATA[And why integrity, not double-entry, is the foundation of financial software]]></description><link>https://news.alvaroduran.com/p/why-ledgers-are-more-than-data-warehouses</link><guid isPermaLink="false">https://news.alvaroduran.com/p/why-ledgers-are-more-than-data-warehouses</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 25 Mar 2026 10:01:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vkW_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vkW_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vkW_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vkW_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vkW_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vkW_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vkW_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2076656,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/192044590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vkW_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vkW_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vkW_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vkW_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf82565d-64cc-404c-b708-4a2b4f9b2698_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Data warehouses are poor implementations of ledgers.</p><p>You may think that, since all a ledger does sometimes is store money data, you can do away with all the complexity that ledgers require (namely, append-only tables) and use a data warehouse to store all your company&#8217;s financial data.</p><p>This is a mistake. The purpose of a ledger isn&#8217;t simply to store financial data.</p><p>A ledger that only stores data is doomed to fail because, in finance, the history is as important as the end state. When auditors and financial analysts look at a company&#8217;s finance, they want to make sure that the numbers don&#8217;t simply look good, but also tell a good story.</p><p>A bad history with a good look has a name: fraud.</p><p>The purpose of a ledger isn&#8217;t to store money data, but to store its history. We call that integrity: the ability to see what the ledger looked like, and query its accounts&#8217; balances, <em>now and at any point in the past</em>.</p><p>Actually, accountants often get this backwards: it is integrity that leads to double-entry, not the other way around.</p><p>Ledgers, first, have integrity, and then they enforce double-entry.</p><p>This is <em>The Payments Engineer Playbook</em>, <strong>the only newsletter on Earth tailor-made for engineers of money software</strong>. Every week, more than 2,000 subscribers from companies like Stripe, Coinbase and Modern Treasury get a dive deep on how to build software that moves money around. Not to pass interviews, but to <strong>do their job exceptionally well</strong>.</p><p>When money is on the line, stakes are sky high and the margin for error is razor thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful and more successful payments engineer. And we do that by cutting off one sliver of it and extracting insights from it.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>Why immutability is a tool to verify integrity</p></li><li><p>Why double entry is its natural consequence</p></li><li><p>How to achieve consistent historic reads even when you apply compensating entries</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/why-ledgers-are-more-than-data-warehouses">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[You Don't Know What a Ledger Is For]]></title><description><![CDATA[You think you do, but you don't]]></description><link>https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for</link><guid isPermaLink="false">https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 18 Mar 2026 17:37:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SsFp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SsFp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SsFp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SsFp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SsFp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SsFp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SsFp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1830216,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/191347022?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SsFp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SsFp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SsFp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SsFp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde1893fc-b380-4027-9f46-ffab15ff1435_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You don&#8217;t know what a ledger is for.</p><p>You think you do, but you don&#8217;t. You&#8217;re aware that ledgers &#8220;keep accountants happy&#8221; and that &#8220;keep track of money across the business.&#8221; But your company has been doing just fine without one, so it&#8217;s not entirely clear why all of a sudden it would need one.</p><p>If you don&#8217;t know what a ledger is for, then having one is pointless.</p><p><strong>Not knowing what a ledger is for has disastrous consequences</strong>, whether you&#8217;re a manager or an executive. Managers who don&#8217;t know what ledgers are for can&#8217;t get their projects approved; executives who don&#8217;t know what ledgers are for build ineffective ones.</p><p>Vague awareness of what a ledger is for isn&#8217;t enough. Only when you know <em>precisely</em> how a ledger fits within the context of your business, the project gets approved, the engineers understand the goal, and the resulting system is very effective, unlocking new avenues of growth and better financial planning and analysis.</p><p>But you don&#8217;t know what a ledger is for.</p><p>Let&#8217;s change that.</p><p>This is <em>The Payments Engineer Playbook</em>, <strong>the only newsletter on Earth tailor-made for engineers of money software</strong>. Every week, more than 2,000 subscribers from companies like Stripe, Coinbase and Modern Treasury get a dive deep on how to build software that moves money around. Not to pass interviews, but to <strong>do their job exceptionally well</strong>.</p><p>When money is on the line, stakes are sky high and the margin for error is razor thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful and more successful payments engineer. And we do that by cutting off one sliver of it and extracting insights from it.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>Why ledgers suddenly go from pointless to top priority at many startups</p></li><li><p>The Accounting-Engineering tension at the core of every ledger</p></li><li><p>Why all ledgers have to fulfill at least one of 4 use cases</p></li><li><p>How to know if your company needs one</p></li></ul><p>Enough intro, let&#8217;s dive in.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">To receive new articles every week, become a subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Money is a Skill</h2><p>Money requires judgement, accuracy, and ownership.</p><p>Knowing how much you have in the bank is good, but not enough. The skill of money means acquiring the capacity to understand how money was used in the past, what insights to gather from that usage now, and how to make the most of what you have in the future.</p><p>In other words: the skill of money is about cash flow, budgeting and ROI. And these subskills are built incrementally.</p><p><strong>In the beginning, startups don&#8217;t require ledgers at all</strong>, because the only metric that matters is &#8220;the runway&#8221;. Just as airplanes need a runway of a minimum length to take off, startups must have enough cash to reach Product-Market Fit. The only money skill that matters at this stage is &#8220;how much time can I buy with the expenses I have right now?&#8221;.</p><p>The 70 percent of startups that don&#8217;t get to achieve PMF don&#8217;t get to build a ledger either.</p><p>The startups that live to tell the tale <strong>face a more sophisticated money problem</strong>: how to make the most with what they have. Past survival, every post-PMF startup&#8217;s CEO has to allocate their money in such a way that the company achieves explosive growth. Sales are no longer founder led, employees cannot simply &#8220;do things that don&#8217;t scale&#8221;, and engineers have to titrate up the software used to satisfy customers&#8217; needs.</p><p>Given the opportunities opened by product-market fit, the money skill that matters is &#8220;how much money do I allocate on each opportunity to achieve the most growth?&#8221;.</p><p>This is <strong>the part where, all of a sudden, knowing where the money goes, and what for, becomes necessary</strong>. And, depending on the complexity of the money flows, whether having everything on a spreadsheet will cut it, or whether a fully-fledged system is required.</p><p>What ends up happening is often a mix of the two: money inflows are tracked in a PSP dashboard, and the codebase preserves some data regarding transactions on their database, with some basic reporting built on top. This is good: the last thing you want is to waste everybody&#8217;s time getting strict with your finances at the expense of the startup&#8217;s actual goals.</p><p>However, there&#8217;s a point when startups can no longer ignore their finances anymore, because profit starts to become as important as revenue. Past a threshold, and every startup has it, ROI suddenly creeps into every conversation with investors.</p><p>Growth isn&#8217;t the only thing that matters. And, by then, if you don&#8217;t have a ledger in place, you&#8217;ll be falling behind.</p><h2>The Accounting - Engineer Tension</h2><p>At scale, there&#8217;s a tension between correctness and edge cases.</p><p>When a company starts handling a large volume of transactions, across multiple accounts, currencies, or business units, tracking balances manually with a spreadsheet becomes <strong>inefficient, error prone and opaque</strong>. At that point, a ledger system provides a structured, auditable way to record everything money-wise, ensuring accuracy, clarity and compliance.</p><p>Some companies never reach this stage though. That&#8217;s why most of us don&#8217;t need a ledger to manage our finances: there&#8217;s X amount in the bank, we know the outstanding credit card debt, and your precise portfolio balance doesn&#8217;t really matter in your daily life. In simpler businesses with few accounts and minimal volume, building a ledger is unwarranted.</p><p>If a spreadsheet is enough, <strong>use a spreadsheet</strong>. Ledger adoption is a matter of timing and scale.</p><p>Spreadsheets work because they&#8217;re simple, and simplicity is a great tool for correctness. Having your finances right in front of you is the best way to spot errors and missteps. It is not the lack of features what makes a spreadsheet inferior to a ledger system. Rather, it is the complexity and the scale of the business that makes a simple, but human dependent tool, unwieldy.</p><p>This is the tension between the Accounting and Engineering systems within the ledger: accounting is focused on correctness and precision; engineering is focused on scale and throughput. A ledger system provides (and demands) both. If manual work at low scale is sufficient, choose the spreadsheet.</p><p>This tension is also the biggest reason why ledgers don&#8217;t get adopted until late: its necessity is felt by accountants, not engineers.</p><h2>When to ditch the spreadsheet and build a ledger</h2><p>Here&#8217;s a good framework for deciding whether to build a ledger for your company:</p><p>1. <strong>Transaction Volume</strong>: Your company is approaching 1,000 transactions per month</p><p>2. <strong>Audit Readiness</strong>: Your company takes around 40 hours of man-work to close the book for the quarter.</p><p>3. <strong>Error rates</strong>: Your company consistently has at least 1 percent discrepancy rate (as in &#8220;1 in 100 transactions aren&#8217;t correct down to the cent).</p><p>4. <strong>Reconciliation Effort</strong>: Your company&#8217;s finance team spends 20 percent of their day in reconciliation.</p><p>5. <strong>Forecasted Growth</strong>: Your company&#8217;s transaction volume is projected to grow more than 50 percent in the next year.</p><p>These indicators are different manifestations of the same need, and often reinforce each other. They&#8217;re symptoms of scale, and signal that your company will soon need a more rigorous approach to its finances.</p><h2>A ledger isn&#8217;t an accounting tool</h2><p>Ledgers aren&#8217;t compliance checkboxes.</p><p>A ledger is a system that builds the skill of money in your company. In the beginning, it may look like a ledger answers the question &#8220;where did money go?&#8221;.</p><p>But the trick is that, when built correctly, a ledger ends up answering &#8220;where should money go next?&#8221;.</p><p>Startups that treat money as a skill build ledgers slightly before they need them. Their executives are aware of the usefulness of spreadsheets, but can look into the future and see the necessity for budgeting and ROI conversations.</p><p>In other words: they see beyond revenue growth, and the inevitable refocus to profit.</p><p>This is it for this week in <em>The Payments Engineer Playbook</em>. I&#8217;ll see you next week.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">This article is public so feel free to share it with a colleague.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://news.alvaroduran.com/p/you-dont-know-what-a-ledger-is-for?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[How to Explain Accounting To Payments Engineers]]></title><description><![CDATA[The limitations of the use of UML-like diagrams to model financial transactions]]></description><link>https://news.alvaroduran.com/p/how-to-explain-accounting-to-payments</link><guid isPermaLink="false">https://news.alvaroduran.com/p/how-to-explain-accounting-to-payments</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 11 Mar 2026 12:31:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xz12!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xz12!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xz12!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xz12!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xz12!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xz12!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xz12!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1930582,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/190601596?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xz12!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xz12!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xz12!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xz12!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3b3d92a-5b9c-421f-94b6-3a96ea6f21bc_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;m not a visual learner.</p><p>When I onboard into a new team, and I go through all the available documentation, the hardest part for me is understanding the system diagrams. These invariably consist of many boxes representing entities, or even individual services, linked to each other by interactions (HTTP or SSE requests, Kafka queues, you name it) represented by arrows. They always leave me more confused than before.</p><p>I&#8217;m not a visual learner. But the thing is: neither are you.</p><p>The biggest clue I have as to why is the fact that nobody seems to be bothered when I ask further clarifications about the diagram. Elaboration is expected. Despite the thoroughness of the engineer who spent all that time putting those diagrams together, it is never enough: a meeting to make those diagrams resonate is assumed to be needed.</p><p>Diagrams never seem to be enough. At best, they make meetings shorter. At worst, they waste everybody&#8217;s time.</p><h3>The  Cognitive Style of the Miro board</h3><p>Arrows and boxes aren&#8217;t completely useless, though.</p><p>They&#8217;re very effective for conveying flow, which is why they get used all the time by people already onboarded. Diagrams are good reminders for how components interact, aiding in high level system design. You&#8217;re able to see all at once.</p><p>But the more sophisticated, multivariate, and formal your task is, the more damaging the arrows and boxes become.</p><p>That description fits accounting like a glove: although cash is intuitive and simple, it is only a fraction of what a ledger has to keep track of. Accounting is the process of tracking ownership, not money, over time. And ownership isn&#8217;t concrete enough to be stored in boxes, and moved with arrows.</p><p>Arrows and boxes serve engineers when they map code flows. No argument there. But their visual emphasis is misleading when it comes to accounting.</p><p>This week, we&#8217;re looking at the limitations of arrows and boxes to explain accounting to engineers. I should know: a significant part of my job consists of clarifying accounting to engineers, from the very junior to the CTO. And, being an engineer myself, I initially used arrows and boxes to try to convey how to represent common use cases in accounting terms.</p><p>No longer. When you step into accounting, arrows and boxes are glorified squiggles.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to do your job exceptionally well</strong>. Especially as a payments engineer, where stakes are sky high, and the margin for error is razor thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful and more successful payments engineer. And we do that by cutting off one sliver of it and extracting insights from it.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>The shift from &#8220;moving money&#8221; to &#8220;transferring ownership&#8221;</p></li><li><p>Why using arrows to represent balance changes is confusing</p></li><li><p>The &#8220;arrow from the outside&#8221; misconception</p></li><li><p>And a better alternative to diagrams to explain accounting </p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/how-to-explain-accounting-to-payments">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Why Ledgers Must be Immutable]]></title><description><![CDATA[Ledgers are a &#8220;get your shit together&#8221; tool.]]></description><link>https://news.alvaroduran.com/p/why-ledgers-must-be-immutable</link><guid isPermaLink="false">https://news.alvaroduran.com/p/why-ledgers-must-be-immutable</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 04 Mar 2026 17:16:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j6KV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j6KV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j6KV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!j6KV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!j6KV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!j6KV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j6KV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2171647,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/189889349?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j6KV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!j6KV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!j6KV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!j6KV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc7a719-3e37-4557-9da4-7749d540a922_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ledgers are a &#8220;get your shit together&#8221; tool.</p><p>The goal isn&#8217;t to record account balances, or where money comes and goes. A ledger&#8217;s purpose is <strong>to make the company trustworthy</strong>. All the strictness and the weird complexity isn&#8217;t to make life harder for engineers, or to prevent software bugs, but to keep accountants and auditors happy.</p><p>If a ledger can&#8217;t be trusted, neither can the company.</p><p>In order to interact with your ledger, all the other services have to make sure that they&#8217;re sending the right data in the right way. Sure, you can create a translation layer between the other services and the ledger, but that defeats its purpose: a service that initiates, validates, or completes money movements must be, implicitly, as strict as the ledger.</p><p>And the way that strictness is enforced is with a ledger that tolerates no bullshit through its interfaces.</p><p>All the strictness and complexity isn&#8217;t there to slow you down. It&#8217;s to create consistency, traceability, and proof.</p><ul><li><p>Proof that every money movement is intentional</p></li><li><p>Proof that nothing can quietly disappear</p></li><li><p>Proof that what the company says in aggregate matches the collection of what every transaction whispers individually</p></li></ul><p>A ledger is discipline encoded in software.</p><p>This week, we&#8217;re looking at the most fundamental building block of ledgers: <strong>immutability</strong>. In most engineers&#8217; mind, it translates to &#8220;append-only&#8221;. And sure, append-only databases are immutable because you can&#8217;t UPDATE or DELETE rows on them.</p><p>But that&#8217;s only the beginning of what immutability means for a ledger.</p><p>Here&#8217;s what you can expect in today&#8217;s article:</p><ul><li><p>A practical definition of immutability for ledgers (and why you can have it with mutable databases)</p></li><li><p>The difference between Journaling and Posting ledger entries, and why it matters</p></li><li><p>Why git is a nice metaphor for what a ledger&#8217;s immutability is about</p></li><li><p>And for the database nerds, <em>read skews</em>, and why are relevant</p></li></ul><p>Enough intro, let&#8217;s dive in.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/why-ledgers-must-be-immutable">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Accounting For Multi-Currency Ledgers]]></title><description><![CDATA[How to break the rules of money and get away with it]]></description><link>https://news.alvaroduran.com/p/accounting-for-multi-currency-ledgers</link><guid isPermaLink="false">https://news.alvaroduran.com/p/accounting-for-multi-currency-ledgers</guid><dc:creator><![CDATA[Alvaro Duran]]></dc:creator><pubDate>Wed, 25 Feb 2026 12:42:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pyQD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pyQD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pyQD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!pyQD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!pyQD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!pyQD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pyQD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2757167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://news.alvaroduran.com/i/189130381?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pyQD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!pyQD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!pyQD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!pyQD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92e1d64e-edaa-4ca8-b3de-69f558f123ab_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The biggest obstacle to multi-currency ledgers is a misunderstanding of what the balance rules really are.</p><p>Currencies can&#8217;t be balanced; you&#8217;re comparing apples to oranges. In theory you can balance them using comprehensive exchange rate lists, so that currencies can be comparable. In practice, this never works: it&#8217;s like trying to join database tables by timestamps. <a href="https://duckdb.org/docs/stable/guides/sql_features/asof_join">ASOF joins</a> might work, but time series data is never aligned perfectly. Slight delays between cause and effect can make the reconciliation process unwieldy.</p><p>What we need is to reinterpret the balancing process when multiple currencies are in play.</p><p>I&#8217;ve hinted at this idea in <a href="https://news.alvaroduran.com/p/ledgers-of-catan">Ledgers of Catan</a>, but the reality is that virtually every company that deals with more than one currency compiles a list of exchange rates (or gets one from an external provider) and uses that as a &#8220;best effort&#8221; to reconcile numbers, accepting that a compensation will be needed at the end of the period.</p><p>They&#8217;re doing ASOF joins with their money.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/alvaroduranbarata/">Alvaro Duran</a>, and this is <em>The Payments Engineer Playbook</em>. You&#8217;re already subscribed to free newsletters that &#8220;teach&#8221; you how to get a job as a software engineer.</p><p>But you don&#8217;t want to get a job; you already have one. What you want is to learn <strong>how to do your job exceptionally well</strong>. Especially as a payments engineer, where stakes are sky high, and the margin for error is razor thin.</p><p>In <em>The Payments Engineer Playbook</em>, we investigate the technology that transfers money. All to help you become a smarter, more skillful and more successful payments engineer. And we do that by cutting off one sliver of it and extracting insights from it.</p><p>In this article, I&#8217;m going to use a multi-currency wallet company as a practical example of how to balance multiple currencies without the strictness of the rule that &#8220;every transaction must be balanced&#8221; that every accountant uses in practice. This is dangerous territory: nobody does it.</p><p>But you&#8217;ll see that it can be done, and that it makes sense.</p>
      <p>
          <a href="https://news.alvaroduran.com/p/accounting-for-multi-currency-ledgers">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>