
Rails is omakase - martinbc
http://david.heinemeierhansson.com/2012/rails-is-omakase.html
======
cbs
What is this post responding to? And who is the target audience?

Reading this feels exactly like reading the passive aggressive facebook posts
of someone currently in a fight with their boy/girlfriend. We get it, Rails is
"opinionated", sorry I guess we're saying "omakase" these days. Who really
gives a fuck?

The reason DHH is getting loud complaints is because people feel that they
carry a legitimate grievance but also feel no way to voice that opinion (or
are trolls). Douchetastic talking down to them like exemplified in this post
won't help (and will encourage trolls).

People with limited knowledge and understanding of something and/or restricted
mobility in tech aren't in a place to see things the way you see them. Help
them get to that place, instead of just telling them how to see things with
metaphors that only work once you're at that place. Or just don't engage them
at all.

Edit: Huh. This DHH blog post doesn't really feel on par as a response to the
conversation in that github issue. But if it is, know that my post was written
assuming the criticism was of the type he describes, not the type that
transpired.

~~~
hosh
I'm not knee-deep in this specific issue with the binstubs, but I generally
agree about the legitimate grievances. The Merb effort and the Rails 3.0
refactor resulted from people unable to voice what they need. We seem to keep
repeating history.

Asset Pipeline is also the wrong area of innovation to focus on. Rails should
be baking in support for creating API only apps, make it easy to shed
template-driven code and write UX-agnostic backends. Mobile is driving a need
for creating API-only apps, and something like Asset Pipeline is an
evolutionary dead-end. There are more smartphone-like devices in the world
than personal computers; there are kids growing up with a smartphone as their
first computing device; people of our generation have a bias towards thinking
of UX and web-apps as desktop-first; when the tooling around API-only Rails
apps mature, then template-driven apps will start dying into irrelevance.

But, I'm done with it. I'm looking at the next wave of leading edge of
innovations for the masses, and it won't be in apps.

~~~
technoweenie
> Rails should be baking in support for creating API only apps, make it easy
> to shed template-driven code and write UX-agnostic backends. Mobile is
> driving a need for creating API-only apps, and something like Asset Pipeline
> is an evolutionary dead-end.

This has never been Rails' focus. Let Rails keep doing what it kicks ass at.
Sinatra works great for API endpoints. There's probably an opportunity for an
API-focused extension to Sinatra. Of course, Grape works too
(<https://github.com/intridea/grape>).

The nice thing is that all of these are built on Rack now. GitHub.com runs as
a Unicorn rack app that mounts over 30 Sinatra apps and a massive Rails app
together. I'm not saying this is an optimal solution, it's just where the app
is at in its current evolution. But it is very possible :)

~~~
VeejayRampay
For things like APIs, Rails has <https://github.com/rails-api/rails-api>, an
excellent project.

~~~
hosh
I've taken a look at it. It does not really use the Rails 3 architecture
(Russian Doll Pattern) to its fullest potential. I have written
<https://github.com/intermodal/intermodal> back in 2010 to demonstrate it, and
have put that code into production.

There are some people trying to revive Rails-API. I have already sent them an
email begging them to steal ideas from Intermodal.
[https://groups.google.com/forum/#!topic/rails-api-
core/LoJap...](https://groups.google.com/forum/#!topic/rails-api-
core/LoJap3IzOig)

Maybe they will, maybe they won't. I got a polite brush-off so I doubt they
really looked at it, but since I am exiting, whatever.

In writing Intermodal, I've had to muck around with some of the guts of Rails.
I've found that Rails 3.0 very much follows the principle of Russian Doll
Pattern, but Rails 3.1 onwards started moving away from it. There are baked-in
assumptions in the code for a template-driven app. This is where the Rails
leadership is focused on.

------
steveklabnik
Basically, here's the deal: this is a change that every member of Rails core
(and others with commit, like me) who is not an employee of 37 Signals
disagrees with, as well as the entire maintenance team of Bundler. Every
single one. And DHH's response is that we all 'haven't really paid much
attention to how things are run on a day-to-day basis.'

