6 Questions We Ask Before a Ruby on Rails Upgrade

A Ruby on Rails upgrade is not just a technical task  – it’s a strategic move to keep your app healthy. But before you dive in, there are some key considerations to ensure a smooth transition. We explore what the best agencies ask to ensure your upgrade is a success.

Modern applications depend on hundreds of downstream dependencies. If you want to ensure your Rails app stays stable, secure, and healthy overall, keeping them updated is a must. However, just as we tend to procrastinate on healthy eating and regular exercise until we’re met with a health scare, a Ruby on Rails upgrade often lands in the backlog, never to be mentioned again until a critical need arises. 

Whether you’re in a situation where you can’t delay the upgrade any longer or you want to be proactive about dependency health – no judgment in any scenario – a seasoned agency can help you make the process efficient and stress-free, keeping the wheels of your business running smoothly through every change.

This can only be achieved through careful and structured planning, so before diving into a Ruby on Rails upgrade, here’s what you need to consider and what the experienced agencies will ask to make it happen seamlessly.

Updating your dependencies is like eating your veggies

When applications are built on hundreds of interconnected dependencies, it’s easy to think of them as effortless solutions. After all, these convenient code add-ons are designed to reduce developers’ workload by introducing functionalities that would otherwise require countless engineering hours.

However, as useful as they are, dependencies come with a catch: they require long-term upkeep. Dependency authors know their library’s behavior well, while your teams know your business logic – but no one can guarantee the two will continue to play nicely together with each new gem version.

Dependencies get updated over time, and if the matter is left unattended, a team can easily end up with hundreds of outdated dependencies in less than a year.

A Ruby on Rails upgrade process requires so much expert knowledge and causes so much friction that most development teams just sweep the matter under the rug. Bugs, outages, and delays in delivering new features are common side effects of dependency upgrades, which can make the process feel daunting. But dependencies get updated over time, and if the matter is left unattended, a team can easily end up with hundreds of outdated dependencies in less than a year.

What to consider before a Ruby on Rails upgrade (and what the best agencies will ask)

When it comes to upgrading Ruby dependencies, preparation is key. An experienced agency will take the time to understand your app’s unique needs and constraints before jumping into the upgrade process. 

From pinpointing your specific reasons for upgrading to mapping out an efficient release strategy, these initial questions help tailor the process to your business. Here are the key areas to consider – and the questions an expert partner will ask – to ensure your Ruby on Rails upgrade goes as smoothly as possible.

1. Why do you want to upgrade your dependencies?

Keeping your app updated is an industry best practice, but as we’ve noted before, for most teams, there’s usually a trigger such as:

  • Failed upgrade attempts
  • Bugs and outages caused by a recent upgrade
  • Preparation for a security audit
  • A security breach
  • A need to access features available in the latest dependency versions

To tailor our service to each project, we have to understand your engineering context and stakeholder goals. Depending on your needs, our approach may vary – from prioritizing upgrades for critical security vulnerabilities to focusing on high-impact components like Ruby, Rails, and core gems first.

Some clients are primarily looking to meet security standards and may want detailed upgrade reports, while others see the process as an opportunity to upskill their team in dependency management. Whatever your aim is, we adapt our process to fit your goals and timeline, ensuring the upgrade aligns with your broader objectives.

2. What is the scope of your Ruby on Rails upgrade?

Keeping your Rails app up-to-date and secure goes beyond just managing your Ruby dependencies. So-called dependency rot can affect all downstream components, including those less visible yet equally crucial, such as your operating system, database, and external libraries. 

DependencyMinor versionsCVE count
Debian 11 “Bullseye”1161*
PostgreSQL 1645
ImageMagick1527

* Docker image for Debian 11

Skipping upgrade cycles for these core dependencies means missing out on critical bug and security fixes, performance enhancements, and new features available in the current version. While keeping everything up to date requires significant engineering effort, it’s essential to prioritize it for a secure and efficient system. 

Each upgrade effort comes with a trade-off in terms of time and resources, so weighing these investments against the benefits: reduced exposure to vulnerabilities, improved performance, and access to the latest features is important. We can help you estimate these efforts and assess potential risks so you can make informed decisions on the most valuable upgrades for your application.

3. How will we ensure your Ruby on Rails upgrade is safe?

