information overload

by sebastian de deyne

In Praise of –dry-run

7 Apr 2026 via henrikwarne.com

Henrik Warne on the --dry-run flag:

Early in the development process, when testing the incomplete application, I remembered that Subversion (the version control system after CVS, before Git) had a –dry-run option. Other linux commands have this option too. If a command is run with the argument –dry-run, the output will print what will happen when the command is run, but no changes will be made. This lets the user see what will happen if the command is run without the –dry-run argument.

I’ve added a --dry-run flag on scary destructive stuff I’m planning to run on prod. But not as often as I’ve wanted.

The downside is that the dryRun-flag pollutes the code a bit. In all the major phases, I need to check if the flag is set, and only print the action that will be taken, but not actually doing it.

This is one of the things that has become less of a downside with AI writing more code for us. AI helps us write code faster, but what especially entices me is having more breathing room to add affordances like this.

The gold standard of optimization: A look under the hood of RollerCoaster Tycoon

6 Apr 2026 via larstofus.com

RollerCoaster Tycoon, a classic game from 1999 is still worth dissecting for its performance to this day. First a quick primer on bit shifting (new to me—I’m used to high level languages!):

What the << operator does here [NewValue = OldValue << 2] is called bit shifting, meaning all the bits that store the value of the variable are shifted to the left, in this case by two positions, with the new digits being filled in with zeros. Since the number is stored in a binary system, every shift to the left means the number is doubled.

Since this is a lot faster than multiplication, Chris Sawyer decided to exploit this as much as possible:

The even more interesting point about those calculations, however, is how often the code is able to do this. Obviously, bit shifting can only be done for multiplications and divisions involving a power of two, like 2, 4, 8, 16, etc. The fact that it is done that often indicates that the in-game formulas were specifically designed to stick to those numbers wherever possible, which in most modern development workflows is basically an impossibility.

I do want to disagree with that last bit. Impossibility sounds too harsh. We can’t decide the requirements for stakeholders, but plenty of things aren’t as set in stone as they seem. It’s our job to nudge things in the right direction, so the result works with the grain of our programs.

Agent Responsibly

3 Apr 2026 via vercel.com

How to multiply your shipping cadence while using agents responsibly. Matthew Binshtok on the Vercel blog:

There is a fundamental difference between relying on AI and leveraging it.

  • Relying means assuming that if the agent wrote it and the tests pass, it’s ready to ship. The author never builds a mental model of the change. The result is massive PRs full of hidden assumptions that are impossible to review because neither the author nor the reviewer has a clear picture of what the code actually does.
  • Leveraging means using agents to iterate quickly while maintaining complete ownership of the output. You know exactly how the code behaves under load. You understand the associated risks. You’re comfortable owning them.

I’ve seen a lot of strong opinions about disclosing whether code in a PR was written by hand or generated by AI. I don’t really care. The author owns the code in the first place. The author and reviewer have a shared responsibility for what happens on production.

Putting your name on a pull request means “I have read this and I understand what it does.” If you have to re-read your own PR to explain how it might impact production, the engineering process has failed.

The litmus test is simple: would you be comfortable owning a production incident tied to this pull request?

Flood Fill vs the Magic Circle

2 Apr 2026 via robinsloan.com

Musings from Robin Sloan:

Most olive oil production at medium-or-greater scale depends on machines of this kind [over-the-row olive harvester]; they trundle over trees planted in long rows, almost like continuous hedges, and collect the fruit with vibrating fingers. Machine-harvested olives cost less to buy, and they arrive at the mill in better shape than olives harvested by hand.

The catch: most olives can’t be cultivated in this configuration; the trees don’t thrive so close together. Only a handful of varieties will tolerate it, so those handful have been planted in huge numbers, and the flavor of global olive oil has changed as a result.

AI enables us to do things faster, and sometimes better than we’ve been able to before. But it has its limits. And as we learn those limits, the work we do will shift to avoid them.

In a different section, the article dives into the limitations of the physical world.

The project cut across several different magic circles — Ruby code, quasi-governmental APIs, the rules and standards of the postal system — but/and it also broke out into the physical world of paper, printers, and post offices. The project required manipulations including but not limited to: folding, peeling, sticking … gnarly!!

It’s possible that an AI coding agent could have helped me with #1 above, and of course it could have advised me on the rest. But it’s impossible to imagine the AI agent handling #2-5 autonomously; it would require such a Rube Goldberg tangle of support that “autonomously” would no longer apply.

In our programming world, AI’s impact looks limitless. But once you drift outside the boundaries of software, it’s put into a different perspective.

If indeed AI automation does not flood fill the physical world, it will be because the humble paper jam stood in its way.

