Files
davideisinger.com/static/archive/fly-io-g1y72q.txt
2025-07-01 11:49:42 -04:00

504 lines
22 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[1] App performance optimization [2]
[3] Need a Logo? View Our Brand Assets
Open main menu
Articles
[5] Blog [6] Phoenix Files [7] Laravel Bytes [8] Ruby Dispatch [9] Django
Beats [10] JavaScript Journal
[11] Security [12] Infra Log [13] Docs [14] Community [15] Status [16] Pricing
[17] Sign In [18] Get Started [19] RSS Feed
[20] Blog [21] Phoenix Files [22] Laravel Bytes [23] Ruby Dispatch [24] Django
Beats [25] JavaScript Journal [26] Security [27] Infra Log [28] Docs [29]
Community (opens an external site) [30] Status (opens an external site) [31]
Pricing [32] Sign In [33] Get Started [34] RSS Feed
Reading time • 16 min [35] Share this post on Twitter [36] Share this post on
Hacker News [37] Share this post on Reddit
My AI Skeptic Friends Are All Nuts
Author
Thomas Ptacek
Name
Thomas Ptacek
@tqbf
[38] @tqbf
A psychedelic landscape. Image by [39] Annie Ruygt
A heartfelt provocation about AI-assisted programming.
Tech execs are mandating LLM adoption. Thats bad strategy. But I get where
theyre coming from.
Some of the smartest people I know share a bone-deep belief that AI is a fad —
the next iteration of NFT mania. Ive been reluctant to push back on them,
because, well, theyre smarter than me. But their arguments are unserious, and
worth confronting. Extraordinarily talented people are doing work that LLMs
already do better, out of spite.
All progress on LLMs could halt today, and LLMs would remain the 2nd most
important thing to happen over the course of my career.
Important caveat: Im discussing only the implications of LLMs for software
development. For art, music, and writing? I got nothing. Im inclined to
believe the skeptics in those fields. I just dont believe them about mine.
Bona fides: Ive been shipping software since the mid-1990s. I started out in
boxed, shrink-wrap C code. Survived an ill-advised [40]Alexandrescu C++ phase.
Lots of Ruby and Python tooling. Some kernel work. A whole lot of server-side
C, Go, and Rust. However you define “serious developer”, I qualify. Even if
only on one of your lower tiers.
[41]level setting
† (or, God forbid, 2 years ago with Copilot)
First, we need to get on the same page. If you were trying and failing to use
an LLM for code 6 months ago †, youre not doing what most serious LLM-assisted
coders are doing.
People coding with LLMs today use agents. Agents get to poke around your
codebase on their own. They author files directly. They run tools. They compile
code, run tests, and iterate on the results. They also:
• pull in arbitrary code from the tree, or from other trees online, into
their context windows,
• run standard Unix tools to navigate the tree and extract information,
• interact with Git,
• run existing tooling, like linters, formatters, and model checkers, and
• make essentially arbitrary tool calls (that you set up) through MCP.
The code in an agent that actually “does stuff” with code is not, itself, AI.
This should reassure you. Its surprisingly simple systems code, wired to
ground truth about programming in the same way a Makefile is. You could write
an effective coding agent in a weekend. Its strengths would have more to do
with how you think about and structure builds and linting and test harnesses
than with how advanced o3 or Sonnet have become.
If youre making requests on a ChatGPT page and then pasting the resulting
(broken) code into your editor, youre not doing what the AI boosters are
doing. No wonder youre talking past each other.
[42]the positive case
four quadrants of tedium and importance
LLMs can write a large fraction of all the tedious code youll ever need to
write. And most code on most projects is tedious. LLMs drastically reduce the
number of things youll ever need to Google. They look things up themselves.
Most importantly, they dont get tired; theyre immune to inertia.
Think of anything you wanted to build but didnt. You tried to home in on some
first steps. If youd been in the limerent phase of a new programming language,
youd have started writing. But you werent, so you put it off, for a day, a
year, or your whole career.
I can feel my blood pressure rising thinking of all the bookkeeping and
Googling and dependency drama of a new project. An LLM can be instructed to
just figure all that shit out. Often, it will drop you precisely at that golden
moment where shit almost works, and development means tweaking code and
immediately seeing things work better. That dopamine hit is why I code.
Theres a downside. Sometimes, gnarly stuff needs doing. But you dont wanna do
it. So you refactor unit tests, soothing yourself with the lie that youre
doing real work. But an LLM can be told to go refactor all your unit tests. An
agent can occupy itself for hours putzing with your tests in a VM and come back
later with a PR. If you listen to me, youll know that. Youll feel worse
yak-shaving. Youll end up doing… real work.
[43]but you have no idea what the code is
Are you a vibe coding Youtuber? Can you not read code? If so: astute point.
Otherwise: what the fuck is wrong with you?
Youve always been responsible for what you merge to main. You were five years
go. And you are tomorrow, whether or not you use an LLM.
If you build something with an LLM that people will depend on, read the code.
In fact, youll probably do more than that. Youll spend 5-10 minutes knocking
it back into your own style. LLMs are [44]showing signs of adapting to local
idiom, but were not there yet.
People complain about LLM-generated code being “probabilistic”. No it isnt.
Its code. Its not Yacc output. Its knowable. The LLM might be stochastic.
But the LLM doesnt matter. What matters is whether you can make sense of the
result, and whether your guardrails hold.
Reading other peoples code is part of the job. If you cant metabolize the
boring, repetitive code an LLM generates: skills issue! How are you handling
the chaos human developers turn out on a deadline?
† (because it can hold 50-70kloc in its context window)
For the last month or so, Gemini 2.5 has been my go-to †. Almost nothing it
spits out for me merges without edits. Im sure theres a skill to getting a
SOTA model to one-shot a feature-plus-merge! But I dont care. I like moving
the code around and chuckling to myself while I delete all the stupid comments.
I have to read the code line-by-line anyways.
[45]but hallucination
If hallucination matters to you, your programming language has let you down.
Agents lint. They compile and run tests. If their LLM invents a new function
signature, the agent sees the error. They feed it back to the LLM, which says
“oh, right, I totally made that up” and then tries again.
Youll only notice this happening if you watch the chain of thought log your
agent generates. Dont. This is why I like [46]Zeds agent mode: it begs you to
tab away and let it work, and pings you with a desktop notification when its
done.
Im sure there are still environments where hallucination matters. But
“hallucination” is the first thing developers bring up when someone suggests
using LLMs, despite it being (more or less) a solved problem.
[47]but the code is shitty, like that of a junior developer
Does an intern cost $20/month? Because thats what Cursor.ai costs.
Part of being a senior developer is making less-able coders productive, be they
fleshly or algebraic. Using agents well is both a both a skill and an
engineering project all its own, of prompts, indices, [48]and (especially)
tooling. LLMs only produce shitty code if you let them.
† (Also: 100% of all the Bash code you should author ever again)
Maybe the current confusion is about whos doing what work. Today, LLMs do a
lot of typing, Googling, test cases †, and edit-compile-test-debug cycles. But
even the most Claude-poisoned serious developers in the world still own
curation, judgement, guidance, and direction.
Also: lets stop kidding ourselves about how good our human first cuts really
are.
[49]but its bad at rust
Its hard to get a good toolchain for Brainfuck, too. Lifes tough in the
aluminum siding business.
† (and they surely will; the Rust community takes tooling seriously)
A lot of LLM skepticism probably isnt really about LLMs. Its projection.
People say “LLMs cant code” when what they really mean is “LLMs cant write
Rust”. Fair enough! But people select languages in part based on how well LLMs
work with them, so Rust people should get on that †.
I work mostly in Go. Im confident the designers of the Go programming language
didnt set out to produce the most LLM-legible language in the industry. They
succeeded nonetheless. Go has just enough type safety, an extensive standard
library, and a culture that prizes (often repetitive) idiom. LLMs kick ass
generating it.
All this is to say: I write some Rust. I like it fine. If LLMs and Rust arent
working for you, I feel you. But if thats your whole thing, were not having
the same argument.
[50]but the craft
Do you like fine Japanese woodworking? All hand tools and sashimono joinery? Me
too. Do it on your own time.
† (Im a piker compared to my woodworking friends)
I have a basic wood shop in my basement †. I could get a lot of satisfaction
from building a table. And, if that table is a workbench or a grill table,
sure, Ill build it. But if I need, like, a table? For people to sit at? In my
office? I buy a fucking table.
Professional software developers are in the business of solving practical
problems for people with code. We are not, in our day jobs, artisans. Steve
Jobs was wrong: we do not need to carve the unseen feet in the sculpture.
Nobody cares if the logic board traces are pleasingly routed. If anything we
build endures, it wont be because the codebase was beautiful.
Besides, thats not really what happens. If youre taking time carefully
golfing functions down into graceful, fluent, minimal functional expressions,
alarm bells should ring. Youre yak-shaving. The real work has depleted your
focus. Youre not building: youre self-soothing.
Which, wait for it, is something LLMs are good for. They devour schlep, and
clear a path to the important stuff, where your judgement and values really
matter.
[51]but the mediocrity
As a mid-late career coder, Ive come to appreciate mediocrity. You should be
so lucky as to have it flowing almost effortlessly from a tap.
We all write mediocre code. Mediocre code: often fine. Not all code is equally
important. Some code should be mediocre. Maximum effort on a random unit test?
Youre doing something wrong. Your team lead should correct you.
Developers all love to preen about code. They worry LLMs lower the “ceiling”
for quality. Maybe. But they also raise the “floor”.
Geminis floor is higher than my own. My code looks nice. But its not as
thorough. LLM code is repetitive. But mine includes dumb contortions where I
got too clever trying to DRY things up.
And LLMs arent mediocre on every axis. They almost certainly have a bigger bag
of algorithmic tricks than you do: radix tries, topological sorts, graph
reductions, and LDPC codes. Humans romanticize rsync ([52]Andrew Tridgell wrote
a paper about it!). To an LLM it might not be that much more interesting than a
SQL join.
But Im getting ahead of myself. It doesnt matter. If truly mediocre code is
all we ever get from LLMs, thats still huge. Its that much less mediocre code
humans have to write.
[53]but itll never be AGI
I dont give a shit.
Smart practitioners get wound up by the AI/VC hype cycle. I cant blame them.
But its not an argument. Things either work or they dont, no matter what
Jensen Huang has to say about it.
[54]but they take-rr jerbs
[55]So does open source. We used to pay good money for databases.
Were a field premised on automating other peoples jobs away. “Productivity
gains,” say the economists. You get what that means, right? Fewer people doing
the same stuff. Talked to a travel agent lately? Or a floor broker? Or a record
store clerk? Or a darkroom tech?
When this argument comes up, libertarian-leaning VCs start the chant:
lamplighters, creative destruction, new kinds of work. Maybe. But Im not
hypnotized. I have no fucking clue whether were going to be better off after
LLMs. Things could get a lot worse for us.
LLMs really might displace many software developers. Thats not a high horse we
get to ride. Our jobs are just as much in techs line of fire as everybody
elses have been for the last 3 decades. Were not [56]East Coast dockworkers;
we wont stop progress on our own.
[57]but the plagiarism
Artificial intelligence is profoundly — and probably unfairly — threatening to
visual artists in ways that might be hard to appreciate if you dont work in
the arts.
We imagine artists spending their working hours pushing the limits of
expression. But the median artist isnt producing gallery pieces. They produce
on brief: turning out competent illustrations and compositions for magazine
covers, museum displays, motion graphics, and game assets.
LLMs easily — alarmingly — clear industry quality bars. Gallingly, one of the
things theyre best at is churning out just-good-enough facsimiles of human
creative work. I have family in visual arts. I cant talk to them about LLMs. I
dont blame them. Theyre probably not wrong.
Meanwhile, software developers spot code fragments [58]seemingly lifted from
public repositories on Github and lose their shit. What about the licensing? If
youre a lawyer, I defer. But if youre a software developer playing this card?
Cut me a little slack as I ask you to shove this concern up your ass. No
profession has demonstrated more contempt for intellectual property.
The median dev thinks Star Wars and Daft Punk are a public commons. The great
cultural project of developers has been opposing any protection that might
inconvenience a monetizable media-sharing site. When they fail at policy, they
route around it with coercion. They stand up global-scale piracy networks and
sneer at anybody who so much as tries to preserve a new-release window for a TV
show.
Call any of this out if you want to watch a TED talk about how hard it is to
stream The Expanse on LibreWolf. Yeah, we get it. You dont believe in IPR.
Then shut the fuck up about IPR. Reap the whirlwind.
Its all special pleading anyways. LLMs digest code further than you do. If you
dont believe a typeface designer can stake a moral claim on the terminals and
counters of a letterform, you sure as hell cant be possessive about a
red-black tree.
[59]positive case redux
When I started writing a couple days ago, I wrote a section to “level set” to
the state of the art of LLM-assisted programming. A bluefish filet has a longer
shelf life than an LLM take. In the time it took you to read this, everything
changed.
Kids today dont just use agents; they use asynchronous agents. They wake up,
free-associate 13 different things for their LLMs to work on, make coffee, fill
out a TPS report, drive to the Mars Cheese Castle, and then check their
notifications. Theyve got 13 PRs to review. Three get tossed and re-prompted.
Five of them get the same feedback a junior dev gets. And five get merged.
“Im sipping rocket fuel right now,” a friend tells me. “The folks on my team
who arent embracing AI? Its like theyre standing still.” Hes not
bullshitting me. He doesnt work in SFBA. Hes got no reason to lie.
Theres plenty of things I cant trust an LLM with. No LLM has any of access to
prod here. But Ive been first responder on an incident and fed 4o — not
o4-mini, 4o — log transcripts, and watched it in seconds spot LVM metadata
corruption issues on a host weve been complaining about for months. Am I
better than an LLM agent at interrogating OpenSearch logs and Honeycomb traces?
No. No, I am not.
To the consternation of many of my friends, Im not a radical or a futurist.
Im a statist. I believe in the haphazard perseverance of complex systems, of
institutions, of reversions to the mean. I write Go and Python code. Im not a
Kool-aid drinker.
But something real is happening. My smartest friends are blowing it off. Maybe
I persuade you. Probably I dont. But we need to be done making space for bad
arguments.
[60]but im tired of hearing about it
And here I rejoin your company. I read [61]Simon Willison, and thats all I
really need. But all day, every day, a sizable chunk of the front page of HN is
allocated to LLMs: incremental model updates, startups doing things with LLMs,
LLM tutorials, screeds against LLMs. Its annoying!
But AI is also incredibly — a word I use advisedly — important. Its getting
the same kind of attention that smart phones got in 2008, and not as much as
the Internet got. That seems about right.
I think this is going to get clearer over the next year. The cool kid
haughtiness about “stochastic parrots” and “vibe coding” cant survive much
more contact with reality. Im snarking about these people, but I meant what I
said: theyre smarter than me. And when they get over this affectation, theyre
going to make coding agents profoundly more effective than they are today.
Last updated •
Jun 2, 2025
[62] Share this post on Twitter [63] Share this post on Hacker News [64] Share
this post on Reddit
Author
Thomas Ptacek
Name
Thomas Ptacek
@tqbf
[65] @tqbf
Next post ↑
[66] What are MCP Servers?
Previous post ↓
[67] Using Kamal 2.0 in Production
Next post ↑
[68] What are MCP Servers?
Previous post ↓
[69] Using Kamal 2.0 in Production
[70] App performance optimization
Company
[71]About [72]Pricing [73]Jobs
Articles
[74]Blog [75]Phoenix Files [76]Laravel Bytes [77]Ruby Dispatch [78]Django
Beats [79]JavaScript Journal
Resources
[80]Docs [81]Support [82]Support Metrics [83]Status
Contact
[84]GitHub [85]Twitter [86]Community
Legal
[87]Security [88]Privacy policy [89]Terms of service [90]Acceptable Use
Policy
Copyright © 2025 Fly.io
References:
[1] https://fly.io/
[2] https://fly.io/blog/
[3] https://fly.io/docs/about/brand/
[5] https://fly.io/blog/
[6] https://fly.io/phoenix-files/
[7] https://fly.io/laravel-bytes/
[8] https://fly.io/ruby-dispatch/
[9] https://fly.io/django-beats/
[10] https://fly.io/javascript-journal/
[11] https://fly.io/security/
[12] https://fly.io/infra-log/
[13] https://fly.io/docs/
[14] https://community.fly.io/
[15] https://status.flyio.net/
[16] https://fly.io/pricing/
[17] https://fly.io/app/sign-in
[18] https://fly.io/docs/hands-on/start/
[19] https://fly.io/blog/feed.xml
[20] https://fly.io/blog/
[21] https://fly.io/phoenix-files/
[22] https://fly.io/laravel-bytes/
[23] https://fly.io/ruby-dispatch/
[24] https://fly.io/django-beats/
[25] https://fly.io/javascript-journal/
[26] https://fly.io/security/
[27] https://fly.io/infra-log/
[28] https://fly.io/docs/
[29] https://community.fly.io/
[30] https://status.flyio.net/
[31] https://fly.io/pricing/
[32] https://fly.io/app/sign-in
[33] https://fly.io/docs/hands-on/start/
[34] https://fly.io/blog/feed.xml
[35] https://twitter.com/share?text=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts&url=https://fly.io/blog/youre-all-nuts/&via=flydotio
[36] http://news.ycombinator.com/submitlink?u=https://fly.io/blog/youre-all-nuts/&t=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts
[37] http://www.reddit.com/submit?url=https://fly.io/blog/youre-all-nuts/&title=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts
[38] https://twitter.com/tqbf
[39] https://annieruygtillustration.com/
[40] https://www.amazon.com/Modern-Design-Generic-Programming-Patterns/dp/0201704315
[41] https://fly.io/blog/youre-all-nuts/#level-setting
[42] https://fly.io/blog/youre-all-nuts/#the-positive-case
[43] https://fly.io/blog/youre-all-nuts/#but-you-have-no-idea-what-the-code-is
[44] https://github.com/PatrickJS/awesome-cursorrules
[45] https://fly.io/blog/youre-all-nuts/#but-hallucination
[46] https://zed.dev/agentic
[47] https://fly.io/blog/youre-all-nuts/#but-the-code-is-shitty-like-that-of-a-junior-developer
[48] https://fly.io/blog/semgrep-but-for-real-now/
[49] https://fly.io/blog/youre-all-nuts/#but-its-bad-at-rust
[50] https://fly.io/blog/youre-all-nuts/#but-the-craft
[51] https://fly.io/blog/youre-all-nuts/#but-the-mediocrity
[52] https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf
[53] https://fly.io/blog/youre-all-nuts/#but-itll-never-be-agi
[54] https://fly.io/blog/youre-all-nuts/#but-they-take-rr-jerbs
[55] https://news.ycombinator.com/item?id=43776612
[56] https://en.wikipedia.org/wiki/2024_United_States_port_strike
[57] https://fly.io/blog/youre-all-nuts/#but-the-plagiarism
[58] https://arxiv.org/abs/2311.17035
[59] https://fly.io/blog/youre-all-nuts/#positive-case-redux
[60] https://fly.io/blog/youre-all-nuts/#but-im-tired-of-hearing-about-it
[61] https://simonwillison.net/
[62] https://twitter.com/share?text=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts&url=https://fly.io/blog/youre-all-nuts/&via=flydotio
[63] http://news.ycombinator.com/submitlink?u=https://fly.io/blog/youre-all-nuts/&t=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts
[64] http://www.reddit.com/submit?url=https://fly.io/blog/youre-all-nuts/&title=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts
[65] https://twitter.com/tqbf
[66] https://fly.io/blog/mcps-everywhere/
[67] https://fly.io/blog/kamal-in-production/
[68] https://fly.io/blog/mcps-everywhere/
[69] https://fly.io/blog/kamal-in-production/
[70] https://fly.io/
[71] https://fly.io/about/
[72] https://fly.io/pricing/
[73] https://fly.io/jobs/
[74] https://fly.io/blog/
[75] https://fly.io/phoenix-files/
[76] https://fly.io/laravel-bytes/
[77] https://fly.io/ruby-dispatch/
[78] https://fly.io/django-beats/
[79] https://fly.io/javascript-journal/
[80] https://fly.io/docs/
[81] https://fly.io/docs/support/
[82] https://fly.io/support/
[83] https://status.flyio.net/
[84] https://github.com/superfly/
[85] https://twitter.com/flydotio
[86] https://community.fly.io/
[87] https://fly.io/docs/security/
[88] https://fly.io/legal/privacy-policy
[89] https://fly.io/legal/terms-of-service
[90] https://fly.io/legal/acceptable-use-policy