There are many companies out there that help you upgrade your legacy Rails application. We here at Tarka Labs aren’t just great at upgrading your Rails application from the old rusty rails version to the new shiny one but we do it on time and under budget.
We don’t just specialize in writing beautiful code but also in building beautiful cost-effective infrastructure to run your application on.
Follow along, we will explain all the things we did that made rails upgrades look like a relaxed walk on the park for our customer
First, let us show you what our customers were able to achieve at the end of this whole upgrade project
We understand that time is money for our clients. So, we value delivering things on time. We plan and then we execute. But just like life, software development is full of surprises. Things don’t always go as planned. That’s where effective and timely communication comes in.
We believe in clear communication with all the stakeholders. We used platforms like daily standup and progress update meetings to keep stakeholders in the loop on what’s happening. That’s where we can ask questions, set expectations, discuss changes in plan, etc.
Saved best for the last! We are really good at finding cost optimization centers. It can be your infrastructure, an API service you might be using, a 3rd party tool you might be using, etc. We make sure that you are getting the most out of your investments (be it infrastructure or us).
With all the savings we were able to do, Our service paid for itself 😁
client name is a company that specializes in insurance software. They had recently acquired a tool for insurance agents to generate leads and sell more insurance products. It is built in Ruby on Rails with Postgres as a datastore and Sidekiq for processing background jobs.
The application used an outdated version of Ruby on Rails (4.2) and Ruby (2.4). They wanted to move to a more recent version to fix common vulnerabilities and exposures that the outdated versions of Rails and Ruby had.
The deployment of the app was also dependent on a single developer. The client also wants to increase the "Truck Factor" of this application.
We started a 3 month engagement with the primary goal of updating the Rails version to 7.1.3.4 and Ruby to 3.3.0.
We were a team of 3 developers, 1 QA, and a few senior folks overlooking the engagement. The first couple of days were spent understanding the codebase and hashing out a plan for the upgrade.
We went ahead with an incremental strategy so that we could catch bugs quickly and release frequently.
We used tools like RailsBump to identify gem compatibility with newer versions of Rails. We found alternatives for gems that were not supported / maintained for newer versions (eg. Paperclip).
The rails upgrade guide was our holy grail to list down the changes between rails versions and then understand their impact on the codebase.
As a part of this rails upgrade engagement, we also decided to overhaul the application deployment process. The deployment process they had used Capistrano to deploy to 2 EC2 instances.
Eventhough this is not part of the rails upgrade plan, Since Tarka labs developers see the problem holistically, We highlighted that they are utilising only 20% of the EC2 instances CPU resource. And they can save by switching to AWS Elastic Container Services (ECS).
We included also this in our plan and successfully updated their infra for better utilisation and cost. We used
There is project without challenges and we had our fair share of them here as well. We had a great team and customer collaboration to overcome all of these
There was no dev documentation around setting up the project. We were on our own in figuring out on how to setup the application on our local machines
Since the application was acquired by the client, they had no context on some of the design decisions that were taken. Our team was able to deep dive, look at the version history of the files to paint the big picture
In conclusion, we delivered the project on time because of planning the work and dividing it efficiently among the team.
The team worked together to make sure they were unblocked and had everything in order to progress. If clarification was required, we promptly raised it to the client.
Agile ceremonies like standup calls, sprint retrospectives helped us assess where we lacked and what can be done to improve our velocity