This change 'breaks every single new Rails app on Heroku that uses rbenv', in
the words of Heroku's Ruby platform lead. It is not a trivial change. This is
David going against the wishes of every other maintainer of every other piece
of software Rails works with, as well as other Rails maintainers, and then
painting their comments as 'nerd rage' and 'organizational failures.'

Ugh.

~~~
xentronium
Why is it such a big deal? It's not like you can't add a line to gitignore?

~~~
cheald
Because sane defaults matter. Defaults that get in the way of people being
productive are bad defaults.

~~~
alayne
Why does Rails do anything related to git anyway? What if I use some other
version control system?

~~~
evolve2k
I think DHH's article succinctly addresses exactly your question from his
perspective.

------
instakill
Alright, somebody has to draw the line somewhere.

Every time DHH goes off on one of his little rants and angers a lot of people
in the process it's not just those people that get affected, and not just
emotionally either. These Ruby [on Rails] dramas have a real-world impact on
the rest of us, the hundreds of thousands of us that use Rails every day to
make a living. It affects us in that it makes us all look like unprofessional
schoolground children. Rails already has a stigma of "hipster" developers that
tend to be up their own asses, and episodes like this really don't help our
image. Especially not when the global developer community is not as massive as
you'd like to believe, especially when people talk - to other developers, to
potential and existing clients that then get per-conceptions of
unprofessionalism, and to newbie developers that shy away and look into
alternative languages and frameworks because they don't want to be associated
with this wankery.

DHH's post, particularly the second paragraph, seriously comes across as if
the core "team of chefs" is doing us all a massive favour and if we want to
keep benefiting from the really beautiful thing that Rails is then we should
shut the fuck up and take what we're given. Well this isn't Pyongyang (if
we're going to play with metaphors) and DHH is not our dear leader. Yes of
course I, and all the other Rails developers and immensely grateful for the
framework's existence, but it's OSS now. There are thousands of contributors
and so many more times commits than that to the projects since it did become
OSS.

The community either needs a revolution or a fork because this downward spiral
of foul air is just going to continue spreading and affecting us all. I'm sure
if a couple of well respected individuals decided to take that route, a whole
lot of people would back them up - I know I sure as hell would.

Pawel - a Rails developer.

~~~
pretoriusB
> _Pawel - a Rails developer._

I'd like people adding those kinds of claims to also give an estimate of how
much they have contributed to the project.

I.e.

John S., Linux Kernel developer, contributed maybe 10 lines of code, or
0.0001% of the kernel source

or:

L. Torvalds, Linux Kernel developer, wrote the kernel code from scratch,
that's my name on the project, biatches

Else, this "a Rails developers" signature tells us we should give extra credit
to your opinion, but we don't know how much compared to DHH.

I don't mean it about you, Pawel, or your comment (I don't follow Rails that
much anyway the last 2-3 years), I mean it in general.

~~~
rachelbythebay
Are you sure they're all claiming the same thing? Maybe one "Rails developer"
actually works on the framework itself, while another "Rails developer" is a
developer who merely uses it to accomplish something else.

Either way, you're looking at a brag-fest as people try to one-up each other.
That can't be productive. I don't think any good would come of this.

