<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Quiet Iterations</title><description>Code, experiments &amp; thoughts in progress</description><link>https://quietiterations.com/</link><language>en</language><item><title>The quiet case for a boring stack</title><link>https://quietiterations.com/posts/boring-stack/</link><guid isPermaLink="true">https://quietiterations.com/posts/boring-stack/</guid><description>A small app doesn’t need a small version of a big company’s infrastructure. Notes on choosing tools you can live with.</description><pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a particular kind of procrastination that looks remarkably like good engineering. You start with a small problem. A few hours later, you have a deployment diagram, three queues, and a surprisingly strong opinion about service discovery.&lt;/p&gt;
&lt;p&gt;The original problem is still there.&lt;/p&gt;
&lt;h2&gt;Start with the thing that must work&lt;/h2&gt;
&lt;p&gt;Imagine a small application that lets a team collect customer requests. It needs accounts, a database, a couple of forms, and an email when something changes. That is a useful description of the system. “Event-driven platform” is not.&lt;/p&gt;
&lt;p&gt;For a first version, I would rather understand one application and one database thoroughly than understand six services approximately.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from django.db import transaction

def create_request(*, customer, message):
    with transaction.atomic():
        request = Request.objects.create(
            customer=customer,
            message=message,
        )
        transaction.on_commit(
            lambda: notify_team(request.pk)
        )
    return request
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This sketch deliberately leaves an important question open: what happens if the notification fails? For a real application, I would choose retries, an outbox, or a queue based on the consequence of losing that message. A compact example is a place to begin asking questions, not a reliability guarantee.&lt;/p&gt;
&lt;h2&gt;Boring is a relationship&lt;/h2&gt;
&lt;p&gt;A tool is boring when you know how it behaves at the edges. You know how to back it up. You know where the logs live. You have an idea of what will happen when you restart it.&lt;/p&gt;
&lt;p&gt;That makes “boring” personal. The right choice for an experienced Go developer might be a terrible first choice for someone who has shipped several Django applications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Choose a stack you can explain on a tired Tuesday afternoon.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Earn the next moving part&lt;/h2&gt;
&lt;p&gt;When a limitation becomes concrete, write it down. A job takes too long. A deployment interrupts readers. A query misses its budget. Then make the smallest change that addresses that limitation.&lt;/p&gt;
&lt;p&gt;There is nothing virtuous about keeping a system small after it has stopped serving its users. There is also no prize for making it complicated before it needs to be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is the simplest stack you have happily kept in production?&lt;/strong&gt; I would love to hear what made it work — especially the unglamorous bits.&lt;/p&gt;
</content:encoded></item><item><title>What SQLite taught me about adding a queue</title><link>https://quietiterations.com/posts/sqlite-before-a-queue/</link><guid isPermaLink="true">https://quietiterations.com/posts/sqlite-before-a-queue/</guid><description>An experiment in doing less: a local database, a little contention, and a much better question.</description><pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is a sample field report about a deliberately small experiment: taking a task that sounds like it needs a queue and trying the simplest persistent version first.&lt;/p&gt;
&lt;h2&gt;The question&lt;/h2&gt;
&lt;p&gt;Could a single process collect a handful of jobs, remember them across restarts, and process them one at a time? That is a narrower question than “Can SQLite replace a message broker?” Narrow questions are easier to learn from.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE TABLE jobs (
    id INTEGER PRIMARY KEY,
    payload TEXT NOT NULL,
    status TEXT NOT NULL DEFAULT &apos;pending&apos;,
    created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The useful failure&lt;/h2&gt;
&lt;p&gt;The interesting part starts when you add another worker. Selecting a pending row and claiming it are separate operations unless you make them atomic. A design that was pleasant with one process can be wrong with two.&lt;/p&gt;
&lt;p&gt;Rather than hide this behind a neat demo, I would test interruption, contention, and repeated execution explicitly. Those are the moments when the persistence model starts to matter.&lt;/p&gt;
&lt;h2&gt;A smaller conclusion&lt;/h2&gt;
&lt;p&gt;The lesson is not that every application should use a database as a queue. It is that trying a small version can expose the requirements you were about to outsource to a tool you did not yet understand.&lt;/p&gt;
&lt;p&gt;What would you test first: duplicate execution, retries, or recovery after a crash?&lt;/p&gt;
</content:encoded></item><item><title>Make room for unfinished ideas</title><link>https://quietiterations.com/posts/make-room-for-unfinished/</link><guid isPermaLink="true">https://quietiterations.com/posts/make-room-for-unfinished/</guid><description>A small argument for publishing the useful middle — before every thought turns into a definitive guide.</description><pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Some ideas arrive as an essay. Most arrive as a sentence in a scratch file, a question after a frustrating afternoon, or a small correction to something you thought you knew.&lt;/p&gt;
&lt;p&gt;I want a place for those ideas, too.&lt;/p&gt;
&lt;h2&gt;A note is allowed to be small&lt;/h2&gt;
&lt;p&gt;A short note can preserve a useful detail without pretending to explain an entire subject. It can say: here is what I tried, here is the result, here is the part I still do not understand.&lt;/p&gt;
&lt;p&gt;That last sentence is often the beginning of the conversation.&lt;/p&gt;
&lt;h2&gt;Publish a question worth answering&lt;/h2&gt;
&lt;p&gt;An unfinished thought still needs care. Give the reader enough context to follow you. Separate observation from assumption. If the result depends on a particular version or environment, say so.&lt;/p&gt;
&lt;p&gt;The goal is not to publish every passing thought. It is to leave a useful trail through the work.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A notebook can be honest about its margins.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Keep a little space&lt;/h2&gt;
&lt;p&gt;This publication has articles for developed arguments, experiments for things worth trying, and notes for everything that deserves a small place between them.&lt;/p&gt;
&lt;p&gt;What do you keep in your own notebook that never seems to make it into a finished article?&lt;/p&gt;
</content:encoded></item></channel></rss>