A Comprehensive Guide to Our Roadmap Service
One of our biggest goals as a company is to aim for transparency and honesty when evaluating a project for an upgrade. We understand that the decision to hire an outside vendor versus doing it in house becomes a difficult one. To provide confidence and a clear path to completing an upgrade, before we even begin a project we invest time in doing a thorough investigation of the project to provide the most accurate and detailed game plan for an upgrade.
In this blog, we are going to break down our Roadmap service and explain how it can be used to guide you and your team to making decisions when it comes to upgrading your application.
- Dual Booting
- Ruby Gem security vulnerabilities
- Code coverage analysis
- Code complexity analysis
- Rails version jump estimation
- Ruby upgrade analysis
- Analyze gem incompatibilities
- Identify new features and improvements
- Analyze potential challenges
Breakdown of the roadmap process:
Dual booting
One of the initial steps when beginning a roadmap involves implementing a dual-boot strategy for the application. With the next_rails gem , we attempt to assess how the application and its associated specs will perform in the next upgrade version. This dual-boot approach serves as an important diagnostic tool, allowing us to identify and address any potential challenges or complexities that may arise. By analyzing the dual-boot setup, we gain valuable insights into the extent of necessary work, highlighting any issues, addressing deprecations, and estimating the time required to fix the broken build, specifically focusing on the failing specs in the next Rails version.
Our primary objective during this phase is to eliminate uncertainties surrounding the upgrade process. We are committed to gathering enough information to ensure the accuracy of our estimations. By providing detailed insights into the upgrade’s details, we aim to provide you with the necessary information to make informed decisions. Our dedication to minimizing any potential waste of time or resources is done so through the attempt of dual-booting of the project.
Furthermore, successful dual-booting can reveal instances where the application is already in a favorable state for the upgrade, requiring minimal time and effort. This not only streamlines the upgrade process but also translates to significant savings in both time and cost for you.
Ruby Gem security vulnerabilities
Projects currently operating on outdated and potentially unsupported versions of Rails are susceptible to vulnerabilities stemming from associated dependencies. The risk of not upgrading lies in the exposure of these vulnerabilities, which can be identified and fixed in the subsequent version of Rails. Security concerns, if left unaddressed, can lead to substantial financial losses and potential data breaches involving sensitive company or client information. Our aim is to offer a thorough analysis of these vulnerabilities, providing a contextual understanding of the upgrade project. This analysis serves as a valuable tool to assess the significance and worth of upgrading your project.
What’s included:
- You will receive a report featuring a list of vulnerabilities impacting the application, sourced from our automated vulnerability analysis tool.
- The vulnerabilities section is designed to provide clear context and guidance on interpreting the information presented.
Code coverage analysis
To offer a more insightful overview of the time and cost involved in upgrading your application, it is crucial for us to provide further details about the foundation of our estimations on the upgrade work. Conducting a comprehensive analysis to thoroughly assess test coverage plays an important role in determining uncertainties and determining the necessary QA efforts.
Our approach includes providing information on overall code coverage, with a specific focus on identifying files with high churn and low coverage using tools such as SimpleCov and Skunk . This aids in conducting a thorough code coverage analysis.
What’s included:
- In-depth details on your application’s code coverage gained from analyzing:
- The total number of specs
- The testing library being used
- What CI solution is being used if available, and some specifics on how it’s configured
- Any other test suites apart from the Ruby and Rails tests
- Knowledge of any flaky specs
- An outline highlighting the benefits and risks identified in the analysis.
- Contextual information on potentially challenging areas related to coverage.
Code complexity analysis
When evaluating the code complexity of a project, we use various tools to assess critical factors such as:
- Project size and scale
- Dependencies
- Legacy code
- Monkey patching and customizations
This analysis allows us to identify some of the way the code complexity of the application could influence upgrade projects, allowing for a more accurate assessment of estimated timelines.
The complexity of a project significantly influences our estimations for upgrade roadmaps. As the project’s complexity increases, it will require additional time and effort for upgrades and other development tasks.
What’s included:
- A dedicated section in the roadmap report that summarizes the findings of our code complexity analysis. This section offers a clear and concise overview of the code complexity assessment and how it could affect the upgrade process.
Rails version jump estimation
We have carefully examined every Rails version transition, the associated deprecations, configuration changes, incompatibilities, and more. This in-depth research has enabled us with a list of tasks essential for completion before upgrading to the next Rails version. We then use our estimation software, Points , to streamline this process, organizing all information and tasks necessary for each version jump. This approach ensures efficiency and accuracy in estimating the effort required for the upgrade.
Throughout our in-depth analysis of the project, we continuously update and customize this list to align with the specific needs of your application. Our engineering team, provides effort estimates for each task, considering both best and worst-case scenarios. Factors such as size, complexity, and the required effort are taken into careful consideration during the estimation process.
This step in our roadmap process will result in a project estimate, providing a detailed timeline and cost. This will be a valuable resource your team can use to assess the feasibility and implications of the upgrade.
What’s included:
- An action plan that will break down all components of a version jump found in our research through documentation such as the Upgrading Ruby on Rails guide, release notes for each version, changelogs for each Rails library, commit messages, and the project analysis.
Ruby upgrade analysis
While identifying the essential elements for upgrading your Rails application, we prioritize ensuring that your app operates on supported versions of key components and dependents, including the Ruby version. We will keep you informed about available Ruby upgrades, providing explanations on whether they are necessary (especially in the critical Rails upgrade path) or recommended, along with insights into the effort required for the Ruby upgrade.
We have an article that tells us which versions of Ruby are required by each version of Rails. Check it out .
Analyze gem incompatibilities
In the process of upgrading to a more recent Rails version, certain gems supporting the application become incompatible. Before moving forward with the Rails upgrade, we address this by either updating the version of the gem or identifying a suitable alternative that aligns with the new version. Our tool of choice for identifying these incompatibilities and the required fixes is bundle_report . Any incompatible gems identified are subsequently added to Points for a more detailed estimation and included in the action plan.
Identify new features and improvements
The process of upgrading Rails introduces new features and enhancements that can bring valuable benefits to your team. However, it’s essential to acknowledge that as the scope of the project expands, so does the overall size and cost. While these new features and improvements are valuable, they are not required for the Rails upgrade. Some clients may prioritize the upgrade without necessarily incorporating these additional elements.
To provide the best of both options, we will share information about the new optional benefits and possibilities. However, these nice-to-haves will be kept separate from the main upgrade action plan, allowing for an approach based on your specific preferences and priorities.
What’s included:
- A list of each feature, additional upgrade (for example, new supported Ruby versions) and enhancement made available
- Descriptions for each feature or improvement made available through the upgrade.
Analyze potential challenges
Despite our research and careful project analysis, the exact requirements for upgrading an application will only become apparent when the actual work begins. Unforeseen issues may come up during the upgrade process, which is why we operate within both a best- and worst-case scenario range.
Our goal is to establish accurate expectations and continue being transparent regarding potential challenges. This approach helps provide an understanding of why a worst-case scenario exists and how it could come up during the project.
Examples of potential challenges include (but are not limited to):
- Forked, outdated and/or private gems.
- Bad code design and/or bad practices.
- Monkey patching.
- Low test coverage.
- Incompatibility with Zeitwerk.
What’s included:
- A detailed list of potential challenges identified during our analysis.
- Contextual descriptions for each potential challenge that may arise during the upgrade.
Conclusion
Our commitment to transparency and accuracy guides our Roadmap service, providing a systematic approach for informed decision-making during application upgrades. From dual-boot strategies to vulnerability assessments and code analyses, we want to equip you with comprehensive insights. Operating within both best- and worst-case scenarios, our aim is to set realistic expectations, address potential challenges upfront, and help your team navigate the complexities of upgrading with confidence.
Ready to get started with your very own Roadmap and upgrade Ruby and Rails? Send us a Message!