Friday, September 21, 2007

Rails is Not Opinionated, it is Principled

I'm tired of Rails being called opinionated software. It's not. While it might be a catchy phrase, it is inaccurate and does a disservice to the framework and the community. Rails is not opinionated, it is principled and as far up as the Rails Core, people need to stop using that misnomer.

Looking at the dictionary definitions of opinionated (Meriam Webster | OED ) and principled (Meriam Webster | OED ) you can see the important difference between the two words. In English an opinion need not, and often does not, rest in the bedrock of a reasoned choice, whereas a principle should.

That the Yankees are a better team to like than the Red Sox is an opinion (though a reasonable one). That one should, all things equal, prefer a sports team rooted in one's community is a principle (though admittedly not a deep one). There's nothing wrong with having opinions, even strong ones, but to elevate them to the level of principle and arguing about them is a fools errand (e.g. Hannity and Combes, Crossfire, etc.). Principles, however, can be the subject of reasoned debate.

My pointing out the difference between the words is not for the sake of an exercise in pedantry. People often confuse the notions of being principled and being opinionated, especially as the behaviors associated with someone being one or the other are often identical. Indeed someone can be both principled on some important subjects and opinionated on other related subjects blurring the distinction. But the distinction is important and should be significant to the Rails community.

It seems, to me, that some people hear that Rails is opinionated and is a good web application and they use it and so jump to the conclusion that being opinionated is good thing and they should be opinionated.

A recent case in point is Mr. Fernandez's post on the merits of Java. While he labeled this piece a humor piece, it's only funny in the way you make fun of someone who isn't like you: the kid who has the wrong lunchbox, or wears the wrong shirt. I'm not trying to pick on Mr. Fernandez (and if I were he seems more than up to handling a critic), I usually enjoy his blog and look forward to checking out his book, but the larger point is that this sort of post is either encouraged or tolerated within the Rails community. I think in large part because of the conflation of the notions of opinionated and principled.

Being opinionated is not something to aspire to, being principled is. It's like the difference between Fox News and CNN reporting on Anna Nicole and OJ and the Daily Show reporting on the war in Iraq and the Economy.

I don't think, especially at this stage, Rails needs or should look to promote itself by belittling other technologies. Rails is an attractive choice for web application development on its own merits. As a community, vitriol makes us look defensive and closed minded. This has not been my experience with most folks in the community and I would not like to see others turn away because of this misperception. Over the course of the last few years, I've heard people say of those who disagree with rails orthodoxy, that we don't want those people, or they don't get it.

I disagree, we do want a larger community, because talent and utility aren't fixed quota character attributes and someone who may not be prolific today, might be a core contributor to the community down the road. And as for not getting it, maybe they do and don't enjoy acerbic dialogue and so go to help the Django community become stronger. I don't think I need to tell a technical audience that the best technology doesn't always prevail (I am not putting down Django, it's pretty cool, I am merely of the opinion that Ruby is a more enjoyable language with which to program). There is real opportunity cost of driving people away.

Mr. Heinemeier Hansson's decision to build a framework around principles was and is an inspired one. Lets strive to build a community as principled as the framework we support.

Thursday, September 20, 2007

Rails, the Enterprise, and Scaling: A Fable

As a respectable restaurant architect for a large restaurant architectural firm, a great local Chef tried to hire me a while back to build a restaurant with a dream kitchen. She told me she wants a 10 burner stove and a 4 bin oven plus a large prep area that the customer can see, like a live Iron Chef (Japan).

She was so into this that she had worked out plans and looked up stoves and prep furniture. I could see this was going to be a doozy of a client. She had lots of 'ideas'.

I pointed out that a stove/oven/prep area like that will never scale to 5,000 meals a day. To my utter surprise, this did not matter to her. She was more interested in having a kitchen that aided the rapid and elegant preparation of 300-500 meals a day, that was it.

She was not hearing reason about that and I'm conflict averse so in order to placate her, I conceded the point because she hadn't thought this through and there were lots of other reasons I could use to dissuade her from her “new fangled” kitchen.

I went on to point out that SHI Thursdays, Pearwasps, and the Olive Patch do not use that type of kitchen setup, and they are quite successful, and lets not forget the granddaddy of them all, the MacDonatello's set up. Their kitchen setups provide tasty meals at a much higher rate than her setup would. Sure, they may take a bit longer to build, and may cost more, but they provide the same quality meal with the bonus of being able to cook a lot more than 500/day if her restaurant catches on really, really big.

It turns out logic was not one of her strong suits. She had a notion that her kitchen environment would make her chef's happier and they would work better. Additionally it would cost her less to build the restaurant and she could use the savings to hire better chefs. (If she really wanted to save money, she could just buy normal straws instead of the more expensive bendy kind that people prefer.) She really didn't expect to make more than 500/meals a day, and she believed she would make a nice living doing that. She said if business was that good, she could open a second one and scale that way.

The obvious inefficiencies of building a whole new restaurant, rather than cook more meals in the existing one seemed lost on her. They clearly did not have too many business classes at her cooking school.

I pointed out to her that OK, sure, her new kitchen layout was 'innovative', and sure the chefs may like it better in the long run, but most chefs are used to cooking in a more standard layout. How are they going to adapt to this new layout in time for you to make a successful restaurant? The odds seemed low. Not surprisingly, she disagreed here. A client who is contrary for their own sake is the worst type of client. She believed that if they were good chefs, they'd figure it out pretty quick. The real talent is in knowing how to cook, not in how to use a specific kitchen.

I guessed the turnip truck she fell off of just pulled away. But I'm a professional and she was the potential client, but I hate to waste people's time and money. Since her idea was essentially experimental, I suggested we build a smaller prototype kitchen and see how it worked. She'd never heard of this but was intrigued. How much would it cost? I told her it wouldn't cost her anything if she didn't like it, and it would only take a month or two, if she liked it of course, the total price of the kitchen would include the effort put into the protoype (which would be thrown out of course). To this day I can still remember her frown. She'd worked in lots of kitchens and was confident in her idea. Also, she was somewhat cash constrained and adding the cost of building the prototype and the opportunity cost of delaying opening by upto 3 months was high for her. Too high.

She thanked me for my time and a week later, informed me she was going to use a smaller firm that fit her needs. I told her I appreciated the opportunity but thank god I didn't have to deal with this high maintenance, low margin client. Especially since we won the bid to redo Infront Chikenhouse's kitchens. Ahh chicken, the original whitemeat. Now that'll scale.