I first heard the term opinionated software when I took a peek at Ruby on Rails a number of years ago now.
In my opinion there will be always be configuration in software in one form or another. When they invented Ruby On Rails, it wasn’t surprising that the developers saw a world where Big Ball of Mud code had been moved out of the code base and into config files instead, and Ruby On Rails is very opinionated about using convention over configuration.
Config files which abound in the software landscape often don’t have any structure so it is impossible to find that bit which switched the UI from Riotous Red to Everyday Grey. Or the bit of config that pointed the system at the development database rather than the production database (I’m sure you are all familiar with that one!), or the config…well you get the point.
So using convention over configuration became the fashion. Config became the unpopular boy in school. Left to each his lunch in the far off corner of the development playground.
If you don’t get your convention right then nothing will work. Exactly what you want, fail fast, fix fast. Convention forces developers to stick to the same style, making the cost of bringing on a new person less. Convention is the cool kid in school.
But I like config.
Yes, he had got a bit big for his boots. Yes he had got himself in a mess. But config is still useful.
So in my world, I don’t say. Hey config, get out of my house. And I do not say config is king, who is this convention bloke anyway?
I mix and match, I use config where config works best, and convention where convention works best.
So if you are deciding whether to use convention or configuration, why not use both.
Which camp do you live in? Leave me a comment and tell me which one, or maybe you already use both? If not I would love to know why?