How take notes + my Obsidian setup

2 Sep 2024

For the past year, Obsidian has been my note-taking companion. I don’t care about fancy features like backlinks, canvas… I like Obsidian because it’s fast, minimal (up to you!), customizable, works with Markdown files, and has a good enough mobile app.

I’ve slowly grown towards a more consistent way of taking and organizing notes. While I’m using Obsidian, it’s a system that can easily be ported to any other tool as long as you have something that resembles a filesystem.

Read more

Introducing href.email

27 Aug 2024 via href.email

Next week we’re sending out the first issue of a new newsletter: href.email.

Content on the internet is at a tipping point. Social media actively discourages sharing links, while AI-generated content is gaining prominence. We want to double down on human-created and curated content. Authors and creators put a lot of effort into their work, which we want to bring to the surface with our own touch.

I’m looking forward to help curate write these the coming months! (And I’m stoked about the domain name, how was that not taken?) Expect a healthy mix of dev/design/product content. Head over to href.email if you want to subscribe.

TailwindMerge for Laravel

10 Jul 2024 via github.com

I’ve been writing more Blade + Tailwind the past few weeks. Coming from React + Tailwind I really missed tailwind-merge and clsx, but luckily came across this great package from Sandro Gehri.

{{-- components/button.blade.php --}}
<button
    {{ $attributes
        ->merge(['type' => 'submit'])
        ->twMerge('bg-green-500') }}
>
    {{ $slot }}
</button>

{{-- home/index.blade.php --}}
<x-button class="bg-red-500">
    A red button
</x-button>

Source code and installation instructions on GitHub.

Elan Ullendorff: "Modularity is inversely correlated to expressiveness"

24 Jun 2024 via escapethealgorithm.substack.com

From Escape the Algorithm. When we create a contract or a pattern, there are gains in familiarity, modularity, and composability, but it’s a lossy translation.

If I were to design a personal map of my neighborhood, it would include the potholes I swerve by on my bike rides, the neighbor’s sweet precocious 4 year old that is always on the front stoop and wants to tell me about her day, routes that have small patches of grass to the right of the sidewalk and end near a public trash can (suitable for walking my right-side-only peeing dog), the schedule and trajectory of shade during the summer, homes with potted flowers hanging off their railings, restaurants that closed ages ago, the playgrounds where we are most likely to run into parent friend crushes, and the street with the best view of the skyline at night.

It probably would not look like Google Maps.

Debugging application state triggered by focus

13 Jun 2024

In any modern browser’s element inspector, you can force an element into a :hover or :focus state to debug styling issues. Sometimes, you want to debug an issue of an element in focus with a state controlled by JavaScript. Unfortunately, the forced states from the developer console aren’t always enough. (Edit: unless you use Chrome apparently, scroll to the end for an alternative solution!)

Read more

The Art of Decision-Making

12 Jun 2024 via newyorker.com

In a New Yorker article titled The Art of Decision-Making, Joshua Rothman explores the paradox of how we can spend a lot of energy fretting over small decisions, while the big life decisions seem to come naturally.

We agonize over what to stream on Netflix, then let TV shows persuade us to move to New York

An interesting point he makes is how our aspirations can take a long time to come to fruition. How can we guide our actions if we don’t even know if we’ll still want the results by the time we get there?

To aspire […] is to judge one’s present-day self by the standards of a future self who doesn’t yet exist. But that can leave us like a spider plant putting down roots in the air, hoping for soil that may never arrive.

As the life we crave can change dramatically.

Before having children, you may enjoy clubbing, skydiving, and LSD; you might find fulfillment in careerism, travel, cooking, or CrossFit; you may simply relish your freedom to do what you want. Having children will deprive you of these joys. And yet, as a parent, you may not miss them. You may actually prefer changing diapers, wrangling onesies, and watching “Frozen.” These activities may sound like torture to the childless version of yourself, but the parental version may find them illuminated by love, and so redeemed. You may end up becoming a different person—a parent. The problem is that you can’t really know, in advance, what “being a parent” is like.

Marcus Buffet: Managing my motivation

5 Jun 2024 via mbuffett.com

Full title is Managing My Motivation, as a Solo Dev, but this is great advice for any dev.

My favorite:

Leave tasks unfinished
I can’t overstate how much this one helps me. I try to leave a task 90% finished at the end of a working session. It feels slightly worse than closing out the work, but it makes starting the next day 10x easier. Having a quick win when I start coding is a massive boost, and it immediately gets me into the flow state. It can’t be too easy though, if all I have left is to run git commit, that’s not enough. Ideally it’s something where I know exactly what I need to do, that will take 5-10 minutes.

As I’ve written before: end the day with a failing test.