fly-io-g1y72q.txt (22629B)
1 [1] App performance optimization [2] 2 [3] Need a Logo? View Our Brand Assets 3 Open main menu 4 5 Articles 6 [5] Blog [6] Phoenix Files [7] Laravel Bytes [8] Ruby Dispatch [9] Django 7 Beats [10] JavaScript Journal 8 9 [11] Security [12] Infra Log [13] Docs [14] Community [15] Status [16] Pricing 10 [17] Sign In [18] Get Started [19] RSS Feed 11 [20] Blog [21] Phoenix Files [22] Laravel Bytes [23] Ruby Dispatch [24] Django 12 Beats [25] JavaScript Journal [26] Security [27] Infra Log [28] Docs [29] 13 Community (opens an external site) [30] Status (opens an external site) [31] 14 Pricing [32] Sign In [33] Get Started [34] RSS Feed 15 Reading time • 16 min [35] Share this post on Twitter [36] Share this post on 16 Hacker News [37] Share this post on Reddit 17 18 My AI Skeptic Friends Are All Nuts 19 20 Author 21 Thomas Ptacek 22 23 Name 24 Thomas Ptacek 25 @tqbf 26 [38] @tqbf 27 28 A psychedelic landscape. Image by [39] Annie Ruygt 29 30 A heartfelt provocation about AI-assisted programming. 31 32 Tech execs are mandating LLM adoption. That’s bad strategy. But I get where 33 they’re coming from. 34 35 Some of the smartest people I know share a bone-deep belief that AI is a fad — 36 the next iteration of NFT mania. I’ve been reluctant to push back on them, 37 because, well, they’re smarter than me. But their arguments are unserious, and 38 worth confronting. Extraordinarily talented people are doing work that LLMs 39 already do better, out of spite. 40 41 All progress on LLMs could halt today, and LLMs would remain the 2nd most 42 important thing to happen over the course of my career. 43 44 Important caveat: I’m discussing only the implications of LLMs for software 45 development. For art, music, and writing? I got nothing. I’m inclined to 46 believe the skeptics in those fields. I just don’t believe them about mine. 47 48 Bona fides: I’ve been shipping software since the mid-1990s. I started out in 49 boxed, shrink-wrap C code. Survived an ill-advised [40]Alexandrescu C++ phase. 50 Lots of Ruby and Python tooling. Some kernel work. A whole lot of server-side 51 C, Go, and Rust. However you define “serious developer”, I qualify. Even if 52 only on one of your lower tiers. 53 54 [41]level setting 55 56 † (or, God forbid, 2 years ago with Copilot) 57 58 First, we need to get on the same page. If you were trying and failing to use 59 an LLM for code 6 months ago †, you’re not doing what most serious LLM-assisted 60 coders are doing. 61 62 People coding with LLMs today use agents. Agents get to poke around your 63 codebase on their own. They author files directly. They run tools. They compile 64 code, run tests, and iterate on the results. They also: 65 66 • pull in arbitrary code from the tree, or from other trees online, into 67 their context windows, 68 • run standard Unix tools to navigate the tree and extract information, 69 • interact with Git, 70 • run existing tooling, like linters, formatters, and model checkers, and 71 • make essentially arbitrary tool calls (that you set up) through MCP. 72 73 The code in an agent that actually “does stuff” with code is not, itself, AI. 74 This should reassure you. It’s surprisingly simple systems code, wired to 75 ground truth about programming in the same way a Makefile is. You could write 76 an effective coding agent in a weekend. Its strengths would have more to do 77 with how you think about and structure builds and linting and test harnesses 78 than with how advanced o3 or Sonnet have become. 79 80 If you’re making requests on a ChatGPT page and then pasting the resulting 81 (broken) code into your editor, you’re not doing what the AI boosters are 82 doing. No wonder you’re talking past each other. 83 84 [42]the positive case 85 86 four quadrants of tedium and importance 87 88 LLMs can write a large fraction of all the tedious code you’ll ever need to 89 write. And most code on most projects is tedious. LLMs drastically reduce the 90 number of things you’ll ever need to Google. They look things up themselves. 91 Most importantly, they don’t get tired; they’re immune to inertia. 92 93 Think of anything you wanted to build but didn’t. You tried to home in on some 94 first steps. If you’d been in the limerent phase of a new programming language, 95 you’d have started writing. But you weren’t, so you put it off, for a day, a 96 year, or your whole career. 97 98 I can feel my blood pressure rising thinking of all the bookkeeping and 99 Googling and dependency drama of a new project. An LLM can be instructed to 100 just figure all that shit out. Often, it will drop you precisely at that golden 101 moment where shit almost works, and development means tweaking code and 102 immediately seeing things work better. That dopamine hit is why I code. 103 104 There’s a downside. Sometimes, gnarly stuff needs doing. But you don’t wanna do 105 it. So you refactor unit tests, soothing yourself with the lie that you’re 106 doing real work. But an LLM can be told to go refactor all your unit tests. An 107 agent can occupy itself for hours putzing with your tests in a VM and come back 108 later with a PR. If you listen to me, you’ll know that. You’ll feel worse 109 yak-shaving. You’ll end up doing… real work. 110 111 [43]but you have no idea what the code is 112 113 Are you a vibe coding Youtuber? Can you not read code? If so: astute point. 114 Otherwise: what the fuck is wrong with you? 115 116 You’ve always been responsible for what you merge to main. You were five years 117 go. And you are tomorrow, whether or not you use an LLM. 118 119 If you build something with an LLM that people will depend on, read the code. 120 In fact, you’ll probably do more than that. You’ll spend 5-10 minutes knocking 121 it back into your own style. LLMs are [44]showing signs of adapting to local 122 idiom, but we’re not there yet. 123 124 People complain about LLM-generated code being “probabilistic”. No it isn’t. 125 It’s code. It’s not Yacc output. It’s knowable. The LLM might be stochastic. 126 But the LLM doesn’t matter. What matters is whether you can make sense of the 127 result, and whether your guardrails hold. 128 129 Reading other people’s code is part of the job. If you can’t metabolize the 130 boring, repetitive code an LLM generates: skills issue! How are you handling 131 the chaos human developers turn out on a deadline? 132 133 † (because it can hold 50-70kloc in its context window) 134 135 For the last month or so, Gemini 2.5 has been my go-to †. Almost nothing it 136 spits out for me merges without edits. I’m sure there’s a skill to getting a 137 SOTA model to one-shot a feature-plus-merge! But I don’t care. I like moving 138 the code around and chuckling to myself while I delete all the stupid comments. 139 I have to read the code line-by-line anyways. 140 141 [45]but hallucination 142 143 If hallucination matters to you, your programming language has let you down. 144 145 Agents lint. They compile and run tests. If their LLM invents a new function 146 signature, the agent sees the error. They feed it back to the LLM, which says 147 “oh, right, I totally made that up” and then tries again. 148 149 You’ll only notice this happening if you watch the chain of thought log your 150 agent generates. Don’t. This is why I like [46]Zed’s agent mode: it begs you to 151 tab away and let it work, and pings you with a desktop notification when it’s 152 done. 153 154 I’m sure there are still environments where hallucination matters. But 155 “hallucination” is the first thing developers bring up when someone suggests 156 using LLMs, despite it being (more or less) a solved problem. 157 158 [47]but the code is shitty, like that of a junior developer 159 160 Does an intern cost $20/month? Because that’s what Cursor.ai costs. 161 162 Part of being a senior developer is making less-able coders productive, be they 163 fleshly or algebraic. Using agents well is both a both a skill and an 164 engineering project all its own, of prompts, indices, [48]and (especially) 165 tooling. LLMs only produce shitty code if you let them. 166 167 † (Also: 100% of all the Bash code you should author ever again) 168 169 Maybe the current confusion is about who’s doing what work. Today, LLMs do a 170 lot of typing, Googling, test cases †, and edit-compile-test-debug cycles. But 171 even the most Claude-poisoned serious developers in the world still own 172 curation, judgement, guidance, and direction. 173 174 Also: let’s stop kidding ourselves about how good our human first cuts really 175 are. 176 177 [49]but it’s bad at rust 178 179 It’s hard to get a good toolchain for Brainfuck, too. Life’s tough in the 180 aluminum siding business. 181 182 † (and they surely will; the Rust community takes tooling seriously) 183 184 A lot of LLM skepticism probably isn’t really about LLMs. It’s projection. 185 People say “LLMs can’t code” when what they really mean is “LLMs can’t write 186 Rust”. Fair enough! But people select languages in part based on how well LLMs 187 work with them, so Rust people should get on that †. 188 189 I work mostly in Go. I’m confident the designers of the Go programming language 190 didn’t set out to produce the most LLM-legible language in the industry. They 191 succeeded nonetheless. Go has just enough type safety, an extensive standard 192 library, and a culture that prizes (often repetitive) idiom. LLMs kick ass 193 generating it. 194 195 All this is to say: I write some Rust. I like it fine. If LLMs and Rust aren’t 196 working for you, I feel you. But if that’s your whole thing, we’re not having 197 the same argument. 198 199 [50]but the craft 200 201 Do you like fine Japanese woodworking? All hand tools and sashimono joinery? Me 202 too. Do it on your own time. 203 204 † (I’m a piker compared to my woodworking friends) 205 206 I have a basic wood shop in my basement †. I could get a lot of satisfaction 207 from building a table. And, if that table is a workbench or a grill table, 208 sure, I’ll build it. But if I need, like, a table? For people to sit at? In my 209 office? I buy a fucking table. 210 211 Professional software developers are in the business of solving practical 212 problems for people with code. We are not, in our day jobs, artisans. Steve 213 Jobs was wrong: we do not need to carve the unseen feet in the sculpture. 214 Nobody cares if the logic board traces are pleasingly routed. If anything we 215 build endures, it won’t be because the codebase was beautiful. 216 217 Besides, that’s not really what happens. If you’re taking time carefully 218 golfing functions down into graceful, fluent, minimal functional expressions, 219 alarm bells should ring. You’re yak-shaving. The real work has depleted your 220 focus. You’re not building: you’re self-soothing. 221 222 Which, wait for it, is something LLMs are good for. They devour schlep, and 223 clear a path to the important stuff, where your judgement and values really 224 matter. 225 226 [51]but the mediocrity 227 228 As a mid-late career coder, I’ve come to appreciate mediocrity. You should be 229 so lucky as to have it flowing almost effortlessly from a tap. 230 231 We all write mediocre code. Mediocre code: often fine. Not all code is equally 232 important. Some code should be mediocre. Maximum effort on a random unit test? 233 You’re doing something wrong. Your team lead should correct you. 234 235 Developers all love to preen about code. They worry LLMs lower the “ceiling” 236 for quality. Maybe. But they also raise the “floor”. 237 238 Gemini’s floor is higher than my own. My code looks nice. But it’s not as 239 thorough. LLM code is repetitive. But mine includes dumb contortions where I 240 got too clever trying to DRY things up. 241 242 And LLMs aren’t mediocre on every axis. They almost certainly have a bigger bag 243 of algorithmic tricks than you do: radix tries, topological sorts, graph 244 reductions, and LDPC codes. Humans romanticize rsync ([52]Andrew Tridgell wrote 245 a paper about it!). To an LLM it might not be that much more interesting than a 246 SQL join. 247 248 But I’m getting ahead of myself. It doesn’t matter. If truly mediocre code is 249 all we ever get from LLMs, that’s still huge. It’s that much less mediocre code 250 humans have to write. 251 252 [53]but it’ll never be AGI 253 254 I don’t give a shit. 255 256 Smart practitioners get wound up by the AI/VC hype cycle. I can’t blame them. 257 But it’s not an argument. Things either work or they don’t, no matter what 258 Jensen Huang has to say about it. 259 260 [54]but they take-rr jerbs 261 262 [55]So does open source. We used to pay good money for databases. 263 264 We’re a field premised on automating other people’s jobs away. “Productivity 265 gains,” say the economists. You get what that means, right? Fewer people doing 266 the same stuff. Talked to a travel agent lately? Or a floor broker? Or a record 267 store clerk? Or a darkroom tech? 268 269 When this argument comes up, libertarian-leaning VCs start the chant: 270 lamplighters, creative destruction, new kinds of work. Maybe. But I’m not 271 hypnotized. I have no fucking clue whether we’re going to be better off after 272 LLMs. Things could get a lot worse for us. 273 274 LLMs really might displace many software developers. That’s not a high horse we 275 get to ride. Our jobs are just as much in tech’s line of fire as everybody 276 else’s have been for the last 3 decades. We’re not [56]East Coast dockworkers; 277 we won’t stop progress on our own. 278 279 [57]but the plagiarism 280 281 Artificial intelligence is profoundly — and probably unfairly — threatening to 282 visual artists in ways that might be hard to appreciate if you don’t work in 283 the arts. 284 285 We imagine artists spending their working hours pushing the limits of 286 expression. But the median artist isn’t producing gallery pieces. They produce 287 on brief: turning out competent illustrations and compositions for magazine 288 covers, museum displays, motion graphics, and game assets. 289 290 LLMs easily — alarmingly — clear industry quality bars. Gallingly, one of the 291 things they’re best at is churning out just-good-enough facsimiles of human 292 creative work. I have family in visual arts. I can’t talk to them about LLMs. I 293 don’t blame them. They’re probably not wrong. 294 295 Meanwhile, software developers spot code fragments [58]seemingly lifted from 296 public repositories on Github and lose their shit. What about the licensing? If 297 you’re a lawyer, I defer. But if you’re a software developer playing this card? 298 Cut me a little slack as I ask you to shove this concern up your ass. No 299 profession has demonstrated more contempt for intellectual property. 300 301 The median dev thinks Star Wars and Daft Punk are a public commons. The great 302 cultural project of developers has been opposing any protection that might 303 inconvenience a monetizable media-sharing site. When they fail at policy, they 304 route around it with coercion. They stand up global-scale piracy networks and 305 sneer at anybody who so much as tries to preserve a new-release window for a TV 306 show. 307 308 Call any of this out if you want to watch a TED talk about how hard it is to 309 stream The Expanse on LibreWolf. Yeah, we get it. You don’t believe in IPR. 310 Then shut the fuck up about IPR. Reap the whirlwind. 311 312 It’s all special pleading anyways. LLMs digest code further than you do. If you 313 don’t believe a typeface designer can stake a moral claim on the terminals and 314 counters of a letterform, you sure as hell can’t be possessive about a 315 red-black tree. 316 317 [59]positive case redux 318 319 When I started writing a couple days ago, I wrote a section to “level set” to 320 the state of the art of LLM-assisted programming. A bluefish filet has a longer 321 shelf life than an LLM take. In the time it took you to read this, everything 322 changed. 323 324 Kids today don’t just use agents; they use asynchronous agents. They wake up, 325 free-associate 13 different things for their LLMs to work on, make coffee, fill 326 out a TPS report, drive to the Mars Cheese Castle, and then check their 327 notifications. They’ve got 13 PRs to review. Three get tossed and re-prompted. 328 Five of them get the same feedback a junior dev gets. And five get merged. 329 330 “I’m sipping rocket fuel right now,” a friend tells me. “The folks on my team 331 who aren’t embracing AI? It’s like they’re standing still.” He’s not 332 bullshitting me. He doesn’t work in SFBA. He’s got no reason to lie. 333 334 There’s plenty of things I can’t trust an LLM with. No LLM has any of access to 335 prod here. But I’ve been first responder on an incident and fed 4o — not 336 o4-mini, 4o — log transcripts, and watched it in seconds spot LVM metadata 337 corruption issues on a host we’ve been complaining about for months. Am I 338 better than an LLM agent at interrogating OpenSearch logs and Honeycomb traces? 339 No. No, I am not. 340 341 To the consternation of many of my friends, I’m not a radical or a futurist. 342 I’m a statist. I believe in the haphazard perseverance of complex systems, of 343 institutions, of reversions to the mean. I write Go and Python code. I’m not a 344 Kool-aid drinker. 345 346 But something real is happening. My smartest friends are blowing it off. Maybe 347 I persuade you. Probably I don’t. But we need to be done making space for bad 348 arguments. 349 350 [60]but i’m tired of hearing about it 351 352 And here I rejoin your company. I read [61]Simon Willison, and that’s all I 353 really need. But all day, every day, a sizable chunk of the front page of HN is 354 allocated to LLMs: incremental model updates, startups doing things with LLMs, 355 LLM tutorials, screeds against LLMs. It’s annoying! 356 357 But AI is also incredibly — a word I use advisedly — important. It’s getting 358 the same kind of attention that smart phones got in 2008, and not as much as 359 the Internet got. That seems about right. 360 361 I think this is going to get clearer over the next year. The cool kid 362 haughtiness about “stochastic parrots” and “vibe coding” can’t survive much 363 more contact with reality. I’m snarking about these people, but I meant what I 364 said: they’re smarter than me. And when they get over this affectation, they’re 365 going to make coding agents profoundly more effective than they are today. 366 367 Last updated • 368 Jun 2, 2025 369 370 [62] Share this post on Twitter [63] Share this post on Hacker News [64] Share 371 this post on Reddit 372 373 Author 374 Thomas Ptacek 375 376 Name 377 Thomas Ptacek 378 @tqbf 379 [65] @tqbf 380 381 Next post ↑ 382 [66] What are MCP Servers? 383 Previous post ↓ 384 [67] Using Kamal 2.0 in Production 385 386 Next post ↑ 387 [68] What are MCP Servers? 388 Previous post ↓ 389 [69] Using Kamal 2.0 in Production 390 391 [70] App performance optimization 392 393 Company 394 [71]About [72]Pricing [73]Jobs 395 396 Articles 397 [74]Blog [75]Phoenix Files [76]Laravel Bytes [77]Ruby Dispatch [78]Django 398 Beats [79]JavaScript Journal 399 400 Resources 401 [80]Docs [81]Support [82]Support Metrics [83]Status 402 403 Contact 404 [84]GitHub [85]Twitter [86]Community 405 406 Legal 407 [87]Security [88]Privacy policy [89]Terms of service [90]Acceptable Use 408 Policy 409 410 Copyright © 2025 Fly.io 411 412 413 References: 414 415 [1] https://fly.io/ 416 [2] https://fly.io/blog/ 417 [3] https://fly.io/docs/about/brand/ 418 [5] https://fly.io/blog/ 419 [6] https://fly.io/phoenix-files/ 420 [7] https://fly.io/laravel-bytes/ 421 [8] https://fly.io/ruby-dispatch/ 422 [9] https://fly.io/django-beats/ 423 [10] https://fly.io/javascript-journal/ 424 [11] https://fly.io/security/ 425 [12] https://fly.io/infra-log/ 426 [13] https://fly.io/docs/ 427 [14] https://community.fly.io/ 428 [15] https://status.flyio.net/ 429 [16] https://fly.io/pricing/ 430 [17] https://fly.io/app/sign-in 431 [18] https://fly.io/docs/hands-on/start/ 432 [19] https://fly.io/blog/feed.xml 433 [20] https://fly.io/blog/ 434 [21] https://fly.io/phoenix-files/ 435 [22] https://fly.io/laravel-bytes/ 436 [23] https://fly.io/ruby-dispatch/ 437 [24] https://fly.io/django-beats/ 438 [25] https://fly.io/javascript-journal/ 439 [26] https://fly.io/security/ 440 [27] https://fly.io/infra-log/ 441 [28] https://fly.io/docs/ 442 [29] https://community.fly.io/ 443 [30] https://status.flyio.net/ 444 [31] https://fly.io/pricing/ 445 [32] https://fly.io/app/sign-in 446 [33] https://fly.io/docs/hands-on/start/ 447 [34] https://fly.io/blog/feed.xml 448 [35] https://twitter.com/share?text=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts&url=https://fly.io/blog/youre-all-nuts/&via=flydotio 449 [36] http://news.ycombinator.com/submitlink?u=https://fly.io/blog/youre-all-nuts/&t=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts 450 [37] http://www.reddit.com/submit?url=https://fly.io/blog/youre-all-nuts/&title=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts 451 [38] https://twitter.com/tqbf 452 [39] https://annieruygtillustration.com/ 453 [40] https://www.amazon.com/Modern-Design-Generic-Programming-Patterns/dp/0201704315 454 [41] https://fly.io/blog/youre-all-nuts/#level-setting 455 [42] https://fly.io/blog/youre-all-nuts/#the-positive-case 456 [43] https://fly.io/blog/youre-all-nuts/#but-you-have-no-idea-what-the-code-is 457 [44] https://github.com/PatrickJS/awesome-cursorrules 458 [45] https://fly.io/blog/youre-all-nuts/#but-hallucination 459 [46] https://zed.dev/agentic 460 [47] https://fly.io/blog/youre-all-nuts/#but-the-code-is-shitty-like-that-of-a-junior-developer 461 [48] https://fly.io/blog/semgrep-but-for-real-now/ 462 [49] https://fly.io/blog/youre-all-nuts/#but-its-bad-at-rust 463 [50] https://fly.io/blog/youre-all-nuts/#but-the-craft 464 [51] https://fly.io/blog/youre-all-nuts/#but-the-mediocrity 465 [52] https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf 466 [53] https://fly.io/blog/youre-all-nuts/#but-itll-never-be-agi 467 [54] https://fly.io/blog/youre-all-nuts/#but-they-take-rr-jerbs 468 [55] https://news.ycombinator.com/item?id=43776612 469 [56] https://en.wikipedia.org/wiki/2024_United_States_port_strike 470 [57] https://fly.io/blog/youre-all-nuts/#but-the-plagiarism 471 [58] https://arxiv.org/abs/2311.17035 472 [59] https://fly.io/blog/youre-all-nuts/#positive-case-redux 473 [60] https://fly.io/blog/youre-all-nuts/#but-im-tired-of-hearing-about-it 474 [61] https://simonwillison.net/ 475 [62] https://twitter.com/share?text=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts&url=https://fly.io/blog/youre-all-nuts/&via=flydotio 476 [63] http://news.ycombinator.com/submitlink?u=https://fly.io/blog/youre-all-nuts/&t=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts 477 [64] http://www.reddit.com/submit?url=https://fly.io/blog/youre-all-nuts/&title=My%20AI%20Skeptic%20Friends%20Are%20All%20Nuts 478 [65] https://twitter.com/tqbf 479 [66] https://fly.io/blog/mcps-everywhere/ 480 [67] https://fly.io/blog/kamal-in-production/ 481 [68] https://fly.io/blog/mcps-everywhere/ 482 [69] https://fly.io/blog/kamal-in-production/ 483 [70] https://fly.io/ 484 [71] https://fly.io/about/ 485 [72] https://fly.io/pricing/ 486 [73] https://fly.io/jobs/ 487 [74] https://fly.io/blog/ 488 [75] https://fly.io/phoenix-files/ 489 [76] https://fly.io/laravel-bytes/ 490 [77] https://fly.io/ruby-dispatch/ 491 [78] https://fly.io/django-beats/ 492 [79] https://fly.io/javascript-journal/ 493 [80] https://fly.io/docs/ 494 [81] https://fly.io/docs/support/ 495 [82] https://fly.io/support/ 496 [83] https://status.flyio.net/ 497 [84] https://github.com/superfly/ 498 [85] https://twitter.com/flydotio 499 [86] https://community.fly.io/ 500 [87] https://fly.io/docs/security/ 501 [88] https://fly.io/legal/privacy-policy 502 [89] https://fly.io/legal/terms-of-service 503 [90] https://fly.io/legal/acceptable-use-policy