avellable > posts

My Preference Of Opinionated Technology

July 24th 2020

I have always been a big fan of Ruby on Rails. Partly because I got interested in web development because of it. Otherwise embedded software development was my first choice to work in full-time. But the main reason I like it is because its an opinionated web framework. Even though there are multiple ways to create a web application, Rails developers agreed upon a set of best ways and designed the whole framework around it. If you don't follow the conventions set by the framework, then you can't use it. You have less freedom. Why would I like something which gives me less freedom? Here are few reasons I prefer opinionated technology like Rails rather than something which has more freedom,

Improved Productivity

Having a technology which restricts number of ways a certain product can be developed reduces unnecessary discussions. Developers are a creative breed. Every developer has their own ideas about how a product can be developed. That could create some friction between members of a team. Having limited options encourages some members to compromise and helps increase productivity.

Short on-boarding time

Very few developers work for a company for long time these days. Chances are your workplace has a new developer every 3-6 months. Having to dig into an existing codebase and understanding it takes considerable amount of time. There are many new things one has to encounter such as new business logic. But if you can understand the overall structure of code pretty easily then the whole process becomes easier. Having a opinionated base with community wide conventions enables this.

Improved maintainability

Once in a while we all have to spend hours deciphering a method/function which is essential to the product. You can not just ask the person who wrote it to explain because they themselves might not remember or they're not around anymore. Now imagine that function/method being essential to a bug fix you have to do in order to fix production urgently. Having a framework which enforces limited number of things a function can do and can be interacted with reduces this kind of mess hence improving maintainability.

Having said all the things above, I would like to clarify that I am not against being creative. We all have our own style of developing software. For example, I can always look at function name and guess which co-worker wrote it. I think that having a strict opinionated technology gives us a small set of tools. Having less tools at hand forces you to think harder and be more creative.