Ask HN: Would you still choose Ruby on Rails for a startup in 2025?
It seems that Ruby and Ruby on Rails have some sort of renaissance now. I only know a bit of Ruby, but I hear it a lot that RoR is the best thing for prototyping and startups, even better than Django.
Personally, I write Go professionally and I love the simplicity and the absence of many dependencies. That said, Active Record and Active Job seem to do exactly what I write manually over and over again in Go due to having no frameworks.
Is Rails still that good?
181 comments
[ 3.0 ms ] story [ 260 ms ] threadAlso it is true that Rails and Ruby are having a renaissance and the technical direction for both seems to me a good bet for the future.
I have always been very protective of Go and its minimalism, no huge frameworks like Django/RoR/Laravel (well, there are a few, but they aren't that popular or mainstream since the Go community favors just using the standard library).
However, the more I read about startups and prototyping, the more I think that spending time on boilerplate, writing custom migration scripts, and implementing database-backed job queues every single time is not what you want to spend your time on when you want to iterate as quickly as possible.
Also, another minor factor in favor of Ruby is the talks on destroyallsoftware such as "Functional core, imperative shell" and "Boundaries" where the author uses and seems to really like the language :)
On top of that, learning a new language/framework is always fun so I have already starting playing around with the official RoR guide.
Used RoR back in the day and it's a great way to get stuff out the door. I coded like I was on fire. I've never had that sensation since then doing JS/TS/React blah-blah.
If you're doing a startup, your goal (I presume) is to validate your assumptions and get customers.
If it takes off you could always rewrite the backend in Go (which will buy you lots of time) and think of the frontend at a later date.
Remember 95% (odd) startups fail, so think about failing as fast as possible.
It has good documentation.
The code base is stable.
There are mature libraries.
It is practical to learn Rails.
Sure there are very good reasons not to choose Rails, but the current year is not one of them.
And the work of building any new business...let alone a startup is approximately the same no matter which technologies you choose (modulo your expertise).
Time spent researching web frameworks postpones building the potentially money printing mechanism. When your research is done, you still won't have built anything.
If you are lucky enough to grow, you will be constantly rebuilding your systems. Unless you are Telegram. They used Erlang. It has the same features as Rails except for a large pool of practitioners. Good luck.
I mean, the Go way of as few dependencies as possible and no opinionated frameworks is cool, but getting so much done for you is such a nice thing when you want to build fast. Also, switching to a purely REST API with just render json: <blah> is unbelievably fast. Writing the same in Go would include a lot of boilerplate.
Anyway, thanks for your response. I am really happy for Ruby, RoR, and the community.
the Go way of as few dependencies as possible and no opinionated frameworks
That is highly opinionated and the opinion is based on Google’s business model, resources, operational strategies and engineering wherewithal. No startup has anything like any of them.
Yes, it would be very hard for LLM to write this boilerplate.
It’s so long it would not fit in its limited context brain ;)
The tech stack isn’t likely to be the deciding factor for a startup being successful these days. Pick whatever you or the team works best with.
If I was at a startup trying to solve a business problem, the last thing I'd want to do is bruise my knuckles fighting with my tools. Rails provides an opinionated way to structure your codebase as well as many existing modules that just work. It's not exclusive in this space, but it's a safe bet. You can get any dev that's familiar with rails to ramp up pretty quick. If you rolled a custom web framework in a dialect of javascript you may have a more challenging time.
0: https://boringtechnology.club
Many opinionated frameworks are also less reliable because of the layers of abstraction, so I'd also associate opinionated framework = sexy and temporary.
I've never actually used Rails in production, just did some tutorial, so I'm probably wrong about this.
But the good news is that you can just ignore them and enjoy the framework, like I do.
Why? What is wrong with DHH?
It's also possible to appreciate the stuff he's done for software whilst not being in love with him as a person.
I’ve had a negative opinion of him for a good five years or so, but at least right now it’s easy to go read those and form your own strong opinion one way or another.
> Many opinionated frameworks are also less reliable because of the layers of abstraction, so I'd also associate opinionated framework = sexy and temporary.
That's one of the persistent knocks against rails -- the layers of abstraction. I think that's fair, but it's a tradeoff. You either go along with it because it's advantageous or don't. Once you get familiar with the concepts and the theory of it the framework does what you expect, not a lot of surprises.
I'll push back on "temporary" though. It's been around for 20 years. It's old, so by definition it's not sexy.
Personally, I've built a number of apps in Rails that are still in production so it's a solid choice.
I think of RoR, Laravel, Next.js, and Django etc. like I'm crowdsourcing my apps architecture so I can just worry about building out my business logic.
Even if you don't choose a framework at some point you end up building your own framework and introducing new opinions anyway, what I often see in these homegrown frameworks are.
1. Somewhat conflicting opinions expressed across different layers of abstraction that you build into your app over time.
2. In not having an opinion you try to satisfy many ways of solving problems introducing more edge case problems and serious over engineering.
The other approach is to build it on a platform that shifts with the changes, i.e. hybrid and web. But if you crack open the source of Cordova, you find all kinds of tangled, unmaintained, bad practice wiring and rewiring. I spent a few months trying to hack Cordova plugins and we decided to just scrap the entire code and build native; fully rewriting the app into a custom framework took 3 months.
However, it sounds like tools like Rails are built on a very sturdy platform that doesn't introduce breaking changes every year? That's an angle I haven't considered.
The Jason Fried and David Hansson Musk/Fascist vibes are real and are a problem. Most of the people in the Ruby community recognize that problem and are taking steps to mitigate that issue. Most of the core Rails committers don't work for 37 signals, and it's not really a thing made just by them.
Definitely use Rails to start a new project. The real hero here is Ruby and the Ruby ecosystem. It's incredibly stable and mature, But also getting faster every year. About 20 years ago Ruby web frameworks agreed on an ad hoc server interface api, Rack, which is one of the secrets that has made Ruby incredibly stable.
The package system, Ruby Gems, is really great. You can find a Gem for just about anything you could ever need or want. With mountains of Open Source projects and code to read to pick up patterns, or to see prior art to solve a unique problem you're encountering.
Anyways, it's a really solid choice.
What do you mean by this? Where have Jason Fried or David Hansson supported fascism? Your account is ten years old and this is the first comment you've ever made.
I mean that they give off Fascist vibes, and that it's a problem. Adoration for and support of fascist people and regimes are implicit support of fascism. Not explicit.
Go read their blogs, I'm sure you'll find lots of examples.
But you've just repeated the accusation and said that you think it's a problem. You haven't provided proof of any actual fascism.
https://world.hey.com/dhh/mega-a0f62cd4 "so pumped up about Trump"
https://world.hey.com/dhh/failed-integration-and-the-fall-of... "multiculturalism is bad"
https://world.hey.com/dhh/the-social-media-censorship-era-is... "hooray for lack of fact checking"
(you may agree with him or not, and he makes better argument than Musk, but it's the same vibe)
Only way to avoid being called either a fascist or woke (and I know some who are accused of both!) nowadays is to never say anything.
It doesn't mean you're not wrong. Is this a personal vendetta?
>I mean that they give off Fascist vibes, and that it's a problem. Adoration for and support of fascist people and regimes are implicit support of fascism.
Where? Link examples where they supported Fascism. "Vibes" are meaningless, I need specific examples of these claims, else they can be tossed outright.
>Go read their blogs, I'm sure you'll find lots of examples.
Didn't find anything about supporting Fascism.
To reorient the discussion around what the original poster talked about, that he gives off Elon Musk Vibes. And that it's a problem. Well it IS a problem. A problem openly, and vigorously discussed in the Ruby community.
Many people have left the Ruby community because of his behavior, and many more have chosen never to come into the community because of it. Because of the perceived strong association between him and the Ruby and Rails community at large.
Anyways, as per my original point, that despite the Fascist vibes from that guy, Ruby and Rails are still really great choices.
Oh, so you don't have any proof, got it. Your claims have been dismissed, David is not fascist.
>Kinda lazy that you're all not out there looking for the proof yourself.
There is no proof.
>To reorient the discussion around what the original poster talked about, that he gives off Elon Musk Vibes. And that it's a problem. Well it IS a problem.
No proof of this either, so your claim is dismissed outright.
>A problem openly, and vigorously discussed in the Ruby community.
Any proof of this? Who claims it's a problem?
>Many people have left the Ruby community because of his behavior
Looks like a loud minority of leftist activists may have left. That explains how Ruby has only gotten better since.
>many more have chosen never to come into the community because of it.
Many more have chose to join the community now that the activists are gone.
>Anyways, as per my original point, that despite the Fascist vibes from that guy
There are no Fascist vibes as shown above.
Ironically, this attitude is quite Trumpian. I hope you're just pretending to cover the laziness of your argument.
Why? What "Musk vibes" have they given off?
My political compass tends to be BRICS vs G7, religious vs secular. If you're saying they're both G7-secular, I guess that makes sense too.
edit: Also I was not even aware of Musk and the fascist thing before posting the comment, and I can see how it may have been interpreted differently now, lol.
I'm not saying Fried or Musk are wrong, and they both have brilliant insights at times. If Musk was crazy and wrong all the time, he wouldn't be a brand name.
But both of them also appeal to susceptible people who seem to think that a few good opinions make them good all the time. Basecamp isn't even a good tool, it's a pretty average one, yet prettier than Jira. But it's down this funnel of people who will buy whatever Fried and DHH sell them.
And what I'm getting at is whether Rails is one of those things that is average but prettier than Node?
Except he didn't do that, what he implemented was not making personal politics a part of Basecamp's workplace culture, which is a much more moderate thing than what you're accusing him of here.
You might not be aware of this, but it's possible to have a personal opinion about something and not bring societal and political discussions to the company account or forum. Here's the text of the new policy:
https://world.hey.com/jason/changes-at-basecamp-7f32afc5
"People can take the conversations with willing co-workers to Signal, Whatsapp, or even a personal Basecamp account, but it can't happen where the work happens anymore."
Again, this is not at all the same thing as "no personal opinions [allowed] at Basecamp."
https://news.ycombinator.com/item?id=42593223
Not affiliated with either of those things, but what does this even mean? Basecamp is a business. Jason Fried is a businessman. Basecamp is a product developed by 37 Signals, a company Fried co-founded.
How does any of that create "Musk vibes"? I'm seriously wondering what this is all about.
i know what you mean about abstraction and flexibilty, but I think Rails mostly avoids that and is actually quite flexible. But I don't use the new hotwire JS stuff, that is one area where I share your concern. It's easy to use Rails without it, with the JS of your choice.
Some of these are eyebrow raising and certainly not boring!
I long to live in your world where this is the case!
Unfortunately the migration from Sidekiq + Redis → Solid Queue has been anything but boring.
There goes your answer. Golang was made for Google to simply - onboard junior engineers quickly. It wasn't made to make products quickly.
Ironically, one of the reasons my startup died was using Elixir as if it was Rails[1].
Even aside from type safety considerations: in RoR variable bindings appear out of thin air! Imagine onboarding a new developer – not only do they need to learn the arcane language, but then they need to learn a bunch of non-hygienic macros!
I remember the lightbulb moment when I was patching Ruby's Devise authentication library to add verifiable credentials to it when I realised that a variable used there is not a 0-ary function, but actually something that is just bound in context by magic. Also, even Rails experts have to go on a hunt to understand magic[2] too!
I would personally just use typescript bridged to rust to preserve types ans sqlx for type-safe queries to the database.
Or use something like bubble.io if you want to iterate on ad hoc things until you get there!
[1]: https://memorici.de/posts/pre-mortem/ [2]: https://medium.com/launch-school/params-in-rails-where-do-th...
Do you want to learn Ruby. Then go for it. If not pick a different language. Pick one you know.
You might not even need a full backend server. Firebase or Syperbase might be enough
I also, for whatever reason, seem to encounter more companies with "stuck on old version" tech debt on RoR more than on Python or Node. I'm not sure why this is.
Where I've had problems it's been 3rd party libraries that try to force alternatives to core behaviour like ActiveModel but then break their own API a year down the line.
cough Looking at you Dry::Validation.
You just do things like sticking to POROs for business logic it's pretty smooth. I just follow the advice in the Sustainable Rails book.
https://sustainable-rails.com/
Rails 8 just gives you so much out of the box for a small start up that it would be my personal choice.
Having Hotwire for PWAs without having to have a frontend build pipeline or Hotwire Native for iOS and Android allowing you to reuse for your existing web frontend for example.
Or using Kamal for deployments to cheap commodity servers without having to setup K8s or use expensive cloud services.
Even things like ActionText for rich page content are a big win.
I mean you can replace everything later if you grow big enough to need separate mobile, devops and frontend teams but if it's only a few of you why bother when you could be delivering your MVP?
One is well served to learn Rails for many reasons, but i would not start a green field 2025 project with any framework.
I have been burned by rapid development frameworks in the past, not Rails, but anyway, by now I've been rolling my own stacks for awhile, and it was mainly a question of language ecosystems.
Have a gander at Crystal Lang, BTW, and Amber and Lucky frameworks
+ added ports and adapters (aka hexagonal architecture, there are many articles on how to do it in ror)
disclaimer: i work with ror since 2006 so i have a strong bias.
Node is fast enough, easy to develop, deploy, and scale. Anything that is slow can be ported to Go.
It is easy to find solutions to my immediate problems using LLMs.
I’m just using express and my data layer consists of neo4j and qdrant. All code is single responsibility and I use layered architecture. Easy to test and feed in to AI.
I used to work in rails, mostly to port existing code to Go or node. I found it way too messy and complicated, and our codebase was awful. I am in the minority though as I know many love rails.
Are you saying that’s because RoR was used? Doesn’t seem plausible. Messy bad code is the fault of the programmer, not the language/framework
And I’m a mainly JS dev. Node is extremely easy to f up, so is the frontend. And with all the generated code today… it’s gonna get only worse.
I've worked in multiple languages, and personally enjoy Go and Rust, but nothing, even Django, comes close to the speed I can address a business/user need by using Rails.
When running a Startup, you want to quickly be able to try new approaches, and if they suck, you just remove the code and start again, or change. Rails is unmatched that way.
It's worth saying that Rails doesn't come with any kind of library for you to abstract business domains and you should avoid callbacks (specifically after_save / after_commit can be really bad in big applications with technical debt), so look for a library for this or write pure Ruby classes.
When you’re building and iterating quickly, Rails save you from manually wiring up all the plumbing. You get enough convention to move fast, but with the flexibility to make your own decisions when necessary.