This year Rails 5 will be released and the Railsconf keynote 1 held by DHH - the author of Rails - presents the rationale behind its latest developments. In the following I'll show you why I think we are riding the good Rails and how to apply the right amount of criticism around the Rails' author point of view.
The software evolution in the last 5 years
Such shifts created the need for more specialised software engineering roles. Suddenly you need more experts to handle your frontend code written in AngularJS 2 or you need better backend engineers to handle the coordination between your microservices by delivering better APIs 3 and system monitoring.
Is this the software world we want to live in?
The backpack metaphor
But what if - in an improbable apocalyptic scenario - we are left alone as solo-developers and we have to figure it out a way to ship our app? Can we envision and build a tool set that is simple enough, minimalistic, and self-contained, just like a backpack that can help us be self-sufficient when hard times will come? In other words - as a software engineering community - are we able to solve a Knapsack problem 4 where the maximum weight is the weight a single developer (or a small team of developers) can tolerate to build a web application?
I got excited by this vision and I truly endorse it. As a professional engineer who tried to start my own venture and now contributing to a new one I feel that this is a remarkable effort that will help the startup community for the years to come. As developers we want to be free. And to be free we need to make the most of every single square centimeter in our backpack. Do we really need a tool that will help us build systems that scale like Google? Or actually what we need is something that will support us getting our idea off the ground with a small team and in the shortest amount of time possible?
There is just no space for frontend frameworks, but we can squeeze our backpack to make turbolinks 5 fit. There is no space for microservices and enterprise buses, because maybe, just maybe, a simple web socket 6 will be enough.
When it is time to build your house again?
There is only one point missing in the talk that I would like to criticize. Being a digital nomad solo developer with a nice backpack is definitely great. But when it's the right time for me to settle down and build my nice house again? When it's the right time for me to break the First Law of Distributed Objects 7 again?
First of all you must be a grown app developer 8 with good rapid provisioning, monitoring and deployment in place. Without this mentality it is impossible to make the shift from a single machine environment to a distributed one, simply because you are still coupled with the mentality of having a file system and a central machine you can refer to.
Second, your system has to be big enough 9 such that you can't manage it as a single application. There is no reason why you can't build a single monolith with well-defined module boundaries, at least in theory. In practice is seems that eventually given a big enough piece of software you will start breaking boundaries and start dealing more and more with a tangled monolith.
Finally the third greatest reason is performance: like Twitter when it had to move to the next level in terms of scalability 10; or like Housetrip.com where we had to bring down search response time from 2 seconds to 200ms. At that point you need to go out again and open the tools outside of your backpack to build bigger things. This should not change the role of your core backpack, it is still part of your tool set. It is your small thing 11 that will always back you up.
Finally I like to quote the end of the keynote:
10x the number of developers, 10x the amount of money, all the VCs in the world, and so [...] what? Have a better idea, have a great tool set, be prepared, and we can pick up the fight.
This fires me up too, thanks DHH
Also published on Medium.
- Railsconf keynote
- Rails API repository
- The Knapsack problem
- Turbolinks repository
- Action Cable repository
- First Law of Distributed Objects
- Microservices Prerequisites
- Microservice Premium
- Twitter Shifting More Code to JVM, Citing Performance and Encapsulation As Primary Drivers
- All the little things