Skip to main content
Test Double company logo
Services
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say Hello
Test Double logo
Menu
Services
BackGrid of dots icon
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
Cycle icon
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say hello
Angi company logo

Case Study

Upgrading a super busy Rails app while reducing tech debt

Secure, modern, and set up for future success

The Client

Angi
[
angi.com
]

Description

Angi is a household name for good reason, and the millions of individuals seeking home improvement, repair, and household services rely on the Handybook app. Angi needed to upgrade the large and super busy app form Rails 4.1 and Ruby 2.3 to the latest versions of Ruby and Rails.

The upgrade plan focused in on minimizing work in progress, and incremental everything approach, data-driven decision making, and over communicating.

And that Rails upgrade manifesto led to both a successful Ruby and Rails upgrade while also reducing overall tech debt.

Location & Size

Denver, CO

3,000+ employees

Paint can and paint brushes

Services Provided

Upgrade Rails

Impact Areas

  • Tech debt
  • Test suites
  • Security

The Mission

(we chose to accept it)

Angi is experiencing accelerated growth. Keeping application dependencies up-to-date is always important, but it's absolutely essential in today's developer market. Attracting and retaining top talent is difficult already; add an outdated stack into the mix, and it's nearly impossible. Security & compliance risks can be mitigated by patching old dependencies, but there is no shortcut to improving developer happiness. With this in mind, Angi wanted a partner to establish a process by which major dependency upgrades can be performed safely & continuously.

Need help with your project?
Get in touch with our team

The Fix

Angi's services are in high demand, and Handybook is an essential application. Featuring deep integration with third-party services and 40+ microservices, Handybook has a lot of moving parts. Aggressive caching, database sharding, and horizontal scaling are all important factors allowing the application to meet demand.

Hint (UpgradeRails.com's original owner) defined an upgrade manifesto with four focus areas:

Minimize work in progress

Upgrading Rails in a large, very active codebase is a risky business. Falling behind is easy, and if you're not careful, you may find yourself in merge hell. Practically speaking, this means no long-running branches. Instead, all changes must be PR'd to the main branch and be merged swiftly.

Incremental everything

No task is too small to deserve asking the question, "how can we break this up?" We minimize WIP and reduce business risk by taking many small, incremental steps. Put in practice, this means changes for compatibility are made in the smallest possible units, and when deploying changes into production, we perform a canary deployment, starting at 1% traffic and ramping up slowly.

Use data to drive decision making

Sometimes it isn’t possible to determine the correct solution for a given challenge by static analysis, even with excellent git history. In these situations, it's tempting to guess. But don’t do it; it's a trap! Instead, use dynamic analysis (often in production). Gather more information, and make decisions based on fact, not conjecture.

Over-communicate

We'll be making significant sweeping changes (incrementally) to the entire codebase. If something goes wrong and the symptom is outside our purview, we want to know about it. By continuously communicating project status, every member of the organization becomes a secret agent, reporting helpful information, resulting in a smoother upgrade.

This led to a defined upgrade plan:

  1. Dual Boot: In each stage of the upgrade (Rails 4.1 -> 4.2, 4.2 -> 5.0, and so on), use Shopify's excellent bootboot gem to dual-boot with two separate sets of dependencies
  2. Changes for compatibility: obtain green CI results when the suite is run against both sets of dependencies while compatibility changes target to main branch
  3. Compatibility on all branches: once green CI is achieved, lock it in!
  4. Smoke test: QA in a production-like environment to ensure the upgraded application is performant
  5. Canary development: incremental roll out of the upgrade application alongside the current application
  6. Bake at 100%, strip & repeat: monitor then commit to the upgrade by copying over and cleaning up

CONSULTANTS

2

Tech & Techniques

  • Dual-booting
  • Incremental upgrades
  • Effective communication

The Results

We partnered with Angi in their effort to improve developer experience & productivity by investing in the platform. Upgrading a large and busy Rails application is tedious work and it's easy to introduce new tech debt that compounds making future upgrades even more difficult.

By following a well-defined process backed by the upgrade manifesto, we achieved an overall reduction in technical debt, leading to a number of positive outcomes.

Download project PDF
Contact our team
Icon of 3 hands holding a cube

Complete partial Strong Parameters migration

Icon of a ball of yarn

Reduce tech debt in massive, high traffic app

Icon of a magnifying glass looking at a wall of blocks

Carefully adjust complex Ruby objects in persistent data stores

Icon of a reload symbol

Migrate from octopus to octoball while reducing edge-case bugs & unexpected behavior

Testimonial
Rails Upgrades

I for one like software that is not EOL and still receives security updates. Nice work!

Chris Sansone, Director of Information Security and Risk
Angi
Testimonial
Rails Upgrades

Handybook is pretty heckin modern if you ask me.

Thomas Johnell, VP of Engineering
Angi
Testimonial
Rails Upgrades

I think I speak for every long-tenured Angi person when I say... WOW!

David Olsen, Director of Infrastructure Engineering
Angi

Project Team

No items found.

Related Insights & Projects

🔗
Gusto
🔗
Why Rails upgrades are so important
🔗
Why it’s worth outsourcing your Rails upgrades
🔗
Zero downtime Rails upgrades
🔗
Stop ignoring your Rails (and Ruby) deprecations!
Black and white art photo of a well-used remote workspace

Software consulting services

Like what we have to say about building great software and great teams?

Discover what we do
Test Double Executive Leadership Team

What’s a Test Double?

Want to know more about our point of view on what makes for great software?

Get to know us
A keyboard, glasses, test double logo and rubber duckies.
Two test double employees wearing test double t-shirts embrace and smile at the camera.
Two people embrace and smile at the camera at a group event.
A person laughs at the camera in a group setting with a group of people.
Test double rubber duckie in a pool.
A keyboard, glasses, test double logo and rubber duckies.
Two test double employees wearing test double t-shirts embrace and smile at the camera.
Two people embrace and smile at the camera at a group event.
A person laughs at the camera in a group setting with a group of people.
Test double rubber duckie in a pool.
A keyboard, glasses, test double logo and rubber duckies.
Two test double employees wearing test double t-shirts embrace and smile at the camera.
Two people embrace and smile at the camera at a group event.
A person laughs at the camera in a group setting with a group of people.
Test double rubber duckie in a pool.

Let’s collaborate

We’re the team on a mission to improve how the world builds software.

Let’s talk about how to tackle hard software investment problems across the entire product life cycle.

Get started
Calendar icon

Chat with our team

Test Double Office Hours

Curious about what we're like to work with? We offer 30-minute turbocharged office hours with no strings attached—just pure, unadulterated brainstorm power.

Learn more
Test Double company logo
Improving the way the world builds software.
What we do
Services OverviewSoftware DeliveryProduct ManagementLegacy ModernizationDevOpsUpgrade RailsTechnical RecruitmentTechnical Assessments
Who WE ARE
About UsCulture & CareersGreat CausesEDIOur TeamContact UsNews & AwardsN.E.A.T.
Resources
Case StudiesAll InsightsLeadership InsightsDeveloper InsightsProduct InsightsPairing & Office Hours
NEWSLETTER
Sign up hear about our latest innovations.
Your email has been added!
Oops! Something went wrong while submitting the form.
Standard Ruby badge
614.349.4279hello@testdouble.com
Privacy Policy
© 2020 Test Double. All Rights Reserved.