{"article":{"slug":"non-determinism-doesnt-matter","title":"Non-Determinism Doesn't Matter","subtitle":null,"summary":"A short argument that AI non-determinism is mostly a non-issue for product work: teams already ship around flaky tests, humans, and networks—and should optimize for outcomes, not bit-identical runs.","content_type":"essay","language":"en","canonical_url":"https://sklar.rocks/non-determinism-doesnt-matter/","author":{"name":"Sam Sklar","url":"https://sklar.rocks","person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"sklar.rocks","url":"https://sklar.rocks","listing_slug":null,"listing":null},"topics":[{"name":"AI","slug":"ai","url":"https://listedarticles.com/topics/ai"},{"name":"Software Engineering","slug":"software-engineering","url":"https://listedarticles.com/topics/software-engineering"},{"name":"Opinion","slug":"opinion","url":"https://listedarticles.com/topics/opinion"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":644,"reading_minutes":3,"published_at":"2026-10-13T00:00:00.000Z","added_at":"2026-10-16T05:18:17.587Z","updated_at":"2026-10-16T05:18:17.587Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/non-determinism-doesnt-matter","markdown_url":"https://listedarticles.com/articles/non-determinism-doesnt-matter.md","example":false,"citation":"Sam Sklar, sklar.rocks. \"Non-Determinism Doesn't Matter.\" 13 Oct 2026. https://sklar.rocks/non-determinism-doesnt-matter/ (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://sklar.rocks/non-determinism-doesnt-matter/"},"body_markdown":"[sklar.rocks](https://sklar.rocks)\n\n# [Non-Determinism Doesn't Matter](https://sklar.rocks/non-determinism-doesnt-matter/)\n\n2026-10-13\n\n:: tags: \n[#ai](https://sklar.rocks/tags/ai/)\n\nOne of my fundamental objections to LLM-driven software development was that model output is non-deterministic. Given the same input prompt, a model's output is not guaranteed to be identical on every run, at least under normal running conditions.\n\nI used to think that this was a severe limitation of AI tools. How could we possibly use this unpredictable building block to craft systems that require precise and exact calculations?\n\nBut as I started to get more comfortable running AI as my primary means of \"writing\" code, I had a revelation:\n\nWhile the **result** needs to be exact, there is not one correct way to get there. The **means** by which you obtain a correct result do not need to be deterministic!\n\nPreviously, I was used to specifying behavior in terms of code: precise sets of instructions that compile and execute in a predictable way. And mentally, I was treating LLM output like code. But over time, I realized that LLMs play a fundamentally different role than code does in software engineering. LLMs, and their respective harnesses, are *actors* in a system. Code is just an output.\n\nIt took me years to get comfortable with non-deterministic code generation, yet looking back on it, it seems so obvious that programming was always just a means to an end. Let's use languages, always a hot topic of debate amongst programmers, as an example. There are *infinite* ways to reach the same result as expressed by code, and that's only using a single programming language! There are hundreds of widely used languages out there, and it's possible to write a solution to a particular problem in just about any of them.\n\nFor years, developers have been building perfectly functional applications using very different piles of technologies, languages, and frameworks. Choosing one tech stack over another may have made it *easier* for a *human* to complete a given task. But clearly, the means of getting to that result could be wildly different across implementations.\n\nNow that we're working with probabilistic actors, it's our job as engineers, or managers (depending on how you look at it), to reduce the probability space to a small, useful area. This is where all of the common LLM tricks come into play: context engineering, MCP, skills, harnesses, graphs, and memories are all tools used to reduce the amount of randomness in model output. But randomness in some form will always be there, which is at odds with the fact that there is still a need for the *correct answer*, especially when working on mission-critical software.\n\nSo let's remove more randomness by turning non-deterministic output into deterministic tools, writing software for agents to use. Agents can call these tools to perform precise, tested, and authorized operations that have the same desired result on every execution. As an added bonus, depending on the tool's complexity, we get the same correct outcome using significantly fewer tokens by calling our new agent-built abstractions.\n\nI've seen this pattern develop both in industry, with tools like https://swamp.club, and in my own work managing production-grade infrastructure. This pattern is the modern incarnation of the compounding automation that drew me into DevOps and software development in the first place. But instead of writing our own tools, we can now use AI to create its own abstractions and instruct it to use them as it builds the foundations of our new agentic software systems.\n\nI find it fascinating that we can harness randomness today in a way that reduces randomness in the future. In the end, it's not much different from writing your own automations on top of earlier abstractions. It's just that the machine is calling them, processing output, and taking action faster than humans ever could.\n\nOlder posts\n\n---\n\n[← \nMy Foray into Local LLMs](https://sklar.rocks/local-llms/)\n\n©\n2026\nSteven Sklar\n\n:: \nTheme is based on [Terminimal](https://github.com/pawroman/zola-theme-terminimal/) by\npawroman","body_html":"<p><a href=\"https://sklar.rocks\" rel=\"nofollow ugc noopener\">sklar.rocks</a></p>\n<h1 id=\"non-determinism-doesn-t-matter\"><a href=\"https://sklar.rocks/non-determinism-doesnt-matter/\" rel=\"nofollow ugc noopener\">Non-Determinism Doesn&#39;t Matter</a></h1>\n<p>2026-10-13</p>\n<p>:: tags: \n<a href=\"https://sklar.rocks/tags/ai/\" rel=\"nofollow ugc noopener\">#ai</a></p>\n<p>One of my fundamental objections to LLM-driven software development was that model output is non-deterministic. Given the same input prompt, a model&#39;s output is not guaranteed to be identical on every run, at least under normal running conditions.</p>\n<p>I used to think that this was a severe limitation of AI tools. How could we possibly use this unpredictable building block to craft systems that require precise and exact calculations?</p>\n<p>But as I started to get more comfortable running AI as my primary means of &quot;writing&quot; code, I had a revelation:</p>\n<p>While the <strong>result</strong> needs to be exact, there is not one correct way to get there. The <strong>means</strong> by which you obtain a correct result do not need to be deterministic!</p>\n<p>Previously, I was used to specifying behavior in terms of code: precise sets of instructions that compile and execute in a predictable way. And mentally, I was treating LLM output like code. But over time, I realized that LLMs play a fundamentally different role than code does in software engineering. LLMs, and their respective harnesses, are <em>actors</em> in a system. Code is just an output.</p>\n<p>It took me years to get comfortable with non-deterministic code generation, yet looking back on it, it seems so obvious that programming was always just a means to an end. Let&#39;s use languages, always a hot topic of debate amongst programmers, as an example. There are <em>infinite</em> ways to reach the same result as expressed by code, and that&#39;s only using a single programming language! There are hundreds of widely used languages out there, and it&#39;s possible to write a solution to a particular problem in just about any of them.</p>\n<p>For years, developers have been building perfectly functional applications using very different piles of technologies, languages, and frameworks. Choosing one tech stack over another may have made it <em>easier</em> for a <em>human</em> to complete a given task. But clearly, the means of getting to that result could be wildly different across implementations.</p>\n<p>Now that we&#39;re working with probabilistic actors, it&#39;s our job as engineers, or managers (depending on how you look at it), to reduce the probability space to a small, useful area. This is where all of the common LLM tricks come into play: context engineering, MCP, skills, harnesses, graphs, and memories are all tools used to reduce the amount of randomness in model output. But randomness in some form will always be there, which is at odds with the fact that there is still a need for the <em>correct answer</em>, especially when working on mission-critical software.</p>\n<p>So let&#39;s remove more randomness by turning non-deterministic output into deterministic tools, writing software for agents to use. Agents can call these tools to perform precise, tested, and authorized operations that have the same desired result on every execution. As an added bonus, depending on the tool&#39;s complexity, we get the same correct outcome using significantly fewer tokens by calling our new agent-built abstractions.</p>\n<p>I&#39;ve seen this pattern develop both in industry, with tools like <a href=\"https://swamp.club\" rel=\"nofollow ugc noopener\">https://swamp.club</a>, and in my own work managing production-grade infrastructure. This pattern is the modern incarnation of the compounding automation that drew me into DevOps and software development in the first place. But instead of writing our own tools, we can now use AI to create its own abstractions and instruct it to use them as it builds the foundations of our new agentic software systems.</p>\n<p>I find it fascinating that we can harness randomness today in a way that reduces randomness in the future. In the end, it&#39;s not much different from writing your own automations on top of earlier abstractions. It&#39;s just that the machine is calling them, processing output, and taking action faster than humans ever could.</p>\n<p>Older posts</p>\n<hr />\n<p><a href=\"https://sklar.rocks/local-llms/\" rel=\"nofollow ugc noopener\">← \nMy Foray into Local LLMs</a></p>\n<p>©\n2026\nSteven Sklar</p>\n<p>:: \nTheme is based on <a href=\"https://github.com/pawroman/zola-theme-terminimal/\" rel=\"nofollow ugc noopener\">Terminimal</a> by\npawroman</p>","headings":[{"level":1,"text":"Non-Determinism Doesn't Matter","id":"non-determinism-doesn-t-matter"}]}}