Rails is omakase

By David Heinemeier Hansson on Dec 27, 2012

There are lots of à la carte software environments in this world. Places where in order to eat, you must first carefully look over the menu of options to order exactly what you want. I want this for my ORM, I want that for my template language, and let's finish it off with this routing library. Of course, you're going to have to know what you want, and you'll rarely have your horizon expanded if you always order the same thing, but there it is. It's a very popular way of consuming software.

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.

That doesn't mean patrons can't express exceptions. Substitutions are allowed, within reason. So you don't like test/unit? No problem, bring your own rspec. Don't care for CoffeeScript as a dessert? Delete a single line from your Gemfile.

Hell, the menu is even open for suggestions. Good ideas are good ideas regardless of where they come from. But there's a fine line between a friendly suggestion and a belligerent diner. That line is usually exposed when the suggestion is declined: "I'm sorry, but hotdogs don't really fit our sushi menu, and while you may not care for unagi, we picked it for a reason. But thanks for the suggestions!". If only most arguments about the menu would stop there.

But they don't, do they? They usually carry on and on. BUT I REALLY DON'T LIKE UNAGI!!! IT'S OFFENDING MY TASTE BUDS THAT IT'S PART OF THE DEFAULT COURSE SETTING. TAKE IT OOOOOOFFFFF!! Okay, buddy, sit down and have a sake.

When we, or in some cases I — as the head chef of the omakase experience that is Rails — decide to include a dish, it's usually based on our distilled tastes and preferences. I've worked in this establishment for a decade. I've poured well in the excess of ten thousand hours into Rails. This doesn't make my tastes right for you, but it certainly means that they're well formed.

We can disagree about what's a tasty feature, but the conclusion is likely to be "then don't eat that". This is doubly so if you're a first-time patron. The less time you've spent in our establishment, and the further away you are from helping out in the kitchen, the less weight your opinion will carry. Especially if it's expressed in a loud, obnoxious fashion.

This rubs some people the wrong way. "But my opinion is as valid as yours!". No, really, it's not. Your opinion is valid for you, but most certainly not for the menu I've designed in this restaurant. The power you always have is to vote with your feet. If most things on the menu disgust you, what on earth are you still doing at the table? The door is right over there, try not to slam it on your way out.

If you want to have a long-term impact on the design of the menu of Rails, you'll have to work your way up to that. We added three more people to the Rails core group this week who did just that. They either showed up with a "what can I do to help?" directive or with a "here's a dish I've designed, have a taste and see if you like it". 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.

Given the futility of this behavior, it's worth pondering why some people choose to engage in it? My pet theory is that it feels like meaningful activism in the moment. They haven't really paid much attention to how things are run on a day-to-day basis, but here's an opportunity to paint some signs and get on the barricades. Yeah, I've done my part! I've taken a stand! Down with.. uhm.. Turbolinks? Or was it CoffeeScript we're protesting this week? Or Bundler? Oh fuck it, down with SOMETHING! YEAH!!!

At the end of the day, it's worth looking at the bigger picture. Do I generally like what's being served in this establishment? Can I express my differences as exceptions or substitutions to the few things I don't care for? If so, then maybe I should give the chefs in the kitchen the benefit of assuming that they are working on what they truly think is the best way to go. It doesn't mean I'll have to like everything, but I can give up thinking it's a conspiracy to make the world love unagi as a sick joke.