If there’s one thing that Donald Trump and his sycophants love to do, it’s name or rebrand things to name them after hinself, make them sound more “extra”, or both. Consider:
John McCarthy, coiner of the term “Artificial Intelligence”, creator of the Lisp programming language and garbage collection, influencer on ALGOL, which influences most programming languages.
The executive order, titled INAUGURATING THE ERA OF SUPER INTELLIGENCE, basically declares that “AI”, a term that we’ve been using since 1955 when John McCarthy coined it, should now be referred to as “Super Intelligence” or “SI” in executive-branch communications.
It says that agencies of the federal executive branch must use the new terms in official correspondence, public communications, websites, reports, policy documents and other non-statutory documents. Thankfully (because it would mean a lot of pointless work otherwise), existing regulations, presidential actions, contracts, grants and historical documents don’t have to be changed.
It also means that any content I make aimed at a U.S. government buyers or techies (especially tutorials, presentations, and documentation) will need to include the “SI” terms for both practical (for example, search terms) and political (“We call it ‘SI’ here, son.”). I’m already not looking forward to this.
For now, “SI” means exactly what “artificial intelligence” already means under 15 U.S.C. § 9401(3).; only the name has changed.
Sometime in the next 60 days, Michael Kratsios, the Director of the White House Office of Science and Technology Policy (OSTP), will have to propose legislative language for a federal definition of SI. It’ll have to say whether that definition should modify or replace the statutory definition of AI, and include any conforming amendments and follow-on executive actions. If such changes are made, expect them to be dumb.
Unsurprisingly, it didn’t take long for the first kiss-ass to use the term in Trump’s presence:
Super Cyber Friday is about cybersecurity practitioners and vendors, and every episode has a title that follows a “Hacking [Topic]” format. This particular episode’s title is Hacking Microsegmentation for Machine Workloads, and features:
Galeal Zino, NetFoundry CEO (and my boss’ boss, and therefore the best damned skip-level in the world)
Howard Holton, Founder and Principal Counsel at Phronia Counsel, an independent technology analyst and advisory firm
If you’re wondering what microsegmentation is, here’s the short version:
Microsegmentation is the practice of carving your network into tiny zones so that when something gets compromised (and something will), the damage stays in one small room instead of spreading through the whole house.
Everyone agrees it’s a good idea, almost nobody enjoys doing it, and few actually do it. It’s the brushing and flossing of cybersecurity.
Before the notes, some disclosure
You should know:
I do developer advocacy work at NetFoundry in exchange for money, health insurance, and to convince people I’m more than just an accordion-playing reprobate.
Once again, Galeal is my boss’s boss. And he’s a great boss’ boss!
NetFoundry sponsored this episode.
Feel free to apply the appropriate amount of skepticism to this writeup, but keep in mind that this episode features both a CEO who builds security stuff with an analyst who’s had to live with the results. The episode’s a little more blunt than your typical PR piece.
The tl;dr
C’mon, this article isn’t that long! But still, if you want a very quick summary, here it is…
The old way
What machine workloads need
What you segment by
IP addresses, subnets, CIDR blocks, VLANs
A cryptographic identity for every machine, plus attestation
Where enforcement happens
Firewalls and middleboxes at the edge
Inside the application, via an identity-driven overlay
How AI agents get treated
“It’s basically an employee” or “It’s basically an app”
As a non-human actor with explicitly bounded access
What failure looks like
Firewall surgery, configuration bloat, shelfware
A contained blast radius
What the board says
“We better never get hacked.”
“How bad will it be when we get hacked?”
“Early microsegmentation sucked so bad…”
Howard set the tone in the first minute, when David asked for his microsegmentation pet peeve (0:08):
“Early microsegmentation sucked so bad that it’s hard to get people to listen when you talk about microsegmentation.”
For the record, Howard is a big microsegmentation fan. What drives him (and us at NetFoundry too) up the wall is the feedback he hears most often: “Nope, we did that before, we’re not doing it again.” People tell him it was too complicated and a waste of money. He hates that feedback because, in his words, “it’s just wrong.”
Later in the show (7:25), he explained how early rollouts earned that reputation. Teams would get frustrated during the discovery stage, put some segments in place, and then cause an outage by blocking something that only ran once every 30 days and that nobody had planned for. After that happened a few times, they’d shelf whatever microsegmentation tool they were using. His summary: “Complexity always bites you in the ass.”
If you’ve ever been anywhere near a rollout like that, you probably just winced. The problem wasn’t the idea. Least privilege and blast-radius reduction are good ideas! The problem was that vendors tried to implement them with the tools that just happened to be conveniently lying around: IP addresses, subnets, VLANs, and firewalls.
When an audience member asked whether application-level or network-level microsegmentation is more effective, Galeal didn’t mince words (9:05):
“Network-level is DOA: dead on arrival. It’s an oxymoron to begin with… It’s spilled milk, and you can’t put it back in the bottle. If you’re going to try and use IP addresses, VLANs, and firewalls to do ‘microseg,’ good luck to you. It’s not going to happen.”
That’s coming from someone who’s been doing network engineering for 30 years. Here’s the core problem, especially for machines: an IP address tells you where something is, not what it is. In a world of containers, autoscaling, and serverless functions, the IP address your billing service has this morning might belong to something completely different by the time lunch rolls around. Writing security policy against IP addresses is like keeping track of your friends by remembering which seats they sat in the last time you all went to the movies. Or, as Galeal put it later in the show (35:10), “IP addresses are not identities.”
Howard then described what happens when you try to brute-force it anyway (10:03):
“Microsegmentation and segmentation are not the same thing… If you’re like, ‘Well, I’m going to create 437 subnets in my network and I’m going to create 300 VLANs and I’m going to turn on host-based firewalls,’ you’ve just created a nightmare that no one is ever going to be able to manage after you. And you have failed job number one, which is make sure that the next person can be as successful as you are.”
“Make sure that the next person can be as successful as you are.” I want that on a poster, and not just for network engineers. It applies to code, documentation, and pretty much anything you build that someone else will inherit.
And if you try to do it the classic way regardless, making your firewalls enforce all that traffic between your services? According to Galeal (29:48), that’s the first lesson you’ll learn: “You will melt your firewalls.”
Credentials aren’t identity
My first bearer tokens.
My favorite moment in the episode came from an audience question. Sierra Montgomery asked (11:05):
“If a compromised workload acquires valid credentials and begins behaving like a legitimate service, what signal does your microsegmentation architecture use to distinguish legitimate machine-to-machine communication from lateral movement?”
Galeal’s answer was one word: Attestation. His reasoning: a credential doesn’t prove whether Howard, David, or an AI agent should have it. Credentials, he said, are “necessary but not sufficient.”
Explaining bearer tokens is something that goes back to my first article for Auth0, which was also my “take-home assignment” in the job interview process. The concept always needed the most careful explaining, even though the name told you everything: whoever bears the token gets the access. The token doesn’t know or care who’s holding it. It’s more like cash than a credit card.
That’s fine as long as you know where the token is. The trouble starts when you don’t. A credential proves that something possesses a secret. It doesn’t prove that the thing should have that secret, and it says nothing about whether the machine presenting it is in the state it’s supposed to be in. Attestation fills that gap: it’s verifiable evidence that the workload is what it claims to be, and that it’s running where and how it’s supposed to.
Take the pwning like a champ
At a DEF CON party a long time ago, a few friends and I came up with a joke talk title for the following year’s edition of the conference: “Security is for lightweights. Take the pwning like a champ.”
But behind the joke was an important idea: every boxer gets hit. What makes a champ isn’t never getting punched; it’s being able to take the punch and stay on your feet. Security works the same way. Sooner or later, one of your credentials is going to end up in the wrong hands, whether it’s through a phished password, a leaked API key, or a token that got copied out of a log file. Back then, planning on getting pwned was a punchline. These days, it’s a design principle, and it’s exactly where Galeal starts.
The DEF CON joke came to my mind when an audience member asked how a platform can alert on a compromised token moving laterally (16:06). Galeal’s answer was in the spirit of “Take the pwning like a champ”: Assume that tokens will be compromised, and design your system so that a token by itself doesn’t grant access.
If your architecture opens the door and grants network reachability before it verifies identity, an ill-gotten token can be a starting point to explore your network. The “Take the pwning like a champ” approach that NetFoundry takes verifies identity first and uses policies to spells out which identities can talk to which services. A stolen token doesn’t open any new doors, because the path the attacker wants isn’t accessible to them.
AI agents are chaos monkeys nobody scheduled
History time! If you were a developer around the time the iPad came out, you might remember Chaos Monkey, Netflix’s tool designed to randomly shut down servers in production. The idea behind it could be summarized as “The random shutdowns will continue until resiliency improves”. Netflix’s dev teams were forced to build in such a way that their systems would survive failure. It’s a brilliant (if sadistic) idea, and it works because Netflix chose to unleash it deliberately, with rules.
This isn’t all too different from a pattern Galeal described (28:56): taking an AI agent and saying, “Hey, cool. Here’s some API keys. Here’s the internet. Here’s some enterprise resources. Go do something useful.”
Howard’s response: “I see that like 40 times a week.” That’s a chaos monkey too, except nobody scheduled it, nobody wrote the rules, and it will explain its reasoning very confidently afterward.
My last job prior to my current Developer Advocate gig at NetFoundry was optimizing an MCP server, so this isn’t a hand-wavey “some customer has this issue” thing to me. Every tool or function you expose through an MCP server is something an agent can decide to call, whenever it wants, for reasons you didn’t anticipate. Its network traffic doesn’t follow a script.
When an audience member asked how to segment an AI agent whose needed connections change with each task, Howard’s advice was (27:27):
“If you try to design something that is entirely flexible, what you’re going to end up with is opening yourself up for AI chaos in your network… If you do it the other way around and hope that your microsegmentation tool set is going to keep up with your AI, you’re basically saying, ‘I want microseg to follow my chaos monkey.’ Do it the other way around. Use microsegmentation to restrict the chaos monkey.”
Galeal’s answer to the same question (26:43) supplies the other half: The old bag of tricks isn’t going to work on agentic flows. Treat agents as identities, define a graph of what each one can talk to and under what conditions, and have the visibility and enforcement to make sure they stay on that graph.
That’s the right mental model. An AI agent isn’t a human employee sitting behind your SSO portal, and it isn’t a cron job that does the same thing at the same time every night. It’s a whole new thing.
As Howard put it later in the show, it isn’t another application, and it doesn’t act like a human either. It needs boundaries defined up front, including things like:
A specific identity,
ashort list of things it’s allowed to reach, and i
solation that travels with it whether it’s running in AWS, on bare metal, or in an OT facility.
What this looks like if you write code
Time for me to put my work hat on for a minute. The table above mentions “an identity-driven overlay” enforced “inside the application,” which is a mouthful, so here’s what it means in practice.
OpenZiti is the open source zero trust networking platform that NetFoundry builds, and one of the things it lets you do is embed zero trust directly into your application with an SDK. Your app gets its own cryptographic identity, and it can only reach the services that policy says it’s allowed to reach. On the other side, services don’t need open inbound ports at all, so there’s nothing sitting on the network for an attacker to scan, probe, or point a stolen token at.
Galeal’s “kill switch” (more on that below) gets pretty concrete here too: if an identity is compromised, you revoke it or change the policy, and its paths go away. No firewall surgery required.
If you want to try it yourself, the docs and quickstarts are at openziti.io.
What do you tell the board?
Near the end, David read an audience question: Which metric best shows leadership that microsegmentation is working? Galeal boiled his answer down to three questions (39:11):
The graph: Can you answer the question “What identity can talk to what identity, according to what policy?” (Note that he said identity, not IP address.)
The kill switch: When something unexpected happens, where’s the kill switch that lets you deal with it without compromising uptime, human safety, or business continuity?
Centralized governance: How much of all this can you see and govern from one place, instead of going to a bunch of different environments and firewalls?
Then Howard put on his gloves (41:27): “I couldn’t disagree more.” Speaking as a CISO, he said:
“What my board said 10, 15 years ago was, ‘We better never get hacked.’… Today they say, ‘How bad will it be?’ That is their question to me. That is the question they want me to answer in every board meeting they invite me to.”
My answer would be “Take the pwning like a champ”.
David pointed out that the two answers aren’t really in conflict: Galeal was describing what you measure for yourself and your security team, and Howard was describing what you tell the board. Galeal agreed. Howard then explained why the board version has to be so compressed (43:29):
“I get one slide as a CISO… I get like five minutes… I make that one slide tell them how I’m spending money to make it less bad than the last time they gave me money.”
Ah, the dreaded “You get one, and only one, slide” directive for board meeting presentations. Replace “board” with “VP of Engineering” or “whoever approves your budget,” and it’s still excellent advice.
My takeaway
If I had to boil the whole episode down to one idea, it wouldn’t be about AI, firewalls, or attestation. It would be Howard’s “job number one”: make sure the next person can be as successful as you are.
Galeal landed in the same place from a different direction. When David asked why he started NetFoundry (24:00), he said that after years of beating his head against walls like microsegmentation, he wanted to tilt the playing field so that the next person who has to solve these problems doesn’t have to.
That’s the real case against building microsegmentation out of subnets and VLANs. Even if you get it working, you’ve built something nobody else can understand, let alone maintain.
A policy that says “the billing service can talk to the orders database, and the AI agent can talk to these three APIs and nothing else” is something the next person can read, reason about, and change without breaking everything. And when some of the things doing the talking are AI agents that nobody can fully predict, that kind of clarity is what keeps the chaos monkey in its cage.
Go watch the episode, and if you’re a developer who wants to see what identity-first networking looks like from the inside, take OpenZiti for a test drive!
I was working on one of my “back of the envelope” diagrams for a post on microsegmentation and decided to draw the one pictured above as a warm-up exercise. It turned out well enough that I thought it was worth posting on its own. You might find it useful with clients when they look at you with puzzlement when you talk about “north-south” versus “east-west” in network security.
You can also use the text below when explaining the concepts; feel free to “copy, paste, and adjust to taste”:
North-south crosses the boundary of your environment. A browser hitting your web tier, an API call from outside, your service calling a third party. Up and down the diagram, in and out.
East-west stays inside. Web tier to app tier, app tier to database, service to service, pod to pod. Sideways across the diagram, and it typically never touches your perimeter controls at all.
The entire traditional security stack is pointed at north-south. Firewall, WAF, load balancer, the DMZ, the VPN concentrator, most of the alerting.
East-west traditionally get an implicit pass, because it’s inside, and inside was assumed to be fine. If this were true, we wouldn’t have expressions like “It was an inside job!”
An attacker who phishes a laptop or pops a container has already cleared every north-south control. From that point on they’re moving east-west, which is the direction that typically has the least in the way. The initial breach is usually small. The blast radius is what turns it into an incident, and the blast radius is all east-west.
That’s the gap microsegmentation exists to close: putting authorization on the connections between your own workloads, not just on the ones crossing your perimeter.
If you’ve spent time with theOpenZiti Appetizer, you may have noticed this response:
you sent a message, but it can’t be qualified at this time for offensiveness
There’s a hate-speech classifier on the path every message takes, and it’s been waiting for a classifier to talk to. On theSeptember 18 Ziti TV episode, I got curious about it and went down the “How do I get this thing to work?” rabbit hole. It turned out to be a nice tour of how OpenZiti authorization actually works!
Here’s the fun part. The first thing you notice is that the classifier URL has no instance prefix, while every other service name in the demo is scoped. That looked like the answer, but it wasn’t.Prepare tags the Appetizer’s own identity with an unprefixed classifier-clients attribute, deliberately, in a file where everything else goes through scopedName. The dial side was built with one shared classifier in mind rather than one per instance. The URL is right as written.
What’s left to build is the network side: the service and a dial policy. The application was always correct, and it’s been accurately reporting that it couldn’t reach something that wasn’t there yet.
In the end, the fix was a service and two policies, and (yay!) no changes to the code at all.
In the exercise, you add a real classifier (a RoBERTa model fine-tuned on OffensEval tweets) and host it as a dark service. By the end you have two processes talking by service name, with ss -ltn showing nothing listening inside the classifier container while the controller shows it actively hosting. Then you take access away with one policy change and watch the caller get “not found” for a service that’s running perfectly well three feet away.
The exercise shouldn’t take longer than a half hour, and it all runs in Docker containers, which means you don’t need Python, Go, or even the ziti CLI installed locally. I wrote it for people new to OpenZiti, with the diagnosis reasoning spelled out rather than just the commands, since that part transfers to debugging your own dials.
A few things I’d have liked to know going in, which I haven’t seen written down elsewhere:
Flask’s built-in dev server can’t host a ziti service. The bind succeeds and a terminator registers, but it never accepts. werkzeug polls the listening fd through selectors, and a ziti fd isn’t pollable that way. Callers see EOF and the Python side logs nothing. waitress works, and it’s what the SDK’s own Flask sample uses.
The SDK enumerates services at startup and doesn’t re-check per dial, so a service created after your process starts stays invisible until it refreshes.
Thanks to Clint for the Appetizer, which is a genuinely good teaching demo, and for co-hosting the episode this came from.
This is the first in a series! I’m turning Ziti TV episodes into standalone repos people can work through on their own. Episodes:https://www.youtube.com/@OpenZiti/streams
Issues and PRs welcome, especially if you hit something the troubleshooting section misses. Help make it better!
Once again, the repo is here: https://github.com/AccordionGuy/openziti-appetizer-classifier
If David Heinemeier Hansson’s opening keynote at Rails World 2026 felt like “the most confusing funeral I’ve ever experienced,”Aaron Patterson’s closing keynote was the raucous Irish wake that brought the corpse back to life, handed it a pint, and told everyone to get back to their laptops once they’ve sobered up.
The tl;dr table
To appreciate how thoroughly Aaron answered DHH, lI put together a table comparing the two keynotes:
Metric/stance
DHH opening keynote
Aaron Patterson closing keynote
Tone
Aggressive, messianic, defensive, Al Pacino-style lack of “inside voice”
Warm, self-deprecating, deeply technical, hilarious, punctuated often with Aaron’s laughter
Mentions of Ruby
11 times in 63 minutes
The foundational medium of every slide
Position on code
“Pencils down.” Hand-writing code is a failure state.
“I’m going to keep reading my code, and I hope that you will too.”
Tech stack bet
Discard web apps; vibe-code native apps and black-box Rust.
Invest deeply in Ruby: Ractors, ZJIT, Ractor-local GC in Ruby 4.1.
Attitude toward audience
“The black pill is for fucking losers. Don’t be a loser.”
“I do like to spend my weekends counting stack frames. I don’t think that makes me a loser though.”
Climactic slide
A warning to take the white pill or get left behind.
Mean Girls meme: “Get in loser, we’re going programming.”
A tale of two keynotes
“Your AI has not made this promise to you.
There is no ‘As-If Rule’ for your English.
I am not going to concede my destiny to AI.
I’m going to keep reading my code, and I hope that you will too.
Get in loser, we’re going programming.”
— Aaron Patterson (@tenderlove), Rails World 2026 Closing Keynote
The contrast between the two bookends of Rails World 2026 couldn’t have been more stark. It was a clash of two diametrically opposed philosophies.
The opening keynote gave us an embittered, insulated tech executive treating code as disposable corporate slop…
…and for the closing keynote, we got a loveable systems hacker who reminded us why software craftsmanship mattered in the first place:
The Parody: “Aaron XP” and the curse of the slop grenade
Aaron stepped on stage in Austin and wasted zero time skewering DHH’s opening theatrics.
If you watched the video of DHH’s keynote (remember to turn the volume down a little, he’s still deep in his “Al Pacino yelling” phase), you know about breathless obsession with his Linux distro Omarchy, bragging about driving install times down from three minutes to nine seconds, and treating it like the Second Coming of Computing. I half expected him to borrow the line from Deadpool and Wolverine and declare himself Linux Jesus (and hey, it still might happen).
https://www.youtube.com/shorts/IQc4FVQXkJU
Aaron opened with his own “major announcement”: Not to be outdone, he too had vibe-coded his own Linux distribution, Aaron XP!
“It installs in 100 milliseconds. It’s very important for me to get the install time down because I’m doing that constantly. Wake up in the morning, install my OS. Get some coffee, install my OS. Upgrade Chrome, reinstall the OS… I think it’s ironic to make a joke about the financial crisis and then encourage everybody to generate a whole bunch of Rust code without reading it. I’m going to start selling insurance on technical debt, so come see me afterwards.”
Then came the jab that sent ripples across the room: “slop grenades”.
For anyone tracking the broader industry discourse, the phrase wasn’t just a casual joke; it was a direct nod to Aaron’s ultimate boss (and my former ultimate boss), Shopify CEO Tobi Lütke. A year ago, Lütke made headlines with his sweeping “all-in on AI coding” proclamations, hyping how agentic workflows would supercharge engineering output across Shopify.
Lütke recently took to social media to vent about the grim byproduct of unbridled vibe coding: the “slop grenade”.It’s the result of a developer casually tossing an AI-generated, 2,000-line pull request that took three minutes to generate over the cubicle wall, expecting a human colleague to spend three agonizing hours reviewing it for edge-case horrors.
Aaron leaned right into the irony on stage:
“I know everybody here loves using AI. I do too. I love using AI to make slop grenades, it’s great… But I want to take a poll of the audience here: How many of you like receiving slop grenades?”
In a hall packed with hundreds of engineers, exactly two or three hesitant hands went up in the front row.
The message was undeniable: Generating unchecked tokens is cheap, addictive, and fun for the sender; dealing with the resulting fallout is an asymmetric tax levied on everyone else.
Aaron’s core technical thesis: The “As-If” Rule and why we read code
This one’s for DHH.
Where DHH’s talk was a seemingly never-ending, increasingly ranty (and of course, scream-y) collection of Silicon Valley buzzwords, vague analogies about 19th-century Danish portraiture, and unchecked hubris, Aaron gave a masterclass on the mechanics of compilers and runtime semantics.
He grounded his talk in a foundational concept from systems architecture: the “As-If” Rule. In C++ and language runtimes, a compiler is permitted to make any transformation, inline any method, eliminate allocations, or reorder execution, provided that the observable behavior remains strictly identical to the code the programmer wrote.
Aaron walked the audience through the real work being done by the Ruby core and infrastructure teams:
Parallel execution with ractors: How Ractor-local garbage collection in Ruby 4.1 eliminates singleton GC bottlenecks by giving each Ractor its own isolated heap.
Interpreter inlining: How Ruby 4.0 inlines method initializations into call sites, stripping stack frames to make object allocations 70% faster without even touching a JIT.
ZJIT and abstract interpretation: How ZJIT’s high-level intermediate representation (HIR) simulates execution, using algebraic substitution and dead-code elimination to turn a 1,000-allocation Rack loop into just 8 allocations.
Why did this matter? Because of the punchline Aaron delivered at the one-hour mark.
Proponents of vibe coding argue that AI agents are “just another compiler”, and that since you don’t inspect the assembly generated by LLVM or GCC, you shouldn’t care about inspecting the Rust or TypeScript spit out by Claude or GPT.
Aaron obliterated that comparison in two sentences:
“The compiler made a promise to you: the As-If Rule. Whatever it does, the behavior that you can observe matches the code that you wrote. And everything that I showed you in this presentation shows you what it costs to keep that promise.
Your AI has not made this promise to you. There is no As-If Rule for your English.”
There’s no contract when you write ambiguous English prompts into a model, nor is there any mathematical proof of correctness. There’s no guarantee of invariant preservation.
Simply put: Treating code as an opaque black box isn’t high-level visionary leadership; it is reckless abdication.
The real world: When the bots turn against you
Aaron then delivered an astonishing, previously undisclosed case study: the May 2026 RubyGems exploit.
He detailed how automated, AI-driven bots executing the “gem stuffer” attack discovered a Rube Goldberg chain of zero-day vulnerabilities:
RubyGems webhooked to rubydoc.info.
rubydoc.info processed YARD documentation inside a networked Docker container.
When the RubyGems team began revoking credentials, the bots independently leveraged a 6-year-old cached HTTP authorization vulnerability behind Fastly to sniff valid maintainer keys.
It was a chilling counterweight to DHH’s utopian fantasy. While DHH urged everyone to blindly delegate business infrastructure to autonomous agents, the security engineers at RubyGems were in the trenches defending against autonomous agent swarms exploiting undocumented edge cases.
And who saved the ecosystem? Not English prompts. Human engineers reading raw code, dissecting diffs, and understanding HTTP packet headers.
Reclaiming MINASWAN: Community over ego
Beyond the technical fireworks, Aaron’s keynote reminded everyone why the Ruby community existed long before DHH’s latest crusade.
Earlier in the conference, DHH talked extensively about himself, his great-great-grandfather, his 20-year-old talks, and his personal productivity stats. His talk had a lot of “Me, me, me”. (It made me wonder if he had a obsessed “human printer” assistant like a certain world leader we all know.)
Aaron used his stage time to bring up Mike Dalessio, a quiet, tireless open-source contributor who has maintained Nokogiri, SQLite3, and Ruby security for two decades. He announced Dalessio’s appointment as the newest member of the Rails Core Team.
It was an intentional, emotional tribute to the values of MINASWAN (“Matz is nice and so we are nice”). It centered the workers, the maintainers, and the collaborative joy of open source.
Early reactions in the comments
As I write this article (Sunday, September 27, 2026, 11:34 p.m. EDT), the video has been up only 4 hours.
The overwhelming sentiment in the comments was one of profound relief mixed with lingering exasperation over the conference’s rocky start.
My favorite was one commenter wry sobriquet for Aaron’s keynote, “Damage control: the talk”.
Another vented about the financial reality of attending: “Ah, good to see a technical talk about Rails in the last day, in the last keynote of this $700 USD event.”
Longtime fans who felt burned by Thursday morning’s eulogy found their footing again, with viewers praising Aaron for actually delivering on the conference’s namesake: “If I want to see talks about AI, I’ll watch talks about AI. I watched Rails World, expecting talks about Rails and its future.”
A few lone voices dismissed Aaron’s plea to keep reading code as an unsustainable luxury that businesses will soon steamroll in pursuit of pure feature velocity. Others immediately countered with the hard reality of accumulated tech debt: companies can afford not to care about code quality until the unreadable slop starts breaking production and costing them customers.
For a community nursing collective whiplash, Aaron’s keynote proved that the heart of Rails is still very much beating, even if its original architect was eager to call time of death.
The verdict: Don’t concede your destiny
DHH opened Rails World 2026 by declaring that the era of human programmers writing code is dead, telling an anxious room of working engineers that caution is for “fucking losers.”
Aaron Patterson closed Rails World 2026 by showing that the people actually building Ruby’s compilers, runtime, and security infrastructure haven’t quit. They’re making the language faster, safer, and more concurrent than it has ever been.
You don’t have to swallow the black pill of defeatist obsolescence, nor do you have to swallow DHH’s white pill of corporate gaslighting and throwaway slop.
As Aaron proved, there is a third way: Remain curious, keep mastering your tools, understand the abstractions beneath your feet, and refuse to surrender your agency.
The best one-line summary of David Heinemeier Hansson’s (DHH) keynote at Rails World 2026 was Stefan Lindbohm’s comment on its YouTube video:
“This is the most confusing funeral I’ve ever experienced”
This was the flagship keynote for the framework’s premier gathering, and it felt less like an affirmation of Rails’ future and more like an intellectual abandonment of its foundational craft, delivered by a creator increasingly insulated from the core community that used, supported, and helped build Rails alongside him.
(And DHH also did it so LOUDLY. I can’t be the only one who’s noticed that late-career DHH is a lot like late-career Al Pacino, who seems to think that the most effective way to get a message across is by YELLING.)
The keynote cannot be understood as an isolated technology talk. It set up a lawnchair right on the crossroads of two growing crises:
The existential disruption of generative AI on software as craft, and
A deep, multi-year revolt within the Ruby ecosystem against DHH’s personal politics, power concentration, cultural alienation, and let’s face it: he’s become yet another techno-dick.
Abandoned by its own creator
In his hour on stage, DHH barely mentioned the technology the audience had gathered to celebrate. In fact, an AI transcript analysis by a commenter revealed that the word “Ruby” was spoken just 11 times throughout the entire presentation.
Instead, DHH unveiled a series of radical repudiations of the doctrines he spent two decades embedding into software canon:
“Pencils Down” on manual code. DHH announced that 37signals has banned hand-written code as standard operating procedure. Hand-writing code is now treated as a failure state. He also declared, “I have retired from being a professional programmer,” and that English is now his favorite programming language. He said that in the past year, only ~3% of the code he produced was Ruby. This. could be a hard pill to swallow for a community that had a tenet called “Exalt beautiful code”.
Ditching the web app. For 20 years, DHH championed server-rendered web applications, HTML over the wire, and the “Majestic Monolith”. At the keynote, he announced that 37signals’ flagship email client, HEY, is abandoning the web app model entirely. Armed with agentic code generators, a small team was tasked with pumping out six native desktop and mobile applications simultaneously.
Black-box Rust backends. Admitting he despises Rust (“like pouring acid in my eyes”, “inhumane to ask people of flesh and blood to subject their eyeballs to”), DHH celebrated outsourcing the entire HEY backend to AI agents writing Rust. His justification was rooted in total detachment: he never has to read or maintain it. It functions purely as an opaque black box.
The “loser” ultimatum. Dismissing concerns over job displacement, intellectual property theft, or code maintainability, DHH commanded the room to “take the white pill” and embrace extreme acceleration (the 2026 version of “move fast and break things”). His parting assessment for anyone feeling cautious or skeptical about turning software development into black-box agent orchestration: “The black pill is for fucking losers. Don’t be a loser.”
To understand why this keynote felt less like bold leadership and more like a betrayal, you have to look at the cultural fracture that preceded it.
In a poignant, widely read November 2025 reflection, In Praise of DHH, long-time developer (and my friend) Filipa MV captured the tragic arc of DHH’s relationship with the community:
“Prologue. I never met him, but I liked him. He was cool. He could be arrogant, and brash. He was maybe a little too self-satisfied. But on the whole I would say he was someone I admired, someone I looked up to. He was a role model. David Heinemeier Hansson (aka dhh), indirectly, through the creation of Ruby on Rails and the community that sprung up around it, had a big impact on my life… Rails was the connective tissue that threaded together many meaningful friendships of mine.”
As Filipa noted, many in the community historically tolerated DHH’s arrogance because of his undeniable taste and track record: “I have always liked David’s technical leadership! I have historically thought that he’s right more often than he’s wrong!”
Yet, as documented across the ecosystem, from Filipa’s essay to David Celis’s The DHH Problem, to Tekin Süleyman’s The Ruby Community Has a DHH Problem, DHH made a JK Rowling-like slide from a brash, opinionated visionary into a reactionary figure engaged in institutional power games:
The culture war shift. In recent years, DHH turned his public channels toward culture-war grievances: railing against DEI, adopting anti-trans talking points, praising far-right British agitators like Tommy Robinson, and describing London’s multicultural demographics as a “nightmare.” For a global community founded on the Ruby ethos of MINASWAN (“Matz is nice and so we are nice“), watching the titular figurehead of Rails embrace xenophobic tropes and exclusion felt like an assault on the community’s foundational spirit.
Power and institutional captivity. When community members and contributors pushed back, they discovered that DHH had architected a structure where he could not be held accountable. Between controlling the Rails trademarks, chairing the Rails Foundation, dominating Rails Core alongside Basecamp and Shopify (who also have a problematic leader), and exerting leverage over events (such as the contentious Ruby Central and RubyGems funding dramas of 2025), DHH built, as Filipa MV observed, “a world where people can’t say no to him.”
The Eeection of the community. When DHH told his Rails World audience not to be “losers,” it confirmed what critics had warned: the empathy was gone. To quote Filipa MV: “He has great technical taste but he is not a good leader… To have him keynote and hold a veto over the community is to say to people like me, and brown-skinned people everywhere, ‘you don’t belong here.’”
“Feel the fucking room, ffs” and the revolt in the comments section
DHH probably intended his keynote to be an exhilarating, Steve Ballmer-style “Oh, what a time to be alive!” rally. The public reception in the conference hall and across the YouTube comment section was characterized by shock, grief, and exhaustion.
The “conference tax” vs. the pitch. Attendees and remote viewers quickly noted the absurdity of paying premium ticket, travel, and lodging fees for a Rails conference only to be told that Rails is an afterthought and programming is dead:
“I attended Euruko a few days ago… Matz talked about tech. I feel sorry for everyone who bought a ticket and ‘has’ to be there to endure the rest of what’s coming.”
“Came here for Rails, got told I’m a loser in the shadows lol.”
“Imagine being a speaker following this talk and having to talk about Rails after DHH dumped it for Rust.”
Wealthy techie vs working techie. Commenters drove home the stark class divide between a multi-millionaire founder playing with unlimited API tokens and everyday developers navigating a brutal tech market and a rising cost of living:
“He’s a multimillionaire talking to a room of people who still need a paycheck for the next 30 years. He has his bag, of course he’s excited. He’s got nothing to lose like the rest of us.”
“The problem is not really that AI will end careers, the problem is that the people who will end it are trying to convince you to be happy about it… Feel the fucking room, ffs.”
The knowledge freeze and architectural decay. For years, DHH and 37signals marketed themselves as the ultimate defenders of digital sovereignty. They led the charge on leaving the public cloud (“Cloud Exit”), crusaded against Apple’s App Store tax, championed self-hosted SQLite, and preached independence from Silicon Valley oligarchs.
Yet at Rails World 2026, that posture inverted entirely:
From sovereignty to model rent-seeking: The software pipeline was surrendered to centralized model providers like Anthropic and OpenAI. As one commenter observed: “Rails World 2025: End to end freedom. Rails World 2026: Just depend on other companies.”
From craft to disposable slop: Software is no longer a well-tended garden engineered for human delight and maintainability. It’s now an unread, disposable byproduct generated in mass volume. To cite the work of another techno-dick: We are now the pointy-haired bosses from Dilbert.
Cannibalizing his own moat: If an email client, a desktop utility, or a SaaS backend can be vibecoded in 20 minutes from plain English prompts, the economic justification for 37signals vanishes. Why pay a monthly SaaS subscription to HEY or Basecamp when an agent can compile a custom personal client directly to native bytecode?
The end of an era
Programming languages and frameworks are like Freddy Kruger or Jason Voorhees; they’re hard to kill and live longer than expected.
Ruby on Rails won’t vanish overnight. Thousands of monoliths power the backbone of global businesses, and Ruby’s and Rails’ expressive designs will always offer genuine joy to developers who care about the craft of programming.
But something did die on the keynote stage in Austin: the social contract between the framework and its creator. For years, developers looked the other way during DHH’s controversies because he remained the ultimate champion of developer ergonomics, craftsmanship, and the indie hacker’s right to build elegant software.
By taking the stage at Rails World to declare coding obsolete, dismiss Ruby as a relic, flaunt unreadable Rust generated by third-party black boxes, and label his own audience “losers” for caring about their craft, DHH finalized a break that had been brewing for years.
Rails may endure, but its original architect has officially left the building. It’s now up to the community to decide whether it continues to chain itself to an alienated founder, or finally gather the courage to build a post-DHH future.
Happy Saturday, everyone! Here on Global Nerdy, Saturday means that it’s time for another “picdump” — the weekly assortment of amusing or interesting pictures, comics, and memes I found over the past week. Share and enjoy!