------
fingerprinter
Just read the whole thread here and on github
([https://github.com/rails/rails/commit/61b91c4c55bcbd5a2ec85d...](https://github.com/rails/rails/commit/61b91c4c55bcbd5a2ec85d6e1c67755150653dff))

Technical: DHH is wrong, plain and simple. No amount of defending the decision
makes it right.

Community Management: DHH, while not as abrasive as Linus (another thread here
linked to a kernel thread), IMO, DHH is (much) worse than Linus. Linus is
abrasive and swears and yells. DHH is dismissive and condescending. DHH thinks
he has better opinions, more depth of experience, smarter, more insight and
generally "gets it" more than everyone around him, including the other
maintainers.

~~~
jurre
I really don't see how you could say he is wrong. It's _his_ open source
project that he's put thousands of hours into and is providing for _free_ to
everyone that wishes to use it. You might not agree with what he says or
decides on, that's completely fine. In that case you're completely free to use
a different framework. Plenty of choice out there.

~~~
minhajuddin
It's not completely _his_. Other developers have put in much more than him
alone into rails, and you need to respect them for that.

~~~
jurre
You're absolutely right. The thing is if, as he (DHH) writes in his post, if
_they_ were to make a suggestion he would take them very serious.

~~~
n09n
But they did, and he didn't.

------
demetrius
This site doesn’t tell its encoding (neither via HTTP nor via meta tags), so
my Firefox displayed the first sentence as “There are lots of ГЎ la carte
software...”.

Also, I don’t understand why the article was written, every software developer
makes their own decisions that not everyone will like — isn’t that obvious?

~~~
mylittlepony
> This site doesn’t tell its encoding

Same problem here. So much for the master chef with a decade of experience...

~~~
bdcravens
This is just his blog. He's the chef of a framework, not an avowed HTML guru.

Have you seen the design for YCombinator.com? 1998 called and it wants its
Arial font, <table> and <center> tags back. By your logic, YCombinator is
worthless for helping Web startups launch.

~~~
phillmv
If you wanted your password reset for the first couple of years, didn't you
have to email pg personally?

~~~
yeonhoyoon
haha

------
orangethirty
Aren't all frameworks like this? The designer picks what he/she thinks is the
best architecture and builds it around that idea. That's why there are a
thousand different frameworks. I think DHH is experiencing what I call "Linus
Hell." Which is the hell Torvalds has to go through every _n_ amount of time
when dealing with obtuse programmers.

~~~
Xylakant
Not necessarily. Padrino [<http://www.padrinorb.com/>] builds a rails-style
framework from components which are exchangeable. You get to pick your testing
library, the templating engine and the orm of your choice. If you don't like
the router you can swap it out. It offer more flexibility and freedom of
choice in that respect, but on the flip side doesn't achieve the same level of
deep integration. It's more "a la carte" in DHH words.

~~~
tomjakubowski
Rails allows you to choose your own testing framework [1][2][3] and
plugins[4][5][6], templating engine[7][8][9], and ORM[10]. It's my
understanding that before Rails 3, swapping out many default Rails was a bit
hacky, but it's pretty standard now.

[1]: <https://github.com/rspec/rspec-rails> [2]:
<https://github.com/cucumber/cucumber-rails> [3]:
<https://github.com/thoughtbot/shoulda> [4]:
<https://github.com/thoughtbot/factory_girl> [5]:
<https://github.com/nulldb/nulldb> [6]: <https://github.com/notahat/machinist>
[7]: <https://github.com/haml/haml> [8]: <https://github.com/josh/mustache-
rails> [9]: <https://github.com/stonean/slim> [10]:
<https://github.com/brasten/sequel-rails> [11]:
<https://github.com/datamapper/dm-rails> [12]:
[http://mongomapper.com/documentation/getting-
started/rails.h...](http://mongomapper.com/documentation/getting-
started/rails.html)

~~~
Xylakant
I know that and it's been posted often enough. However, the rails approach is
fundamentally different from the padrino approach: Rails is very opinionated
about which component should be used - as DHH stresses in his blog post.
Padrino asks you when you generate your project. Both approaches have their
advantages and disadvantages.

~~~
AlexanderZ
Changing the defaults takes 2 minutes in Rails. What's the problem? Besides,
there are gems like Rails Composer [1], which allow you to create new projects
based on a template.

[1] - <https://github.com/RailsApps/rails-composer/#your-options>

~~~
Xylakant
Nobody ever said it's a problem. It's a different view of the world, that's
all.

~~~
AlexanderZ
And what is the fundamental difference?

You can tell Padrino what you want during the creation of a new project.

You can tell Rails what you want immediately after the creation of a new
project. Rails simply saves you time by having sane defaults. Convention over
configuration at its best.

~~~
Xylakant
Padrinos fundamental philosophy is to be a framework built up of independent
components and with limited opinions. Rails is by default opinionated: You can
swap out certain components but all in all you're expected to do stuff "The
Rails Way". That's the difference. It may or may not matter to you and in many
ways produce the same end results, but the approach still differs.

------
lkrubner
This is why I like the Clojure community, which in this regard is very
different from Rails. Clojure has developed a culture that favors small
libraries over monolithic frameworks. The eco-system of Clojure is all about
picking and choosing among a variety of tasty dishes, which is the exact
opposite of this:

"Rails is not that. Rails is omakase. A team of chefs picked out the
ingredients, designed the APIs, and arranged the order of consumption on your
behalf according to their idea of what would make for a tasty full-stack
framework. The menu can be both personal and quirky. It isn't designed to
appeal to the taste of everyone, everywhere."

The folks who like omakase are of course free to enjoy Rails. More power to
them. I personally learn more, and enjoy more, when I get to assemble a
different menu for each project -- a menu suited to the project.

~~~
malandrew
Same with the Node.js community. When I moved from Rails to Node.js, the focus
on small libraries held together by an exceptional package manager was a huge
breath of fresh air.

If anything, Rails poisons things in the Ruby community because the monolithic
approach of the biggest framework in the community simply works against small
libraries with small interfaces that are very compatible and remixable.

In fact, one of the best developments in the Ruby community lately has been
the increase of other frameworks like grape, padrino, rack, sinatra, etc. I
know some of these have been around for a long time, but it wasn't until Rails
started getting long in the tooth that they started getting more and more
attention.

~~~
phillmv
You really can't lump Rack in there, given that it's a meta framework, and a
meta framework to which Rails has been built around since 2.3.

------
mtkd
DHH vexes me on a few issues but I respect his passion for what he believes
Rails should be.

The conventions being enforced result in existing Rails code being easier to
penetrate for new team members and more maintainable over time than was the
case pre-Rails for web apps.

Rails is stronger for it.

~~~
karterk
But if you actually read through the github thread, you will see that DHH is
going against conventional practice in this case.

------
benlower
The analogy here is just off. DHH might consider just saying "I have good
intentions. Rails is my thing. I will ultimately make the choices but do
consider feedback."

The reason the analogy is off: when was the last time you went into a
restaurant and said, "i'm going to base my work/livelihood on this menu"?
Never. Sometimes when I go for a meal I know what I want and I order that.
Often I'm looking for an experience and I'll ask, "If the chef were going to
die tomorrow what would they eat tonight?". Omakase is a formalized way to see
what the chef recommends at that moment in time.

Rails is not the same as me going into a restaurant looking for a great
experience at that moment. I might have a mind-blowing meal but I'm not going
to base my livelihood on it.

I'm not saying that DHH or Rails are flaky. I am saying that comparing a
serious tool for serious work to omakase/the whims of the chef does Rails a
disservice.

~~~
bdcravens
DHH has long held that Rails meets his (Basecamp's) needs first, so the whims
of the chef hold true. Implicit in this post was the idea that it's not the
only serious tool for serious work, and if you don't like the chef's choices,
you're better served in a different restaurant than complaining about the menu
in this one.

Even if you've staked your career on Rails, it's important to realize it's
your choice, but his framework.

------
nkuttler
He lost me at "Ã¡ la carte". Incidentally, no proper unicode support is why I
never used rails (or ruby) for anything more than a tutorial. Yes, that was a
long time ago.

~~~
fbuilesv
This has nothing to do with Ruby or Rails. Setting a proper HTML encoding
(UTF-8) would fix it.

~~~
nkuttler
Hence "incidentally". Couldn't help but to make a connection.

~~~
bdcravens
Yes, you could help it. The connection you made applies to any
language/framework.

------
silentmars
There's an old saying that goes something like, the lower the stakes, the more
bitter and destructive the disagreement. It goes along with that old anecdote
about how the disputes among people involved in volunteer organizations are
more charged than in situations where money is involved.

In this case, this drama was triggered by... a one-line change to the default
gitignore file.

~~~
steveklabnik
This 'low stakes' change breaks every single new Rails app on Heroku that uses
rbenv.

~~~
andrewem
Honest question: how popular is rbenv? Should I be using it rather than rvm?
<https://github.com/sstephenson/rbenv> lists apparently bad things that rvm
does; are those significant reasons to prefer rbenv?

~~~
rapind
It doesn't really matter.

I switched for a little while and ran into all sorts of path issues. As I was
working through my issues, I noticed there seemed to be a lot of attitude
around it and what I thought was unwarranted criticism of rvm. Soured me, and
I haven't bothered with it since.

I'm sure it works great for some people though.

------
programminggeek
Rails doesn't have to be a one size fits all framework if you use it as a web
delivery mechanism. That is the point of the Obvious Architecture
<http://obvious.retromocha.com/> You can see an example "twitter" app here:
<https://github.com/RetroMocha/obvious_status>

In the case of my example you could swap out the /delivery/web/app.rb or
delivery/api/app.rb out for rails no problem. You wouldn't need to change any
of the code in /app or /external to do so whatsoever.

Just because DHH thinks you should write your code one way and you don't agree
doesn't mean you have to throw rails away entirely to have a different or
better structure. Rails might be opinionated, but that's just like their
opinion man.

------
malandrew
I think it'd be funny if one day they even start prescribing the production
environment via a Vagrant box.

------
dreamdu5t
So use Sinatra instead of Rails and create the stack and build system that
works for you.

People are way too into Rails...

~~~
rubynerd
I don't know about you, but every time I've attempted to use Sinatra for a
project, it's either been for something that wouldn't ever see the light of
production, or I've just ended up with franken-rails.

We had this problem at work: a Sinatra app that had pieces and pieces of
ActiveSupport bolted on, and it got to the stage where we needed a beefier
database than Redis before the CTO eventually generated a new rails app and
transplanted the Sinatra app on top of it.

It's all well and good saying "use Sinatra", but when you get to the stage
where you're adding ActiveRecord because it's the most mature ORM out there,
it's usually late enough in the game that you're actually writing a poor
excuse for a Rails application.

~~~
Argorak
I hear that sentiment a lot (I blogged about it here: [1]). Basically, "every
time I use Sinatra, I ended up with franken-rails" means that Sinatra was
either picked for the wrong reasons or misused. If you want to build something
large based on Sinatra, for the love of $deity, please use organization
systems people have built for you, be it Padrino, some Sinatra stack or
something else. It doesn't mean that Sinatra is bad, but its often
misunderstood.

[1]: [http://www.asquera.de/opensource/2012/10/22/the-rails-
monoth...](http://www.asquera.de/opensource/2012/10/22/the-rails-monotheism/)

------
sergiotapia
I've come to enjoy Rails defaults and "just solve the business problem"
attitude, coming from ASP.Net MVC3 it's a breath of fresh air.

It's quite liberating to have things have a default naming convention and
location. I can imagine it makes working on teams exceedingly easier other
alternatives.

~~~
slap_shot
I think this an interesting point. I feel like the ASP.NET Web Forms stack got
a bad name because it so closely coupled a web application framework with
proprietary, abstracted, controls (which I agree was bad).

But an empty MVC4 application makes no assumptions about frameworks (JS, CSS,
ORM, Tests, View engine, etc.), and yet it generates criticism that there
isn't enough dependencies built-in. It seems MS can't find the middle ground.

I agree that it fragments open source projects (you won't find any two MVC4
apps that follow the same methodology), but I find the flexibility for an
internal team to be more desirable than Rails.

------
elomarns
Rails has become extremely popular over the years, but we have to remember
that in the end it's a software created by a guy containing his particular
beliefs. And this is great! A good web framework need its own set of core
beliefs.

------
protonfish
This is assuming that those who make rails are master chefs. This is
debatable.

Also, the analogy does not hold well because at a sushi bar, the one who
orders is the end consumer. Rails is a tool for developers so a more accurate
metaphor would be I am the chef, my customer orders omakase and Rails supplies
all my tools and ingredients. If those tools and ingredients are what I need
to make my customer happy, then great. If not, then I'd prefer to throw them
away and do it right instead of dogmatically defending my framework like it's
a religion.

~~~
sergiotapia
Who would you consider 'master chefs'?

~~~
protonfish
Good question. Web development has been around for only about 20 years and
changed significantly during that time (CSS, JavaScript, Ajax.) Cooking has
existed for thousands of years so I would argue that there has not been nearly
enough time for any master chefs to come into being.

That does not mean that many (mostly due to Dunning-Kruger) will claim to be
masters and that even more will rush to the charlatans hoping for a magic
spell that makes complex, new and continuously emerging technology easy
without the need to learn or practice.

------
jevin
Granted, everyone should be able to choose their own tools. But different
tools can sometimes (in extreme cases) create inconsistent behavior. And you
don't want to see the consequences of that roll into production.

That's the one reason I wouldn't recommend each dev using a different package
manager.

However, if we follow that logic, only experienced devs will venture to choose
a different package manager. Which implies that he/she would be knowledgeable
enough to edit his own .gitignore and whatnot.

------
naithemilkman
I guess that makes Python/Django an international buffet.

~~~
orangethirty
Django does not accomodate all. The architecture is a bit more adaptive than
rails, given the way the desginers allowed for plug-in "apps" inside the
system. Aside from that, its the same stuff basically.

~~~
jrochkind1
Huh, i'd say Django is LESS flexible than Rails, as it comes with it's own
ideas about end-user UI (Rails does not).

Rails doens't have "plug-in apps" in the same way as Django, because Rails
doesn't have "apps" at all, apps are what you build with Rails, not part of
Rails.

(And Rails does sort of support plug-in apps in the form of 'engine gems' --
but there are no conventions for how different engines interact with each
other, because Rails doesn't establish conventions for end-user UI, it
consistently does not go to as high a level of abstraction as Django. This has
plusses and minuses of course).

~~~
njharman
> own ideas about end-user UI

Really, like what? I don't consider the admin to be end-user and even if it
is, its highly customizable.

Django is really more modular and customizable than people give it credit for.
Perhaps, because it works one way "out of the box" and you have to look deeper
and learn it to have it work some other way.

------
mgkimsal
Come on, this isn't how porn stars work! Now, someone diagram this discussion
and put it up on slideshare.

------
grandalf
There appears to be a lot of disgruntlement about rails lately. I like Rails
but switched to Sinatra about 5 years ago b/c I didn't like Rails 2 and
realized that the Rails APIs were a lot less stable than I'd expected.

DHH is right, there is no reason to complain.

------
rbirnie
Does DHH post regularly? His "Archive" shows 3 posts in the last 4 days, you'd
think he'd have more history posting.

<http://david.heinemeierhansson.com/archive.html>

~~~
skateinmars
He used to have a blog called "Loud Thinking":
<http://david.heinemeierhansson.com/posts/archives>

------
re_todd
Just saw Tenderlove's tweet, which is pretty funny "while we're at it, we
should check in the .so files too. Binfiles won't work so well without them."

------
bobowzki
Ã¡ la carte. UTF-8. Use it :-)

------
sramsay
I think what this guy is trying to say is that Ruby on Rails is . . . on
rails.

------
sankage
Is anyone else suddenly craving some unagi?

------
camus
> "Nobody ever got to have a meaningful impact on the direction of Rails by
> contributing no code and just showing up in a Github comment thread and
> yelling about the evils of CoffeeScript"

I think it sums up some kind of state of mind on the internet today. it's not
just about software or programming.

~~~
rnicholson
eh, its kind of always been a meritocracy...

