So it seems this started because of DHH. Let's judge the technology by the technology, else we are just taking a holier-than-thou approach whereby we think we are better than others because we don't commit certain sins, which is a real problem because when we look inwardly and honestly we shall see that we are guilty of many of the same sins. Let's judge the technology for the technology itself and leave personal ideology out of it. My 2 cents (which will inevitably be downvoted)
DHH called for deportation and not killing of illegal immigrants. Those are normal opinions held by normal people and you people are snowflakes.
In any case railers are screwed. Either use the upstream which DHH is going to slopify and slowly kill, or use these forks by left-fascists who might happily sabotage you for perceived wrongthink in future.
In the absurd post-truth future we find ourselves in a situation where wrong think just means anything right of what Hasan Piker thinks on a given day.
Aside from the actual politics, DHH is clearly in "fuck you mode". I certainly don't trust that he's going to make decisions in the interest of the broader rails community.
Heh. It's always funny how people like that don't see their irony of being "inclusive" of "all backgrounds" just after having made a long list of people who they will throw out immediately for vague transgressions that are based on rumors and innuendo.
because once you attempt to start to apply any label it becomes more and more vague. If I am a black man from South Africa who hates white people for perpetuating the Apartheid, am I welcome or am I a racist? If I am a man who's own father transitioned to being a woman and I no longer feel comfortable around trans-people because I lost my 'father figure', am I a transphobe or am I welcome? I understand these are deliberately obtuse examples. I bring them up because I never know where on the spectrum the line is drawn for these labels yet people will gladly declare somebody a 'nazi' because their dad watches Fox News. Even asking the question "when does somebody on the right go far enough to be considered a fascist?" often is met with the retort "defending nazis makes you a nazi".
We both know what the 'answer' is because we are normal people who understand nuance - a skill many people have lost as they have come to have their ideals defined by their identity, not the other way around.
> Just because some people calling someone a nazi are wrong doesn't mean everyone calling someone a nazi is wrong.
Sometimes they aren't just wrong, they are the loudest.
Yet to be determined if they actually ship or do stuff at a reasonable rate. It only has any notoriety because of the subject matter and jumping on the hate-DHH train.
I guess they've been "laying the groundwork" of a fork that claims to just want to rename things and do little else for over a month?
Rails, or even more so php have VERY little to bring to the table in 2026 going forward. Rails (ruby) is still a saner language than PHP, but as slow as php is. (granted ruby is not idiotic like PHP and runs rather than start/die).
If you go the LLM route something like Go is probably the goto default for MOST networking/web-first apps. You get static types, and a fast compile cycle (rust is still very slow here), and IF you want more from the language you can use something like Lisette (https://lisette.run/).
Bottom line is dynamic languages are obsolete. There is really no benefits from using them outside very small throw away scripts.
Well that's not something you say in a Rails conference, best language or framework for a project has been debated before I was born and will continue to be
Why would I bother with anything but Laravel for small CRUD apps? Not having to think about concurrency is neat, having tons of abstractions built by people with 50x my experience is neat, just being able to get going is neat.
Building the things I've built using Laravel with Golang would probably take 10x the development time as I have to handcraft everything Laravel already natively provides. Or I have to trust 100 packages from 100 different random devs to simulate the Laravel experience in Golang.
With LLMs the language DOES NOT MATTER. The framework DOES NOT MATTER. This is the thing we are talking about here. Laravel is 100% useless for a LLM first project. I can pretty much do anything in vanilla Go i can in Laravel and be 100x more performant, 100x more typesafe, and produce 100x more maintainable systems.
This is why dynamic languages, and even more so BAD ones like PHP are just useless going into 2027 and the future. Its simple, the language gives you what it gives in perf, builtin RUNTIME features, and COMPILETIME features.
From that you pick the best for whatever you are building, be it Go, Rust, Ocaml etc. The language does not matter.
Go has 90% of stuff builtin, you rarely need any dependencies. Look at Laravel ITS A HUGE CODEBASE and a high risk for any real software project. I would stay FAR away from it.
LLMs would need way more tokens using langs that dont have native features already built in? Even with LLMs I would take 10x the amount of time/tokens until I have something I could've just done with Laravel in the first place.
A more concrete example: Laravel has a built in rate limiter, with Go I'd either have to tell Claude to install some rate limiter package from some random ass dev or implement its own which would consume tokens/time...
Also your argument about PHP/Laravel being risky is pretty funny as everything is risky and most of the internet runs on PHP...
What I do not understand with the "languages do not matter"/"frameworks do not matter" is ultimately the following:
What a good language or a good library (and to a lesser degree also a good framework) does is to pre-compress ideas into well understandable and composable chunks.
Examples:
`printf("foo %d, %3.2f %s", ...)` abstracts/compresses a general strategy of shuffling bytes into the correct ascii/utf-8... format.
An LLM could also write the raw assembly or bytecode for doing the same thing, but for one it would take much more tokens and to apply this pre-invented concept, and second without the concept already invented there would be no "information pattern" in existence that the LLM could have learned or refer to.
`list.map(...).filter(...)...` are patterns that (when applied strictly in a functional sense) go hand in hand with laws like `map` not affecting the number of elements, and filter producing no new elements etc...
These are also patterns that are already invented and depending on the language these restrictions are checked. Just reading `map` somewhere can tell you (and the LLM) a lot, and writing `map` instead of while, for or jmp will capture and express much more information. LLMs would not have been able to learn these concepts if they did not already exist. And even if such a general pattern would be discovered by an LLM somewhere inside its learnt parameters, it would not haven given this pattern a name that it could/would tell you. And if you do not know the name for such a concept how have a much harder time prompting the LLM.
Expressing computations in a well understood algebra allows for symbolic manipulation and simplification. like `5 + 3 == 3 * 5 == (1+1+1) * 5 == (5+5+5)...`. But algebraic manipulation requires a symbolic language with precise rules to describe what manipulation is allowed. In AI-speak you could say the language itself is a harness or a sandbox to guide and restrict whats possible. Doing advanced math proofs is only possible for LLMs because languages like LEAN provide a strict guideline to build upon.
In short, two extremes: If LEAN is so great at proofing correctness and LLMs are so good at LEAN, why is not from today on everything (windows, linux, basecamp, hey, gcc, rustc, blender...) translated into LEAN? Why bother with rust at all? On the other hand if languages do not matter anyway and LLMs are able to recognize all the pattern on their own, why not let the LLM output and iterate on the binary bytecode to generate a self contained binary directly?
I would have been more interested if he'd spoken about improvements actually in the Ruby world.
There fast JITS like YJIT, ZJIT, JRuby and TruffleRuby.
We also have static typing with RBS and an AOT compiler in Spinel and we have embeddable Crystal.
The speed of TruflleRuby or Spinal with RBS isn't that far behind Go.
Here's a Ruby advantage for you, Ruby even with static typing needs fewer tokens from your context window to represent the same solution as verbose Go.
There's lots of positive things that DHH could have spoken of but didn't.
Citation needed? I love hating PHP, but of the reasons I would chose something other than PHP, speed and resource consumption is pretty far down the list?
PHP is sync. This means every IO operation i do runs sync. This is why PHP will always be the slowest ones out there. Open a file, SQL queries, sending emails etc. Its all sync. Its all slow.
PS. I fully aware of hacks around this like reactphp and the other related async things, but those are all just heavy dependencies and for most sane devs non starters.
I must admit I haven't run the numbers, but if this can be trusted, sync PHP isn't far off from golang - while async does rather well?
I probably would only reach for PHP if I needed to run on shared hosting (or rather, my customers did) - in which case few other technologies would compete, obviously.
PS: golang is much faster at cpu - in this case one might argue a fairer comparison would use a compiled extension on the php side IMNHO - as that seems a likely path if a real project was cpu bound on a few small functions.
No... no its not. PHP is bound by IO in 99,9% of cases. This means im pretty much fucked the moment i need to do something even a little more complex. Say one request need 5-10 separate sql queries, and some http call and possibly some task like sending a mail. PHP need to run these all sync. I have to hack around and use a shit-tonne of deps like message queues and all sorts of plugins to get something like this working performantly.
Before you go on that apologist route, no, im not installing any random shit just to do simple stuff like this..
The summary is exactly why a lot of people is upset.
>That’s what bothers me most. I’m skeptical of his AI claims, but that’s not the real issue here.
>The problem is that he stood up at Rails World and told everyone that he was moving his product off Rails and the best thing he could come up with to say to people still using Rails was that we’re “the best of the best.” Thanks, I guess.
>Maybe Rails is done, in the way the Mosscap project claims. Maybe it’s time to focus on stability and maintenance. If that’s the plan, someone needs to say it. If it isn’t, then let’s hear about where we’re headed. DHH did neither.
A lot of people bet their entire careers on Rails. I've worked on Rails shops, and the majority of developers have not touched another language in years. There are people who never shipped anything in anything but Rails, and haven't done anything in other language since college, or ever if they did a bootcamp.
I have even interviewed a significant number of people doing Rails for ten years who did not know it was possible to launch a Ruby application with `ruby script.rb`.
Not to mention that with the emergence of frontend frameworks, most Rails developers were doing API-only stuff, and barely interacted with the frontend.
I recently left a company that was moving to from Rails to Go (might have been partially my fault), and there were was a bit of a mutiny where several teams have refused to change languages.
DHH is pretty much saying AI is gonna eat this people alive.
These people who refer to them selves as a "Rails Engineer" (or substitute any other language/framework) and fail to realize that there are other tools in the box are of course first against the wall in the AI-driven future.
A carpenter who only knows how to use a hammer isn't a very good carpenter.
Rails is the most cult-like, anti-learning, anti-choice and even anti-engineering technology I have ever used. It does NOT want you to make your own choices, it does NOT want you to decouple from the framework, it does NOT want you to grow. It’s frightening.
> 37signals differentiates their products with opinionated UI/UX, not novel features. They are rewriting Hey as six native apps because the web fidelity isn’t good enough. So UI matters enough to justify complete rewrites, but also everyone just wants CLIs?
I've seen this one a few times lately. People should stop building UIs, nobody wants to interact with a UI. Everyone's app should just be an API that you can use with a chatbot. Except for my app — my app is a handcrafted miracle of artisanal UX and its UI will change the way you see the world.
It's exactly the old argument, just now with LLMs in the place of shell pipelines: in terms of functionality and value to users, software ought to be malleable and composable. We've known it since the eighties. But the model of selling a piece of software as a product as if it were a pair of shoes is incompatible with that. You need a big monolithic application to justify users paying a bunch of money for it, and you need it to have a fancy interface that makes an impression. And the whole software industry is built on top of that model. Where monolithic software is completely unfit for a purpose, like when it needs to be a component of a larger system, we rely on (mostly unpaid) OSS.
Except now LLMs let you, with very little technical know-how, plaster a ‘programmable’ interface on top of unstructured data/interface meant for humans, and because that's what we actually want, of course everybody does that. So the end result is a wildly expensive pipeline from API to UI and back to API again. I wonder how long the legacy ‘human-oriented’ layer in the middle, and the industry that's been built on top of it, will last.
(Separately, chatbots are not great as a UI for most things, and the problem of building the universal UI still also stands. But it turns out for a lot of things people would rather have a bad universal UI than a good special-purpose UI for each task.)
> I've seen this one a few times lately. People should stop building UIs, nobody wants to interact with a UI. Everyone's app should just be an API that you can use with a chatbot.
Same happened when the first smartphones came out, and everything was about "mobile first". Everyone will use their mobile phones for everything, desktop is dead, every app should be primarily designed for smartphones, everything comes after. Turned out smartphones just another interface that are good for some things, and not good for some other. Same for the "cloud native" movement.
Exactly this. Each new hype cycle, everything must be shoe horned into the hot new technology. So now there's a push to use chatbots for everything, why even have an interface? Just ask the chatbot to make one for you! Because the user totally knows what they want and what works, we've been wrong all these decades when it comes to UIs and customer preference. /s
>Everyone's app should just be an API that you can use with a chatbot.
I see this sentiment a lot, but UI has a greater purpose than just serving the customer needs, it also be used to shape them.
Imagine if instead of going to the grocery store, you called a number and told them what you needed. Sometimes you don't know everything you need. Sometimes you end up discovering something new and buying it even if you didn't plan on it.
In case it wasn't clear, that was intended as a somewhat satirical representation of the position I was discussing :) An important part of any ‘universal UI’ — and arguably the hardest part of building it — has to be that it allows feedback from the API about what and how to display, which is always in tension with the malleability/universality aspect. People are trying to solve that for chatbots right now, with limited success so far.
> Except now LLMs let you, with very little technical know-how, plaster a ‘programmable’ interface on top of unstructured data/interface meant for humans, and because that's what we actually want, of course everybody does that.
I don't think that is what everyone wants, or at the very least its not what I want. My ideal software has a well designed and thought through user interface for the primary interactions, allowing me to think about the goal I'm trying to achieve rather than how I'm manipulating the underlying data model.
Additionally to that please also provide access to the underlying data. Ideally in the form of a locally accessible API but I'll accept a remote one if necessary, provide a CLI on top of that as well if you like.
Yes you caught me out in a bit of exaggeration there. For the topmost level of tasks people typically do want a low-latency, high-bandwidth UI for displaying and manipulating the information they care about.
> "My ideal software has a well designed and thought through user interface for the primary interactions, allowing me to think about the goal I'm trying to achieve"
Yes, this is the crux of the whole discussion. The paradigm is called "Intent-based UX".
I think chat is a great entry point for many experiences. The approachability and flexibility are unmatched.
A question becomes, how do you evolve a chat experience to task specific actions?
I’m building an app to explore scripture. Chat is an amazing starting point. But it’s terrible once you get into reading the actual scripture.
I think we will see more of this in the future. Here is how I’ve envisioned evolving an experience out of chat. Curious if others have their own ideas.
For me personally, the effort to type on a mobile phone is too much. If I can't complete an interaction with maybe two sentences, I much much prefer typing on a computer, and if required, copy everything over.
You gave me an idea :). The original motivation was to explore the Bible like I explore Wikipedia. I think this UX for Wikipedia would be really amazing. Someone should build it. I hope I don't get the itch to do it this weekend!
this whole shove chatbots into everything trend will get reversed or watered-down after a couple years like all the other trends
most of the time, a bad (or non-existent) ui is responsible for even a need of a chatbot; its lazy (and i say this a someone who was forced to implement a chatbot!) from a product design perspective.
that being said, could some complex apps benefit from adding both a command-line style interface to 'pop open the hood' so-to-speak for advanced users and provide a chat interface for beginners as well? yea why not?
I think LLMs may actually help us get to CLI/API driven development. At least, that has been my experience.
Even though most of my projects have a UI, I build a CLI/API version so that the LLM can interact with it directly. I have been using this "CLI driven development" approach for more than a year now and have had fantastic results. The CLI arguments make it easy for LLM to interact with software it wrote.
I usually ask LLM to build a lib, then expose as a CLI and a RESTful API.
As a developer/user I hope for that outcome too — if everybody is using your app through an agent you might as well cut the maintenance cost and drop the GUI, or at least have a nice API alongside it to make it nicer for the agent. But I wonder what it does to the financial incentives to produce software.
I think the popularity of these chat interfaces disagrees with that to some extent. We do already have malleable software for people who can program — the problem has always been bringing it to everyone else.
Words are a great UI. They can be easily converted into audio and haptics. We already have many systems in place that do exactly this with words.
Sure, pretty graphics are nice, but their sole intent should be to convey information. A User Interface that does not allow a person to easily have information conveyed to them is a bad interface.
The modern AI world isn’t perfect, but for a large portion of people who have accessibility needs, it’s absolutely a positive impact on their life in a way that no single technology has been until now.
For sure! One of the big draws of malleability is that you can adapt it to your particular needs. Natural language is a UI just as much as a WIMP GUI, and for some tasks or some people it's a great one.
A chatbot is worse than a CLI app: a CLI app does exactly what you ask for, and has a manual documenting exactly what command do what, and the output is consistent, the same command does the same thing period.
A chatbot using an LLM of course not, it suffers from hallucinations, it may do what you want but there is a change it won't and you have to fight it to get the desired result.
Chatbots are far WORSE than traditional UI for everything. If some product has a chatbot functions it's the first thing I disable, if it's not possible to disable it, I avoid the product.
And GUI applications are typically preferred, at least for the normal people and not us nerds, to CLI applications, since you know people like moving a mouse and clicking on buttons (or tapping them on a touchscreen) that learning commands: a chatbot doesn't make the CLI experience less awful for the average user, and for the nerd user, he prefers to use the CLI directly (replace asking the chatbot with man or --help and you don't need to emit tons of CO2 and transmit your personal data to a datacenter on the other side of the world to do stuff you did with MS-DOS)
>> Chatbots are far WORSE than traditional UI for everything. If some product has a chatbot functions it's the first thing I disable, if it's not possible to disable it, I avoid the product.
The chatbot we added to our B2B product is by far the most popular addition we've made this year. Our users are not tech-savvy, they use a lot of apps everyday and don't want to have to learn and keep up with just another UI. So they like being able to type their wants and needs in plain language (or speak it into their phone, if they are in the field) and get a plain language response back with embedded images and charts.
> a CLI app does exactly what you ask for, and has a manual documenting exactly what command do what, and the output is consistent, the same command does the same thing period
This is a very software-engineery point of view and totally false for the ordinary user. Heck, it is even false for me as a software engineer.
> since you know people like moving a mouse and clicking on buttons
No, they like well-designed user interfaces, and the UI design of a typical CLI is abysmal.
The nice thing about a CLI is that even if you don't like the interface you're given, it's trivial to put an interface you do like in front of it. Much harder to do that with a point and click interface.
> People should stop building UIs, nobody wants to interact with a UI. Everyone's app should just be an API that you can use with a chatbot.
The last thing people want is interacting with a chatbot for anything that doesn't require a chatbot.
> in terms of functionality and value to users, software ought to be malleable and composable.
No, it shouldn't. The last thing people want is for software to change from under them, or be replaced with the bullshit that is a chatbot.
> plaster a ‘programmable’ interface on top of unstructured data/interface meant for humans
Ah yes. I can imagine everyone "plastering programmable interfaces" on top of daily stuff they want to do. Like buying a ticket to a museum. Ordering Doorsash. Sending a meme to a friend. Renting a car...
It is pretty obvious rails is dead as it hangs massively on its founder for good and for bad.
And it is quite telling that he prefers to kill it off like this rather than handing the reigns over to someone else.
A technical note - the big difference is that a design with a number of fat clients don’t need server side rendered html - that lowers the load on the server regardless of the programming language.
You can probably write quite light json apis in Ruby and the performance of them will be dominated by network and db usage anyways compared to a similar implementation done in a compiled language.
He did slow down, but that's not the way to look at dhh contributions. Rails is a whole umbrella is projects, from rails top level package to turbo, solid_cache, sprockets, action-/active-anything, etc. There are lots of relatively recent contributions in that org overall.
Rails has died many deaths over the years. I suppose its ironic that yet another one will be at the hands of its creator, as part of the keynote of a Rails conference he created because the community tried to have one conference where he wasn't the focus of attention.
All this does is justify the people that have been trying to move on from DHH for years. If his politics didn't do it, or his bullying, maybe the fact that he doesn't even use Rails himself will pull the wool from their eyes.
Rails itself will continue. I see no reason to stop using it.
DHH's keynote was like listening to David Brent give a motivational speech.
"Some of you will loose your jobs. I know, I know. Gutting. Gutting. On a more positive note, I'm getting a promotion. So every cloud. Oh, you're still think about the bad stuff aren't you?"
You have to laugh about it because he's kind of making himself irrelevant too. We listened to him because of Rails not Hey or Basecamp. They were just application of Rails as a technology.
If he no longer has a vision for Rails' niche what do we need him for? What's the pitch?
He might as well just be a Barry Gibb impersonator droning on and on about politics. :P
Oh man! now I really need to see an AI edit of the presentation were he storms out at the end to the tune of Simply the Best... Shit! I cant get it off my head
The article forgets one thing, how DHH started his talk: he asked the audience how many people still codes by hand, and only 5 people raised their hands.
I was also waiting for some cool talk of some change, as I loved the simplificiation that Rails has done last year, but I also understand his point of view: he could either speed up the development of rails with AI (what Bun has done), or just say that it's mature and it doesn't matter anymore and it's better to not ruin a mature system.
That was something of a public speaking trick, though. “How many of you are STILL doing X” is never likely to get many people to put up their hands. The speaker is framing it as stupid and backward.
There’s a Louis CK - yes I know, a horrible person, but unfortunately he used to be funny - joke where he asks the audience if they are in their 20s (loud cheer), 30s (less loud, but cheering) and in their 40s (very few cheers, mostly silent). The switcheroo is that he says “See, old people are smart! Why should they cheer? Who knows why I’m asking?”, or something along those lines. Well, it was funnier when he told it.
Anyway, the only logical conclusion clearly is that most Rails developers are over 40.
Every piece of software has an expiration date. You can extend its lifespan, but technology keeps moving. What was considered standard on the backend five years ago may look completely different today. I think that's a good thing. Rails worked extremely well for its time, especially around 2007–2015, but it started to show its age as newer, more capable languages and runtimes matured.
We should be celebrating the fact that we can now port almost anything with far less effort, or modernize an existing stack to meet today's performance expectations, requirements, and engineering standards.
Whats the expiration date on, say, the windows 95 version of paint? Because it still loads just fine on my current windows computer, does everything I'd expect from a paint program, and gets out of the way when I don't need it anymore
I don't know the expiration date of all software, I only know all software has some expiration date. Maybe that version you're using will not be usable in the next 5 years, and it will prove my point. That doesn't mean you cannot use it anymore, it means better options took over.
I don't think OPs comment was meant to be taken literally word for word. Breaking down language this way is hardly a productive way to discuss. OP is saying that most software has an expiry date, is this even controversial? All active software companies are constantly rewriting their stuff and would love to move to a more optimized stack, if cost of porting is not a factor.
>Whats the expiration date on, say, the windows 95 version of paint? Because it still loads just fine on my current windows computer,
When people say software is "expired", "obsolete", "legacy", "limited shelf life", etc ... they're not talking about whether somebody somewhere in the world has the ability or idiosyncratic desire to continue running that old software.
Instead, it means the software's ability to be practical and usable in relation to the rest of the current computing ecosystem. E.g. In this perspective, Win95 MSPAINT is "expired/obsolete" because it can't open .PNG and .JPEG files. In today's world, .PNG/.JPEG files are much more common than the .BMP files that MSPAINT 95 can open.
I still have an old 16-bit Microsoft C/C++ v 7.0 compiler from 1992. Did it expire?!? Well, not literally. There's no ticking time bomb in it that checks the system clock and refuses to run. Instead, the issue is that it doesn't have the newer C99/C++98/C++11 features and I can't use it to compile today's ffmpeg source code. That's what people mean by "expired/obsolete".
But they fill different niches, there's no way I'm going to choose Rust+Axum as much as I love Rust for an ecommerce/CRUD vs something as batteries-included like Rails or Django.
And yet people build sophisticated apps with them anyway, because there are plenty of components you can bring in piecemeal in any language ecosystem. You can even do this in Ruby without Rails.
By way of example, "react doesn't have a router" hasn't stopped it from becoming the dominant frontend framework.
Honestly Rails being finished it's that bad. If you aren't writing the code by hand what benefit is it really bringing to you now?
Rails niche was fast setup/low starting out costs and relatively constrained/medium maintenance costs. To get this you traded performance and type system. The latter usually resulted in increased maintenance costs as test suites ballooned to compensate.
These days fast setup is simply a product of AI, every ecosystem now offers fast setup.
Maintenance costs are now about how token efficient it is to find and fix problems.
Test suites are going to be huge everywhere now but there is some chance languages that require less to accomplish more will win on token efficiency and be favored.
Humans aren't the dominant factor in programming language design or selection anymore, that is a fact at this point it just hasn't sunk in for everyone yet.
We are only ~6mo in to agents being good enough to write code. A year from now our profession will be entirely changed. Agents will get better (how much? don't know) but importantly they will definitely get cheaper and access will be broader. Which is really the point DHH was trying to make.
Access and economics are finally going to do what no-code failed to do, which is democratise software. Maybe not to the point that everyone writes code or even that shit programmers are good, but it will enable shit programmers to write Rust which was literally impossible 6mo ago and they will have better programs as a result.
Which is the other thing he touched on. Good programmers are going to excel here and great programmers are going to dominate. I'm already seeing the 10x programmers hit 100x and 1000x with more access doesn't seem out of sight.
It's also restoring the will to create in a lot of people that lost the passion for the mechanical part of programming, unlocking the experience and skill of these people that were otherwise considering cashing in the bag is huge.
So yes. Rails is done but what is coming next is way more exciting.
I'm with DHH here, be glad it happened but get moving on where things are going to be instead of clinging to the past.
I code and maintain a Rails stack. About 20% of the time an endpoint takes to respond is spent in Ruby. New Relic tells me our Apdex is 99, and it’s very rare for an endpoint to take more than 100ms. Most respond in under 80ms. I could LLM port it (and probably will one day) but performance wouldn’t be the motivation.
If your average per request in the application layer is say 20ms. Your p50 is probably 10-15ms and your p99 is probably something like 80ms. p99.9 is probably a good bit higher than that.
If your site is highly interactive , everyone using it is going to regularly run into actions that take long enough that they notice them and it won’t feel snappy.
Let’s say you went all out and wrote the application layer in C with purely static allocation. You could easily see a p50 around 2ms and a p99 of 3-5ms. (This is obviously dependent on the app).
Even with an average time spent waiting in the database of 80ms, you’ve already made a noticeable difference.
That’s not even mentioning the biggest impact, which is that you can likely get by with far fewer application servers.
Now does it make even more sense to optimize your queries? Yes. Definitely. But with faster application stack you can start moving more things into the application layer and out of the database which is generally harder to scale.
And if you have or can build endpoints that don’t hit your database at all, those will actually be 10x faster than before every time.
As an SRE I would be very interested on experienced devs point of view on that stance, "we don’t even necessarily need to read the code the LLMs produce". To me, that is the only way a single dev can manage > 1 agent. Because I feel running the code will always be slower than a single agent generating it. On the other hand, it implies lack of human understanding on what is going on under the hood. Which is fine if you trust the LLM to write great code, and great tests for the code, but fundamentally you have to have 100% trust, 99.9% is not going to be enough in any serious industry, would it ?
Also eventually you'll also have to trust it to write the deployment code or even run the deployment itself, otherwise SRE is going to be the bottleneck. And only then should I feel anxiety about the rest of my career (that, or my employer decide LLM are good enough to get rid of me, even if they are imperfect).
Not trying to be a jerk but at this point SRE is my main use case for heavy LLM stuff. It's pretty awesome at that. Deployments and CI pipelines have become a breeze. I used to have to ask DevOps for that and wait days. I have even let agents run deployments for side projects and they seem to do better work than most humans I've worked with. It's wild they will actually read all the logs and debug problems so fast. Not something we could ever keep up with.
The actual code and architecture is where it still lacking IMHO. Especially in rails... Like it will just build the least scalable features if you let it do it's thing. Ten queries for what could be one. No separation of concerns. Huge files, lots of duplicated code and then tens of thousands of units tests that just grow like a fatberg.
If your app does anything serious, if you have serious traffic... you are going to need to review each session finely (and your DB schema with each deploy). It could be that this is maybe an indictment of rails more than LLMs, I guess maybe time will tell.
I guess it all depends on context, where I work ops stuff is clearly the bottleneck for a variety of reasons (technical debt that we are constantly working around, secret management for compliance reasons, etc). We self-host everything from bare metal. Some people would need to rethink the infra from the bottom up before it is "LLM ready".
That doesn't mean my job is not threatened mid/long term, in fact, thanks to LLM it is possible to rebuild that in a reasonnable amount of time I think. It's actually one of my side projects to offer this as a service. But if that doesn't work maybe I should have a plan C.
Writing deployment manifests and CI pipelines is not really the core part of "SRE" to me: it's more related to how you run software in production, not the build/test process to get it there.
If you don't look at your code and need to debug a production issue, do you just panic chat with your agent to solve the problem?
>The actual code and architecture is where it still lacking IMHO.
My experience is that the more structure and constraints you can place on what the LLM/Agents actually do, the better they perform. If you just let them run wild a la "make me an app that will make a million dollars MRR, no mistakes", you get a clusterfuck. And it gets more clusterfucky the longer it goes on.
We are many of us now engaged in a big experiment to see just how little you can read the code, and for how long. Considering the consensus is that we have still not yet passed the 1 year anniversary of agents getting good, it feels too early to say how it will play out. But there are a lot of market forces working to make it happen.
Yup - this! A big ol' experiment, we shall see how it goes. I'd be curious (if they exist) on some larger / older orgs with internet scale customer bases that are full in on AI development with limited human reading of it to see how they fare.
> Which is fine if you trust the LLM to write great code, and great tests for the code, but fundamentally you have to have 100% trust, 99.9% is not going to be enough in any serious industry, would it ?
This is lacking a lot of nuance. There are many types of code. There are many situations where I'm analysing something one-off and if I get 33% success ratio, but can easily verify the result, I'm happy - still saved me time and money. They're are situations where I'm generating graphs from some dataset and I don't have to trust anything - I know what the result should look like, I just need the agent to drive matplotlib. There are low stakes dashboards which I'm happy to generate and develop entirely via agents - they'll embed the updated screenshots in PRs that I can yolo-merge - worst case is that someone complains about something not working next time they visit. Then there's lots of experimenting which was never stopped to hit production anyway.
Finally after all of that you get code that's actually part of deployable features. Of course the trust is nowhere near 100%, but if you have a healthy testing process (e2e, validating different browsers, or whatever is appropriate for your environment), then what's your trust in human developer+review? Because mine is nowhere near 100% either.
In practice there are places where I extremely don't care about the code and never wanted it anyway, places where I'll read the code to check the design or just in case, and places which agents are not allowed to touch (medical billing rules for example).
vary similar processes. vibe code/vibe create a presentation. he also knew what "shape the graph should look like" but still had errors in his powerpoint. if you can't trust it with a powerpoint i'm not sure why you can trust it for other low stakes things.
Have you got any sources? The only thing I can find is the 2026/2006 mix-up which feels like a classic typo rather than AI mistake. There are other typos there which makes it less likely the presentation was fully generated. And it means that the result wasn't reviewed - looking at code is irrelevant in comparison.
I don't read the code my LLM produces unless I am investigating the code. I actually don't know Kotlin, or React.
My version of "code review" is "test failure investigation" and I have a hard rule in my repos that agents never modify existing tests while they're implementing features. This means that when I run the tests after they do a bunch of stuff, I see all the tests break. Mostly they're stale assertions and we patch them up. Sometimes they're regressions and we patch those up, and sometimes I notice something dumb and dive deep into a facet of the architecture that can be improved, spend some time exploring it then get the agent to implement.
I think it's a better approach than trying to read everything and catch bugs or improve quality because you wind up focusing the things that actually matter in the real world rather than the things you think might matter.
This is how I've always approached working with offshore devs too. Focus on testing for quality control, not "code quality". After all, you're going to look at the code you wrote 5 years ago and think it's shit anyway right? So all your code is shit.
Regarding "lack of understanding", here's a recent anecdote: I had a bug in a production (but relatively new) system. The customer was texting me saying that they couldn't scan a QR code because it kept "skipping and glitching". They sent me a short video. I described the problem to the agent and it figured out WAY faster than I would have been able to that the customer's clock was set incorrectly. They turned on network time and bingo bango, the thing worked straight away.
I don't thing "comprehension debt" matters at all, because if you want to know something about the code you ask the agent. I can't remember how anything works after 12 months anyway, so I would frequently have to spend ages grepping my own code when a customer came back and asked me to change something in a system we hadn't touched since last year. Asking an agent the same thing takes minutes and is way more accurate (and fun!)
>Regarding "lack of understanding", here's a recent anecdote: I had a bug in a production (but relatively new) system. The customer was texting me saying that they couldn't scan a QR code because it kept "skipping and glitching". They sent me a short video. I described the problem to the agent and it figured out WAY faster than I would have been able to that the customer's clock was set incorrectly. They turned on network time and bingo bango, the thing worked straight away.
That only describes a happy path though -- I also had many instances where there's an issue and just describing it to an agent immediately identifies a fix and it all goes faster compared to me having to "load up" the flow of codebase into my brain first. But I also still have instances where it thinks it identifies an issue correctly, spits a fix which doesn't work and looks wrong. You point out that it does not make sense because of X, it agrees and spits out a new fix, which is also wrong and you start out on these back and forth wild goose chases, at this point I usually give up and do it the old fashioned way by understanding what is actually happening. If it is within an agent loop, there may be no back-and-forth to waste your time but then you pay with wasted tokens when it will eventually gives up or you stop it.
>I don't thing "comprehension debt" matters at all, because if you want to know something about the code you ask the agent. I can't remember how anything works after 12 months anyway, so I would frequently have to spend ages grepping my own code when a customer came back and asked me to change something in a system we hadn't touched since last year. Asking an agent the same thing takes minutes and is way more accurate (and fun!)
I would question the last part. In my mind the more you let go of control over your codebase the more likely that it will drift way from a place where it is still comprehensible to you, and also your comprehension skills atrophy, and with that, your ability to ask good questions and to prod your agent in a correct directions weakens, leading to more wild goose chases and burned tokens.
This is all keeping in mind that for throw away or small applications, maintainability is not that of important of a value so this doesn't affect all codebases.
I dunno, I've built a production billing system for my small telecom company, a first version of a Multiplatform app with some novel technical features, and multiple internal tools for a company I work for, which replace a bunch of tools that were strung together using various off the shelf tools. I've been working with agents for about a year. I haven't noticed any cognitive or comprehension decline. I've built things that would have taken a team of offshore devs multiple months on my own in 4 - 6 weeks, including my own coding agent harness which runs an LLM gateway and has mobile, desktop and web apps which is now in use by non-technical colleagues to build and maintain apps on the same platform.
I don't know any more about KMP, Kotlin, Compose, Bash or React than I did a year ago. I'm not that familiar with any of those technologies (well, I am pretty familiar with bash but not to the level at which it's coded by agents), and I have never run into a situation where I felt like it would be better or faster for me to learn them and go hunting through the code to find some problem or other.
Maybe I'm heading towards a cliff somewhere in the future, but based on my experience of building software for 20+ years I'm not feeling anything but optimism so far.
> I described the problem to the agent and it figured out WAY faster than I would have been able to that the customer's clock was set incorrectly.
:blinks: The architecture of your service relied on customer clocks being correct? That is, you built a distributed service without a clock synchronization primitive that relied on the clocks being sychronized?
I don't know man, even AWS gives you cryptic errors if you have a drifting clock and try to perform some operations. Feels like a pretty forgivable mistake.
I’m not sure that deploying a custom clock synchronisation system would be warranted to show a countdown timer on the screen. The fix is to accept that the interface may be potentially inaccurate by a few seconds and send the relative time rather than the expiry time. Also probably to make the expiry UI stable (ie. have a “try again” button rather than flipping back to the start screen when the timer expires).
I also think that expecting that a computer connected to the internet in 2026 has the correct time isn’t too much of a long shot and things like 2fa QR codes rely on correct timing anyway.
Coding part of the job (as in „typing with my bare hands“) is gone. Now I get to spend more time making product decisions, capturing constraints and executable specs. Resulting code is boring, consistent and gets the job done.
Interesting article. I understand the fury and disappointment.
But still, let's face reality. Rails with Ruby and Django with python's biggest advantage was readability and accessibility. For many, it is just much nicer reading Ruby code than Rust code. But LLMs have completely changed the equation, and development with a statically typed language plays much better into the agentic feedback loop. Add the memory safety guarantees of the rust compiler and the incredible runtime speed even compared to the Java Stack you will see many benefits.
I am biased since I love Rust, but I think backend technologies are going to move more towards statically typed memory safe languages.
Also if you use an agent to write most of your code, with python it gives me a lot of stomach pain just thinking about error potentials and hallucinations, with Rust, that fades to only security implications
As can be seen from that list, DHH is now protected here like Steinberger. Never mention money and funding. Calling DHH a fascist is allowed and encouraged because it distracts from the end goals. But money, hell no!
I really like Rails and I don't see the controversy in anything DHH said. The strongest points for Rails always were productivity, developer ergonomics and strong conventions. Two out of three are now neutral in the age of agentic coding.
Strong conventions are my selling point to still choose rails for green-field projects in 2026. But I'm talking about LoB or CRUD-heavy apps. I wouldn't have chosen rails for an SMTP server. The HEY architecture was based on the productivity/performance trade-off. That trade-off is no longer worth it, since productivity is through the roof, let's prioritize performance and first class UX (the one you can only achieve in native apps).
In his shoes, I would have made the same decisions before and now.
Regarding the future of Rails. I feel this applies to a lot of other frameworks. The idea of frameworks was always to give devs a set of tools to solve problems faster and better. Tools that resonate with you. That you can find "synergy" with. Now you're not writing any of the code; you're barely even looking at it. So, what's the point of frameworks then? I don't know. Popular ecosystems already have out of the box solutions for almost everything. Rails, Django, Laravel, .NET, JVM and many more are mature enough. You could turn them all to maintenance mode and everything would be just fine. What future lies ahead? No idea.
1. This is why BDFL culture in open source is bad. Because if the BDFL decides to go all in on some completely bizarre mess, all of a sudden there’s massive fork politics.
2. Hey is the marquee product now?? Does anyone actually use Hey? I tried it for a year, and basically found I was paying for the privilege of having a slower, buggier, less feature-rich gmail that can’t even dent the have-a-paid-email-that-doesn’t-exploit-you market (Fastmail and Proton exist, yo).
The only people I know still using Hey are doing so because there's no way to move your address elsewhere. It's a PITA to change your email everywhere (and some unfortunate place don't let you; e.g. email as the login and primary key)
I already migrated all of my projects off rails, moving to fastapi, due to a combination of DHH's political bs and Ruby's fumbling of progressive typing/type hints. I actually just completed the migration a couple weeks ago.
I'm now doubly-glad since it seems like, indeed, the bdfl has lost both the plot and the B. The fact that Omarchy is also some weird corporate-sponsored AI-pilled linux reskin is further concerning.
In retrospect, his jamming of things like thruster, hotwire, etc etc into the framework and then now basically abandoning them has me grateful I didn't adopt them, even though I thought they seemed pretty well-intended at the time.
If it is all true then, given the talk, we can establish those truths as not yet widely recognized. The point of the talk was, after all, to convince you of these ostensible truths, which would not resonate if it was already the prevailing understanding. Thus we can surmise that the "old way" persists because the masses don't yet understand those truths or are still adjusting.
'Overrated Ruby programmer finally tries fast languages in domains they are clearly better suited to than Ruby, now that he does not need to write the code himself. He unsuprisingly draws the wrong conclusions and also inevitably mentions his Linux for techbros project, since this is his conference and his keynote.'
This shouldn't surprise anyone about DHH. First, he has always advocated for literate programming. LLMs have solved that for those willing to throw reproducibility and comprehension out the window.
DHH was so fixated on this that he plastered a Ruby interface over everything even when it didn't make sense. For the longest time, foreign keys were enforced by Rails not the DB, and here's DHH thoughts:
I consider stored procedures and constraints vile and reckless destroyers of coherence. No, Mr. Database, you can not have my business logic. Your procedural ambitions will bear no fruit and you'll have to pry that logic from my dead, cold object-oriented hands.
Zed Shaw's infamous "Rails is a Ghetto" (Wayback machine required) also captured this attitude towards engineered software. Basecamp for a long time had a memory leak, and rather than get to the bottom of things DHH was fine with restarting processes every four minutes.
Rails and the community evolved past this and matured into robust software. That said, DHH has come full circle: now that he can type words and get Rust, he can throw everything else out the window again.
People are reading into moving to native apps for each OS for an email app as a move away from Rails or that Rails is dead. The hot-take headline could be "Web applications are dead!" Rails, Django, Laravel, HTMLX, every one of them is in the same spot Rails is in.
We as an industry have been abusing HTTP and HTML for 2+ decades now by building web apps that were traditionally installed client/server applications or standalone client applications. There was a time in the industry that managing all the OS versions, patches, etc. was extremely labor intensive, hence the move to the web. If the cost of building native apps is near zero, in comparison to before AI, then how many web applications are better suited to client/server apps?
Take everyone's favorite app (sarcasm) - ticket tracking for IT or software work. Back in the day (late 90's) this was an installed app, the UI was extremely responsive and restrictive. People building native apps in Visual Basic didn't have to deal with HTML, CSS, and all the trade-offs of a markup language for an application, they had modules/components they could build for UIs. There wasn't weird DOM hierarchies, a data transform to text, send it over HTTP with auth, protect the web server that is open to anyone on the planet to hack, transform from text to data types, save to a database. The native app had a database driver in it or nearby and you did SQL from the app to your database server.
We can containerize application runtimes now. Look at what 37signals did with ONCE as an example, yes they are Rails apps but they could be anything that reduces IT install time compared to the '90s.
My takeaway from that keynote (watched the whole thing) is we need to re-think everything in software: process, tech stacks, architecture, etc. as the industry moves forward. AI has advanced a lot in what it can do in the last 10 months, it might plateau at some point and become another usable tool, but what it opens up is the ability to do things differently because the cost of creating (and throwing away crap output and re-creating) is very cheap.
The web as an application delivery model is very complicated compared to building small native apps. If your average Joe or Jane is going to be creating apps, I would think the thing to reach for is not web.
IMO, something like Basecamp would not be any better as a 'native' app. (probably worse as web tech makes the 'polish' more accessible.)
Not to mention, those VB client/server apps were not as popular with users as HN likes to reminisce. And modern IT departments have often completely banished that stuff.
Well naturally, Basecamp is collaboration software that class of apps probably belongs on the web.
There are probably others that don't need HTML user interfaces. I wasn't suggesting to use VB but there has to be modern UI native/client app frameworks or libraries. The problem IT departments had (speaking from personal experience) was the variation of client machines, DLL "hell" (shared library version conflicts) and patching. If the app is delivered and run as a container on the client's machine, a lot of those issues go away.
You're fucking rails programmer. You're the best of of the best. This is goddman Top Gun I'm looking at here
-- DHH, Rails World 2026 opening keynote, moments before calling everyone loser
201 comments
[ 0.29 ms ] story [ 11.0 ms ] threadIn any case railers are screwed. Either use the upstream which DHH is going to slopify and slowly kill, or use these forks by left-fascists who might happily sabotage you for perceived wrongthink in future.
Which part is the vague transgression?
Just because some people calling someone a nazi are wrong doesn't mean everyone calling someone a nazi is wrong.
> Just because some people calling someone a nazi are wrong doesn't mean everyone calling someone a nazi is wrong.
Sometimes they aren't just wrong, they are the loudest.
Those of the conservative persuasion love to use the loudness of some people to invalidate all condemnations of nazis, right or wrong.
I guess they've been "laying the groundwork" of a fork that claims to just want to rename things and do little else for over a month?
If you go the LLM route something like Go is probably the goto default for MOST networking/web-first apps. You get static types, and a fast compile cycle (rust is still very slow here), and IF you want more from the language you can use something like Lisette (https://lisette.run/).
Bottom line is dynamic languages are obsolete. There is really no benefits from using them outside very small throw away scripts.
Building the things I've built using Laravel with Golang would probably take 10x the development time as I have to handcraft everything Laravel already natively provides. Or I have to trust 100 packages from 100 different random devs to simulate the Laravel experience in Golang.
This is why dynamic languages, and even more so BAD ones like PHP are just useless going into 2027 and the future. Its simple, the language gives you what it gives in perf, builtin RUNTIME features, and COMPILETIME features.
From that you pick the best for whatever you are building, be it Go, Rust, Ocaml etc. The language does not matter.
Go has 90% of stuff builtin, you rarely need any dependencies. Look at Laravel ITS A HUGE CODEBASE and a high risk for any real software project. I would stay FAR away from it.
A more concrete example: Laravel has a built in rate limiter, with Go I'd either have to tell Claude to install some rate limiter package from some random ass dev or implement its own which would consume tokens/time...
Also your argument about PHP/Laravel being risky is pretty funny as everything is risky and most of the internet runs on PHP...
What a good language or a good library (and to a lesser degree also a good framework) does is to pre-compress ideas into well understandable and composable chunks.
Examples:
`printf("foo %d, %3.2f %s", ...)` abstracts/compresses a general strategy of shuffling bytes into the correct ascii/utf-8... format. An LLM could also write the raw assembly or bytecode for doing the same thing, but for one it would take much more tokens and to apply this pre-invented concept, and second without the concept already invented there would be no "information pattern" in existence that the LLM could have learned or refer to.
`list.map(...).filter(...)...` are patterns that (when applied strictly in a functional sense) go hand in hand with laws like `map` not affecting the number of elements, and filter producing no new elements etc... These are also patterns that are already invented and depending on the language these restrictions are checked. Just reading `map` somewhere can tell you (and the LLM) a lot, and writing `map` instead of while, for or jmp will capture and express much more information. LLMs would not have been able to learn these concepts if they did not already exist. And even if such a general pattern would be discovered by an LLM somewhere inside its learnt parameters, it would not haven given this pattern a name that it could/would tell you. And if you do not know the name for such a concept how have a much harder time prompting the LLM.
Expressing computations in a well understood algebra allows for symbolic manipulation and simplification. like `5 + 3 == 3 * 5 == (1+1+1) * 5 == (5+5+5)...`. But algebraic manipulation requires a symbolic language with precise rules to describe what manipulation is allowed. In AI-speak you could say the language itself is a harness or a sandbox to guide and restrict whats possible. Doing advanced math proofs is only possible for LLMs because languages like LEAN provide a strict guideline to build upon.
In short, two extremes: If LEAN is so great at proofing correctness and LLMs are so good at LEAN, why is not from today on everything (windows, linux, basecamp, hey, gcc, rustc, blender...) translated into LEAN? Why bother with rust at all? On the other hand if languages do not matter anyway and LLMs are able to recognize all the pattern on their own, why not let the LLM output and iterate on the binary bytecode to generate a self contained binary directly?
There fast JITS like YJIT, ZJIT, JRuby and TruffleRuby.
We also have static typing with RBS and an AOT compiler in Spinel and we have embeddable Crystal.
The speed of TruflleRuby or Spinal with RBS isn't that far behind Go.
Here's a Ruby advantage for you, Ruby even with static typing needs fewer tokens from your context window to represent the same solution as verbose Go.
There's lots of positive things that DHH could have spoken of but didn't.
BASIC and Lisp were invented with machine code generation as part of the REPL workflow, interpreters have always been the exception.
In BASIC's case for a brief moment interpreters were favoured only due to 8 bit home computer's hardware limitations.
If we are going the way of 5 GL (as LLMs being the 4GL revenge), natural language is quite dynamic to start with.
Citation needed? I love hating PHP, but of the reasons I would chose something other than PHP, speed and resource consumption is pretty far down the list?
PS. I fully aware of hacks around this like reactphp and the other related async things, but those are all just heavy dependencies and for most sane devs non starters.
I must admit I haven't run the numbers, but if this can be trusted, sync PHP isn't far off from golang - while async does rather well?
I probably would only reach for PHP if I needed to run on shared hosting (or rather, my customers did) - in which case few other technologies would compete, obviously.
https://phpbenchlab.com/php-vs-nodejs-vs-go-vs-python-io-ben...
> PHP 8.5 vs Node.js vs Go vs Python: I/O Performance Under Real Database Load (2026)
Thought it could warrant some discussion - maybe someone will spot obvious errors?
https://news.ycombinator.com/item?id=49845870
PS: golang is much faster at cpu - in this case one might argue a fairer comparison would use a compiled extension on the php side IMNHO - as that seems a likely path if a real project was cpu bound on a few small functions.
https://phpbenchlab.com/php-8-5-vs-nodejs-vs-go-vs-python-cp...
Before you go on that apologist route, no, im not installing any random shit just to do simple stuff like this..
>That’s what bothers me most. I’m skeptical of his AI claims, but that’s not the real issue here.
>The problem is that he stood up at Rails World and told everyone that he was moving his product off Rails and the best thing he could come up with to say to people still using Rails was that we’re “the best of the best.” Thanks, I guess.
>Maybe Rails is done, in the way the Mosscap project claims. Maybe it’s time to focus on stability and maintenance. If that’s the plan, someone needs to say it. If it isn’t, then let’s hear about where we’re headed. DHH did neither.
Rails is very insular tech.
A lot of people bet their entire careers on Rails. I've worked on Rails shops, and the majority of developers have not touched another language in years. There are people who never shipped anything in anything but Rails, and haven't done anything in other language since college, or ever if they did a bootcamp.
I have even interviewed a significant number of people doing Rails for ten years who did not know it was possible to launch a Ruby application with `ruby script.rb`.
Not to mention that with the emergence of frontend frameworks, most Rails developers were doing API-only stuff, and barely interacted with the frontend.
I recently left a company that was moving to from Rails to Go (might have been partially my fault), and there were was a bit of a mutiny where several teams have refused to change languages.
DHH is pretty much saying AI is gonna eat this people alive.
A carpenter who only knows how to use a hammer isn't a very good carpenter.
I've seen this one a few times lately. People should stop building UIs, nobody wants to interact with a UI. Everyone's app should just be an API that you can use with a chatbot. Except for my app — my app is a handcrafted miracle of artisanal UX and its UI will change the way you see the world.
It's exactly the old argument, just now with LLMs in the place of shell pipelines: in terms of functionality and value to users, software ought to be malleable and composable. We've known it since the eighties. But the model of selling a piece of software as a product as if it were a pair of shoes is incompatible with that. You need a big monolithic application to justify users paying a bunch of money for it, and you need it to have a fancy interface that makes an impression. And the whole software industry is built on top of that model. Where monolithic software is completely unfit for a purpose, like when it needs to be a component of a larger system, we rely on (mostly unpaid) OSS.
Except now LLMs let you, with very little technical know-how, plaster a ‘programmable’ interface on top of unstructured data/interface meant for humans, and because that's what we actually want, of course everybody does that. So the end result is a wildly expensive pipeline from API to UI and back to API again. I wonder how long the legacy ‘human-oriented’ layer in the middle, and the industry that's been built on top of it, will last.
(Separately, chatbots are not great as a UI for most things, and the problem of building the universal UI still also stands. But it turns out for a lot of things people would rather have a bad universal UI than a good special-purpose UI for each task.)
Same happened when the first smartphones came out, and everything was about "mobile first". Everyone will use their mobile phones for everything, desktop is dead, every app should be primarily designed for smartphones, everything comes after. Turned out smartphones just another interface that are good for some things, and not good for some other. Same for the "cloud native" movement.
I see this sentiment a lot, but UI has a greater purpose than just serving the customer needs, it also be used to shape them.
Imagine if instead of going to the grocery store, you called a number and told them what you needed. Sometimes you don't know everything you need. Sometimes you end up discovering something new and buying it even if you didn't plan on it.
I don't think that is what everyone wants, or at the very least its not what I want. My ideal software has a well designed and thought through user interface for the primary interactions, allowing me to think about the goal I'm trying to achieve rather than how I'm manipulating the underlying data model.
Additionally to that please also provide access to the underlying data. Ideally in the form of a locally accessible API but I'll accept a remote one if necessary, provide a CLI on top of that as well if you like.
Yes, this is the crux of the whole discussion. The paradigm is called "Intent-based UX".
A question becomes, how do you evolve a chat experience to task specific actions?
I’m building an app to explore scripture. Chat is an amazing starting point. But it’s terrible once you get into reading the actual scripture.
I think we will see more of this in the future. Here is how I’ve envisioned evolving an experience out of chat. Curious if others have their own ideas.
https://trysojourn.app
https://trysojourn.app/writings/explore-the-bible-like-wikip...
most of the time, a bad (or non-existent) ui is responsible for even a need of a chatbot; its lazy (and i say this a someone who was forced to implement a chatbot!) from a product design perspective.
that being said, could some complex apps benefit from adding both a command-line style interface to 'pop open the hood' so-to-speak for advanced users and provide a chat interface for beginners as well? yea why not?
If the UI is completely local and the chat is not, then I prefer UI.
Even though most of my projects have a UI, I build a CLI/API version so that the LLM can interact with it directly. I have been using this "CLI driven development" approach for more than a year now and have had fantastic results. The CLI arguments make it easy for LLM to interact with software it wrote.
I usually ask LLM to build a lib, then expose as a CLI and a RESTful API.
For technically competent users, sure. but for everyone else the UI should just follow the principal of least surprise.
Words are a great UI. They can be easily converted into audio and haptics. We already have many systems in place that do exactly this with words.
Sure, pretty graphics are nice, but their sole intent should be to convey information. A User Interface that does not allow a person to easily have information conveyed to them is a bad interface.
The modern AI world isn’t perfect, but for a large portion of people who have accessibility needs, it’s absolutely a positive impact on their life in a way that no single technology has been until now.
A chatbot using an LLM of course not, it suffers from hallucinations, it may do what you want but there is a change it won't and you have to fight it to get the desired result.
Chatbots are far WORSE than traditional UI for everything. If some product has a chatbot functions it's the first thing I disable, if it's not possible to disable it, I avoid the product.
And GUI applications are typically preferred, at least for the normal people and not us nerds, to CLI applications, since you know people like moving a mouse and clicking on buttons (or tapping them on a touchscreen) that learning commands: a chatbot doesn't make the CLI experience less awful for the average user, and for the nerd user, he prefers to use the CLI directly (replace asking the chatbot with man or --help and you don't need to emit tons of CO2 and transmit your personal data to a datacenter on the other side of the world to do stuff you did with MS-DOS)
The chatbot we added to our B2B product is by far the most popular addition we've made this year. Our users are not tech-savvy, they use a lot of apps everyday and don't want to have to learn and keep up with just another UI. So they like being able to type their wants and needs in plain language (or speak it into their phone, if they are in the field) and get a plain language response back with embedded images and charts.
YMMV of course.
*a small percent of apps behave like this
> it may do what you want but there is a change it won't and you have to fight it to get the desired result
The vast majority of all software made in the last ten years falls into this category. This includes the goddamn operating system itself.
I don't think you're making the argument you think you're making.
This is a very software-engineery point of view and totally false for the ordinary user. Heck, it is even false for me as a software engineer.
> since you know people like moving a mouse and clicking on buttons
No, they like well-designed user interfaces, and the UI design of a typical CLI is abysmal.
The nice thing about a CLI is that even if you don't like the interface you're given, it's trivial to put an interface you do like in front of it. Much harder to do that with a point and click interface.
Never because a lot of software is written for the human to use.
The last thing people want is interacting with a chatbot for anything that doesn't require a chatbot.
> in terms of functionality and value to users, software ought to be malleable and composable.
No, it shouldn't. The last thing people want is for software to change from under them, or be replaced with the bullshit that is a chatbot.
> plaster a ‘programmable’ interface on top of unstructured data/interface meant for humans
Ah yes. I can imagine everyone "plastering programmable interfaces" on top of daily stuff they want to do. Like buying a ticket to a museum. Ordering Doorsash. Sending a meme to a friend. Renting a car...
It’s founder has converted to AI driven Rust.
Convince me otherwise.
I forgot how many times Rails has died, maybe it is a cat & this is perhaps the 7th/8th time?
And it is quite telling that he prefers to kill it off like this rather than handing the reigns over to someone else.
A technical note - the big difference is that a design with a number of fat clients don’t need server side rendered html - that lowers the load on the server regardless of the programming language.
You can probably write quite light json apis in Ruby and the performance of them will be dominated by network and db usage anyways compared to a similar implementation done in a compiled language.
https://github.com/rails/rails/graphs/contributors?from=6%2F...
Zero commits are from DHH. It seems he already handed reigns over to other people.
All this does is justify the people that have been trying to move on from DHH for years. If his politics didn't do it, or his bullying, maybe the fact that he doesn't even use Rails himself will pull the wool from their eyes.
Rails itself will continue. I see no reason to stop using it.
"Some of you will loose your jobs. I know, I know. Gutting. Gutting. On a more positive note, I'm getting a promotion. So every cloud. Oh, you're still think about the bad stuff aren't you?"
You have to laugh about it because he's kind of making himself irrelevant too. We listened to him because of Rails not Hey or Basecamp. They were just application of Rails as a technology.
If he no longer has a vision for Rails' niche what do we need him for? What's the pitch?
He might as well just be a Barry Gibb impersonator droning on and on about politics. :P
Not the flex you think it is, Dave!
I was also waiting for some cool talk of some change, as I loved the simplificiation that Rails has done last year, but I also understand his point of view: he could either speed up the development of rails with AI (what Bun has done), or just say that it's mature and it doesn't matter anymore and it's better to not ruin a mature system.
Anyway, the only logical conclusion clearly is that most Rails developers are over 40.
We should be celebrating the fact that we can now port almost anything with far less effort, or modernize an existing stack to meet today's performance expectations, requirements, and engineering standards.
When people say software is "expired", "obsolete", "legacy", "limited shelf life", etc ... they're not talking about whether somebody somewhere in the world has the ability or idiosyncratic desire to continue running that old software.
Instead, it means the software's ability to be practical and usable in relation to the rest of the current computing ecosystem. E.g. In this perspective, Win95 MSPAINT is "expired/obsolete" because it can't open .PNG and .JPEG files. In today's world, .PNG/.JPEG files are much more common than the .BMP files that MSPAINT 95 can open.
I still have an old 16-bit Microsoft C/C++ v 7.0 compiler from 1992. Did it expire?!? Well, not literally. There's no ticking time bomb in it that checks the system clock and refuses to run. Instead, the issue is that it doesn't have the newer C99/C++98/C++11 features and I can't use it to compile today's ffmpeg source code. That's what people mean by "expired/obsolete".
- Rust: Axum, Actix Web
- Go: net/http + Chi, Echo
- C#: ASP.NET Core
- Java/Kotlin: Spring Boot 4, Quarkus
- Elixir: Phoenix
- TypeScript: Fastify, NestJS
- Python: FastAPI, Django
By way of example, "react doesn't have a router" hasn't stopped it from becoming the dominant frontend framework.
Rails niche was fast setup/low starting out costs and relatively constrained/medium maintenance costs. To get this you traded performance and type system. The latter usually resulted in increased maintenance costs as test suites ballooned to compensate.
These days fast setup is simply a product of AI, every ecosystem now offers fast setup. Maintenance costs are now about how token efficient it is to find and fix problems. Test suites are going to be huge everywhere now but there is some chance languages that require less to accomplish more will win on token efficiency and be favored.
Humans aren't the dominant factor in programming language design or selection anymore, that is a fact at this point it just hasn't sunk in for everyone yet.
We are only ~6mo in to agents being good enough to write code. A year from now our profession will be entirely changed. Agents will get better (how much? don't know) but importantly they will definitely get cheaper and access will be broader. Which is really the point DHH was trying to make.
Access and economics are finally going to do what no-code failed to do, which is democratise software. Maybe not to the point that everyone writes code or even that shit programmers are good, but it will enable shit programmers to write Rust which was literally impossible 6mo ago and they will have better programs as a result.
Which is the other thing he touched on. Good programmers are going to excel here and great programmers are going to dominate. I'm already seeing the 10x programmers hit 100x and 1000x with more access doesn't seem out of sight. It's also restoring the will to create in a lot of people that lost the passion for the mechanical part of programming, unlocking the experience and skill of these people that were otherwise considering cashing in the bag is huge.
So yes. Rails is done but what is coming next is way more exciting. I'm with DHH here, be glad it happened but get moving on where things are going to be instead of clinging to the past.
If your average per request in the application layer is say 20ms. Your p50 is probably 10-15ms and your p99 is probably something like 80ms. p99.9 is probably a good bit higher than that.
If your site is highly interactive , everyone using it is going to regularly run into actions that take long enough that they notice them and it won’t feel snappy.
Let’s say you went all out and wrote the application layer in C with purely static allocation. You could easily see a p50 around 2ms and a p99 of 3-5ms. (This is obviously dependent on the app).
Even with an average time spent waiting in the database of 80ms, you’ve already made a noticeable difference.
That’s not even mentioning the biggest impact, which is that you can likely get by with far fewer application servers.
Now does it make even more sense to optimize your queries? Yes. Definitely. But with faster application stack you can start moving more things into the application layer and out of the database which is generally harder to scale.
And if you have or can build endpoints that don’t hit your database at all, those will actually be 10x faster than before every time.
Also eventually you'll also have to trust it to write the deployment code or even run the deployment itself, otherwise SRE is going to be the bottleneck. And only then should I feel anxiety about the rest of my career (that, or my employer decide LLM are good enough to get rid of me, even if they are imperfect).
The actual code and architecture is where it still lacking IMHO. Especially in rails... Like it will just build the least scalable features if you let it do it's thing. Ten queries for what could be one. No separation of concerns. Huge files, lots of duplicated code and then tens of thousands of units tests that just grow like a fatberg.
If your app does anything serious, if you have serious traffic... you are going to need to review each session finely (and your DB schema with each deploy). It could be that this is maybe an indictment of rails more than LLMs, I guess maybe time will tell.
I guess it all depends on context, where I work ops stuff is clearly the bottleneck for a variety of reasons (technical debt that we are constantly working around, secret management for compliance reasons, etc). We self-host everything from bare metal. Some people would need to rethink the infra from the bottom up before it is "LLM ready".
That doesn't mean my job is not threatened mid/long term, in fact, thanks to LLM it is possible to rebuild that in a reasonnable amount of time I think. It's actually one of my side projects to offer this as a service. But if that doesn't work maybe I should have a plan C.
If you don't look at your code and need to debug a production issue, do you just panic chat with your agent to solve the problem?
My experience is that the more structure and constraints you can place on what the LLM/Agents actually do, the better they perform. If you just let them run wild a la "make me an app that will make a million dollars MRR, no mistakes", you get a clusterfuck. And it gets more clusterfucky the longer it goes on.
This is lacking a lot of nuance. There are many types of code. There are many situations where I'm analysing something one-off and if I get 33% success ratio, but can easily verify the result, I'm happy - still saved me time and money. They're are situations where I'm generating graphs from some dataset and I don't have to trust anything - I know what the result should look like, I just need the agent to drive matplotlib. There are low stakes dashboards which I'm happy to generate and develop entirely via agents - they'll embed the updated screenshots in PRs that I can yolo-merge - worst case is that someone complains about something not working next time they visit. Then there's lots of experimenting which was never stopped to hit production anyway.
Finally after all of that you get code that's actually part of deployable features. Of course the trust is nowhere near 100%, but if you have a healthy testing process (e2e, validating different browsers, or whatever is appropriate for your environment), then what's your trust in human developer+review? Because mine is nowhere near 100% either.
In practice there are places where I extremely don't care about the code and never wanted it anyway, places where I'll read the code to check the design or just in case, and places which agents are not allowed to touch (medical billing rules for example).
My version of "code review" is "test failure investigation" and I have a hard rule in my repos that agents never modify existing tests while they're implementing features. This means that when I run the tests after they do a bunch of stuff, I see all the tests break. Mostly they're stale assertions and we patch them up. Sometimes they're regressions and we patch those up, and sometimes I notice something dumb and dive deep into a facet of the architecture that can be improved, spend some time exploring it then get the agent to implement.
I think it's a better approach than trying to read everything and catch bugs or improve quality because you wind up focusing the things that actually matter in the real world rather than the things you think might matter.
This is how I've always approached working with offshore devs too. Focus on testing for quality control, not "code quality". After all, you're going to look at the code you wrote 5 years ago and think it's shit anyway right? So all your code is shit.
Regarding "lack of understanding", here's a recent anecdote: I had a bug in a production (but relatively new) system. The customer was texting me saying that they couldn't scan a QR code because it kept "skipping and glitching". They sent me a short video. I described the problem to the agent and it figured out WAY faster than I would have been able to that the customer's clock was set incorrectly. They turned on network time and bingo bango, the thing worked straight away.
I don't thing "comprehension debt" matters at all, because if you want to know something about the code you ask the agent. I can't remember how anything works after 12 months anyway, so I would frequently have to spend ages grepping my own code when a customer came back and asked me to change something in a system we hadn't touched since last year. Asking an agent the same thing takes minutes and is way more accurate (and fun!)
That only describes a happy path though -- I also had many instances where there's an issue and just describing it to an agent immediately identifies a fix and it all goes faster compared to me having to "load up" the flow of codebase into my brain first. But I also still have instances where it thinks it identifies an issue correctly, spits a fix which doesn't work and looks wrong. You point out that it does not make sense because of X, it agrees and spits out a new fix, which is also wrong and you start out on these back and forth wild goose chases, at this point I usually give up and do it the old fashioned way by understanding what is actually happening. If it is within an agent loop, there may be no back-and-forth to waste your time but then you pay with wasted tokens when it will eventually gives up or you stop it.
>I don't thing "comprehension debt" matters at all, because if you want to know something about the code you ask the agent. I can't remember how anything works after 12 months anyway, so I would frequently have to spend ages grepping my own code when a customer came back and asked me to change something in a system we hadn't touched since last year. Asking an agent the same thing takes minutes and is way more accurate (and fun!)
I would question the last part. In my mind the more you let go of control over your codebase the more likely that it will drift way from a place where it is still comprehensible to you, and also your comprehension skills atrophy, and with that, your ability to ask good questions and to prod your agent in a correct directions weakens, leading to more wild goose chases and burned tokens. This is all keeping in mind that for throw away or small applications, maintainability is not that of important of a value so this doesn't affect all codebases.
I don't know any more about KMP, Kotlin, Compose, Bash or React than I did a year ago. I'm not that familiar with any of those technologies (well, I am pretty familiar with bash but not to the level at which it's coded by agents), and I have never run into a situation where I felt like it would be better or faster for me to learn them and go hunting through the code to find some problem or other.
Maybe I'm heading towards a cliff somewhere in the future, but based on my experience of building software for 20+ years I'm not feeling anything but optimism so far.
:blinks: The architecture of your service relied on customer clocks being correct? That is, you built a distributed service without a clock synchronization primitive that relied on the clocks being sychronized?
I also think that expecting that a computer connected to the internet in 2026 has the correct time isn’t too much of a long shot and things like 2fa QR codes rely on correct timing anyway.
Most code just has to be good enough.
Coding part of the job (as in „typing with my bare hands“) is gone. Now I get to spend more time making product decisions, capturing constraints and executable specs. Resulting code is boring, consistent and gets the job done.
But still, let's face reality. Rails with Ruby and Django with python's biggest advantage was readability and accessibility. For many, it is just much nicer reading Ruby code than Rust code. But LLMs have completely changed the equation, and development with a statically typed language plays much better into the agentic feedback loop. Add the memory safety guarantees of the rust compiler and the incredible runtime speed even compared to the Java Stack you will see many benefits.
I am biased since I love Rust, but I think backend technologies are going to move more towards statically typed memory safe languages.
Also if you use an agent to write most of your code, with python it gives me a lot of stomach pain just thinking about error potentials and hallucinations, with Rust, that fades to only security implications
The only thing that matters in AI is to examine the flow of money. DHH is a Shopify board member and surely got Shopify stock.
Additionally, his Omarchy is sponsored by the following AI boosters (https://omarchy.org/patrons/):
His Fridman promotion was sponsored by Shopify:https://lexfridman.com/sponsors/ep501-sb
His future is tied to the AI narrative and he sells out stuff he no longer needs like RoR. Anything he says is an advertisement.
...it's true, based on his own words.
Not because I keep up with DHH (at all), but just because yours is a recognizable genre of comment from people who lie on the internet.
Strong conventions are my selling point to still choose rails for green-field projects in 2026. But I'm talking about LoB or CRUD-heavy apps. I wouldn't have chosen rails for an SMTP server. The HEY architecture was based on the productivity/performance trade-off. That trade-off is no longer worth it, since productivity is through the roof, let's prioritize performance and first class UX (the one you can only achieve in native apps).
In his shoes, I would have made the same decisions before and now.
Regarding the future of Rails. I feel this applies to a lot of other frameworks. The idea of frameworks was always to give devs a set of tools to solve problems faster and better. Tools that resonate with you. That you can find "synergy" with. Now you're not writing any of the code; you're barely even looking at it. So, what's the point of frameworks then? I don't know. Popular ecosystems already have out of the box solutions for almost everything. Rails, Django, Laravel, .NET, JVM and many more are mature enough. You could turn them all to maintenance mode and everything would be just fine. What future lies ahead? No idea.
1. This is why BDFL culture in open source is bad. Because if the BDFL decides to go all in on some completely bizarre mess, all of a sudden there’s massive fork politics.
2. Hey is the marquee product now?? Does anyone actually use Hey? I tried it for a year, and basically found I was paying for the privilege of having a slower, buggier, less feature-rich gmail that can’t even dent the have-a-paid-email-that-doesn’t-exploit-you market (Fastmail and Proton exist, yo).
I'm now doubly-glad since it seems like, indeed, the bdfl has lost both the plot and the B. The fact that Omarchy is also some weird corporate-sponsored AI-pilled linux reskin is further concerning.
In retrospect, his jamming of things like thruster, hotwire, etc etc into the framework and then now basically abandoning them has me grateful I didn't adopt them, even though I thought they seemed pretty well-intended at the time.
In the talk he said all Hey's traffic can be served on a Raspberry Pi. I think that pretty much answers your question.
Why are high level managed languages still being used?
For that matter, why aren’t LLMs generating everything in wasm or native assembly?
'Overrated Ruby programmer finally tries fast languages in domains they are clearly better suited to than Ruby, now that he does not need to write the code himself. He unsuprisingly draws the wrong conclusions and also inevitably mentions his Linux for techbros project, since this is his conference and his keynote.'
DHH was so fixated on this that he plastered a Ruby interface over everything even when it didn't make sense. For the longest time, foreign keys were enforced by Rails not the DB, and here's DHH thoughts:
I consider stored procedures and constraints vile and reckless destroyers of coherence. No, Mr. Database, you can not have my business logic. Your procedural ambitions will bear no fruit and you'll have to pry that logic from my dead, cold object-oriented hands.
Zed Shaw's infamous "Rails is a Ghetto" (Wayback machine required) also captured this attitude towards engineered software. Basecamp for a long time had a memory leak, and rather than get to the bottom of things DHH was fine with restarting processes every four minutes.
Rails and the community evolved past this and matured into robust software. That said, DHH has come full circle: now that he can type words and get Rust, he can throw everything else out the window again.
We as an industry have been abusing HTTP and HTML for 2+ decades now by building web apps that were traditionally installed client/server applications or standalone client applications. There was a time in the industry that managing all the OS versions, patches, etc. was extremely labor intensive, hence the move to the web. If the cost of building native apps is near zero, in comparison to before AI, then how many web applications are better suited to client/server apps?
Take everyone's favorite app (sarcasm) - ticket tracking for IT or software work. Back in the day (late 90's) this was an installed app, the UI was extremely responsive and restrictive. People building native apps in Visual Basic didn't have to deal with HTML, CSS, and all the trade-offs of a markup language for an application, they had modules/components they could build for UIs. There wasn't weird DOM hierarchies, a data transform to text, send it over HTTP with auth, protect the web server that is open to anyone on the planet to hack, transform from text to data types, save to a database. The native app had a database driver in it or nearby and you did SQL from the app to your database server.
We can containerize application runtimes now. Look at what 37signals did with ONCE as an example, yes they are Rails apps but they could be anything that reduces IT install time compared to the '90s.
My takeaway from that keynote (watched the whole thing) is we need to re-think everything in software: process, tech stacks, architecture, etc. as the industry moves forward. AI has advanced a lot in what it can do in the last 10 months, it might plateau at some point and become another usable tool, but what it opens up is the ability to do things differently because the cost of creating (and throwing away crap output and re-creating) is very cheap.
The web as an application delivery model is very complicated compared to building small native apps. If your average Joe or Jane is going to be creating apps, I would think the thing to reach for is not web.
Not to mention, those VB client/server apps were not as popular with users as HN likes to reminisce. And modern IT departments have often completely banished that stuff.
There are probably others that don't need HTML user interfaces. I wasn't suggesting to use VB but there has to be modern UI native/client app frameworks or libraries. The problem IT departments had (speaking from personal experience) was the variation of client machines, DLL "hell" (shared library version conflicts) and patching. If the app is delivered and run as a container on the client's machine, a lot of those issues go away.
Rails World 2026 Opening Keynote [video]
https://news.ycombinator.com/item?id=49817680