Upgrading a severely outdated application is inherently risky. When we update core dependencies, we’re essentially reconstructing the foundation of an application while keeping its business functionality intact. Even the most minor changes have the potential to trigger a bug or an outage, so it’s important to have a strong verification process in place. While automated tests are the industry norm, we still see applications that either aren’t tested at all or lack coverage for key customer flows. 

Upgrades are rarely just about dependency updates – the biggest challenges lie at the intersection of dependencies and your application’s core logic.

A solid test suite is the first line of defense. If your automated test coverage is not up to par, we’ll work together to improve it or develop a detailed manual test plan that covers the most important flows and assertions. Since you’re the one who knows your application best, mapping out these flows will require your expert input.

Once the upgrade process is set in motion, we’re also likely to reach out to you several times daily. To perform the upgrade as safely as possible, we need to understand the context of your past technical decisions and current business logic. 

Upgrades are rarely just about dependency updates – the biggest challenges lie at the intersection of dependencies and your application’s core logic. With thorough preparation, comprehensive testing, and your input, we can perform a safe and effective Ruby on Rails upgrade without unpleasant surprises.

4. What is your long-term upgrade strategy?

Software development agencies have a unique perspective on dependency upgrades. We interact with various codebases and have seen the common challenges and long-term pitfalls first-hand. This experience taught us that managing dependencies is not a one-off project – it’s a marathon, not a sprint.

Partnering with a skilled partner for a Ruby on Rails upgrade can give your application a significant health boost today. However, dependencies are continuously evolving, and within a couple of years, even the best-maintained code can start to show signs of dependency rot if updates aren’t prioritized.

Without a proactive upgrade strategy, you could quickly end up in the same situation as before in a matter of months, with outdated dependencies piling up.

If you want to focus on your app’s long-term health, your team must learn how to upgrade dependencies safely and implement an ongoing upgrade process. We can help with this by organizing tailored workshops and providing consulting services. In fact, we consider our work successful when we’ve effectively worked ourselves out of a job – and your team has the skills and confidence to manage Ruby on Rails upgrades independently, keeping your app in top shape for the long run. 

5. How comfortable are you with frequent releases?

From experience, releasing small, frequent, and incremental dependency upgrades is the best way to minimize accidental defects. With minor changes, we can deliver immediate improvements to your application – even on day one – while keeping the “blast radius” manageable and reducing risk to your end users.

Ideally, we’d release these incremental changes multiple times daily. However, we are aware that many applications face technical, regulatory, or even cultural constraints that prevent us from deploying changes that frequently. 

A full upgrade can involve more than 50 separate pull requests, so it’s important to assess your current release process beforehand and find the right balance between upgrade efficiency and any constraints you might face. Reducing the wait time between releases can significantly impact the total time and cost of your Ruby on Rails upgrade process.

6. What is your error budget?

Major dependency upgrades always bring unexpected changes. While our experience and best practices help us keep them down to a minimum, some issues are inevitable. For each upgrade, we carefully balance the research, implementation, and verification effort against its potential impact on your application. 

For example, upgrading an internal, non-business critical application with a handful of occasional users involves minimal operational risk, so we take a more liberal approach to research and verification. But we need a steadier, more cautious process for customer-facing applications – where even a minute of downtime can translate to lost revenue.

Since you know your application best, we rely on your expertise to identify key business transactions in advance. Before we even begin the dependency upgrade process, we also need to make sure your automated monitoring is set up correctly so we can catch any issues early. During a Ruby on Rails upgrade, we’ll pay special attention to the areas of your codebase most affected by the changes, implementing additional safety measures and manual testing as needed.

Never downplay a Ruby on Rails upgrade

Too often relegated to the bottom of the backlog, upgrading Ruby on Rails dependencies is a vital step in keeping your app healthy, stable, and ready for future challenges. However, it’s not a process to be taken lightly.

To ensure everything runs smoothly, safely, and without disruptions to your business operations, it’s important to plan ahead. From defining the scope and determining the order of upgrades between stable versions to verifying updates and establishing a sustainable release cadence, every decision matters.

We hope this article has highlighted the key considerations when preparing for a Ruby on Rails upgrade. If you’re ready to take the next step or want to learn more about the process, our Ruby team is here to help