James Governor's Monkchips

37Signal’s David Heinemeier Hansson responds on lessconfig, the advantages of convention

Share via Twitter Share via Facebook Share via Linkedin Share via Reddit

I have been wondering about the advantages of lessconfig, that is, the maintenance advantages of delivering technology that needs less configuration, because, for example, the right defaults are chosen in the first place. Good open source package management leads to lessconfig, and subsequently more adoption. No XML files to mess with is lessconfig.

A closely related predecessor concept, lesscode, comes from development thinking.

One of the best current examples of a lesscode approach is Ruby On Rails.

Ruby on Rails is interesting because it forces constraints on developers… and they like it.

Rails is about freedom in the Kantian sense-development has a categorical imperative – what you do should be morally applicable to anyone else in the same circumstance. Its about responsibilities rather than rights. The responsibility to ease of use.Â

Abstractions are aspects or constraints of the framework itself, rather than veneers to hide code behind and allow ever more configurations to be applied. Freedom comes from accepting and working within constraints. Beautiful code comes from limitations, not being able to configure everything in sight. Forgive the philosophy but the creator of RoR, David Heinemeier Hannson, is a pretty deep thinker, touched as he is by the hand of Design with a capital D.

So I decided why not just ask David what the lessconfig implications of RoR are. David was good enough to answer the question, helping us to understand the signal vs noise implications.

Q: Does lesscode mean lessconfig, less maintenance? What are the advantages of convention over configuration? Am I barking up the wrong tree-or do you have any evidence, anecdotal or otherwise, that gets to the heart of the second order benefits of lesscode, or dev by convention?

DHH: I think conventions, less code, and less configuration are all
instrumental to lowering the costs and pain involved with maintaining
legacy applications. We’ve been working with the Basecamp code base
for nearly three years now. It’s about 10,000 lines of code.

Convention has meant the world to this application. We’ve had four
different programmers work on it and the conventions make it muchÂ
easier for people to pass in and out. It removes the hunt of the
complete picture by having the concerns centralized around very few

So my experiences would tell me that conventions of reward ("do it
like this and you’ll get that for free") has a really long shelve
life. I remember when I worked in PHP, I would always tweak the
configuration approach a tad going from app to app. This would leadÂ
to the code base of the previous project feeling really old really

Rails applications don’t suffer from the same notion. Yes, we keep
adding features and tweaking APIs to make the common stuff easier,
but the majority of core conventions has been stable for a very long
time now. It gives all applications a common culture and fix point.

Tags: , , , , , , ,


  1. Wow, I could Fisk Jaime’s whole comment. Time for another blogpost I guess. While I get those thoughts down, though, there’s one line I can’t help but respond to — there are lots of people out there who DO know what’s best for you, Jaime, because *you are not different enough from them to merit your own personal configuration*. If you disagree with the “configuration” (or state, or whatever) of a properly lessconfigged program, there are three reasons:

    (1) you’re wrong, and they know something you don’t
    (2) they’re wrong, and their program is therefore bad
    (3) the program is not the one you want.

    I know for me the category point is the most frequent. I try to avoid using programs in the second category. And the third one is essential to lessconfig as a philosophy. Horses for courses, don’t use a hammer to turn screws, all those cliches. If the program is not doing what you want, you are not its target market!

  2. Dan, reading your comment and your post, first, I have to say I totally agree with point #2 on your post and, I’m willing to leave idle (for now) #3. As for #1 (and this comment) I totally disagree.
    Did you knew there is (was?) a Windows 2003 Server Web Server edition? Basicaly, a Win 2003 with the netwok stack tuned for a Web server (and with some services disconected). Now, the question comes, what should you buy for a mail server? Or a proxy server?
    Don’t you prefer a Solaris system where you can tune the TCP stack with ndd to make it work for any particular server you’re setting up? I’d have no quarrel with a master script called Tune-web-server but, by applying lessconfig principles to the extreme, you would remove the ndd command and, that’s something I can’t let pass.
    Look at I.M. software. It was built to have people exchanging messages with each other. Now, we’re talking about a presence protocol and I.M. is evolving to fields where the original developers never thought of. You’re killing all that, by assuming you know what’s best for me.
    Every time you take away a configuration option, you’re reducing the value of the Software.
    For all the people that didn’t follow Cote’s post, Openwindows had an option to let you have the active windows in the background, instead of the Windows default where the active one goes on top of everything. That feature was precious to anyone doing translations but, for some reason someone decided to remove such features.
    Dan, what do you sugest? Building a Window Manager for translators? Not only they aren’t a big enough market for that but, people don’t want to use another tool (or UI) just for a particular task, I know I’d prefer to simply configure my UI to suite my needs of the moment.
    One of the strongest reasonings behind OSS is that it can be tailored to suite 100% of the needs, corporations don’t have to content with 90% anymore. While that falls on the other extreme (and I also don’t agree with it) it’s curious to see lessconfig came up in a moment where OSS is clearly on top.

  3. i guess i need to make a clarification post. i think we may all be in closer agreement than one would think…

    Windows is a great place to start. What would you say, Jaime? that all Windows desktop users should have admin priveleges? 🙂 i KNOW that’s not what you’re saying.

    And on the web server point it does make some sense to have a dedicated configuration. there is a ton of crap in windows server that needs to be configured- and not everyone gets security setting s right and so on. so a standard configuration makes a lot of sense.

    very nice point about extensibility. i can’t deny that systems and protocols end up being used in new and interesting ways, that the original designers never considered.

    for me though lessconfig is not intended as an absolute but a guiding principal.

    and Jaime you’re an alpha geek. config is what you do – so i can certainly see your point.

    solaris is incredibly configurable – but that’s not always an advantage is all i am saying. its great for Solaris Kung Fu experts sure, but not everyone has that level of skillz.

    Am i going to go and tell someone like ben rockwood he isn’t allowed to tune his own system configs? of course not.

Leave a Reply

Your email address will not be published. Required fields are marked *