Heartwood Software
Nov 7, 2026

Rails 8.0 security support ended. Only Rails 8.1 receives security fixes now; 8.0, 7.2 and everything older get none.

See the dates

Ruby on Rails modernization

Rails upgrades for apps you can't afford to break.

We bring long-lived Rails applications up to date: framework and Ruby upgrades, security backlogs, legacy front ends, and the test coverage that makes each change safe. Senior engineers only.

One ring per Rails version, 5.1 at the core.

Case study

A 21-application HR SaaS platform

Hundreds of client organizations, a 12-gem internal library, and two engineers. Our principal led the fleet from end-of-life versions to current Rails in under six months, without a rewrite.

21applications and 12 internal gems upgraded
4,600CoffeeScript and Hamlc files converted to ES6
52%→89%test coverage across the fleet, before the risky work
500+high and critical security alerts resolved

rails 5.1 → 5.2 → 6.0 (zeitwerk) → 6.1 → 7.0 → 7.1 / 7.2  ·  ruby 2.4–2.6 → 3.x (keyword args) → 3.2 / 3.3  ·  elasticsearch 2.x → 8  ·  80+ repos → ~40

Services

Fixed scopes, fixed prices

Every engagement starts with an assessment, so the quote for the real work rests on your codebase rather than a guess.

$1,500 · 5 business days

Upgrade assessment

  • Version path for Rails and Ruby, step by step
  • Gem compatibility and the blockers in each step
  • Deprecation inventory and test coverage gaps
  • A risk register and a fixed quote for the upgrade

Fixed quote after assessment

Rails and Ruby upgrades

  • One minor version at a time, dual-booted where it helps
  • Zeitwerk, keyword arguments, Webpacker and Sprockets exits
  • Every step deployable and reversible
  • Handover notes your team can repeat next time

Fixed quote after assessment

Legacy rescue

  • Dependabot and security alert backlogs, cleared and kept clear
  • CoffeeScript, Hamlc and asset pipeline migrations
  • Sinatra and Padrino services consolidated into Rails
  • Elasticsearch major-version upgrades with a planned reindex

Fixed quote after assessment

Leave Heroku

  • Move to Render, Kamal on your own servers, or AWS, with costs compared first
  • Staged cutover: app servers and workers first, database and DNS last
  • Database moved under a short, scheduled write freeze
  • We run our own Rails production on Render

From $1,500

AI for Rails teams

  • Claude Code set up for your codebase, with custom agent skills
  • AI features in your Rails app: extraction, classification, review queues
  • Cost caps, human review and tests from the first commit

Approach

The order is the method

Big upgrades fail when the risky change comes before the safety net. We sequence the work so each step makes the next one cheaper.

step 1

Coverage before change

We raise test coverage where the upgrade will touch, before touching it. On the case study that meant 52% to 89% first.

step 2

One version at a time

Each minor version ships on its own, with deprecations fixed while they are still warnings, so a failure points at one cause.

step 3

Machines convert, people verify

Agent tooling does the repetitive conversion. A separate audit pass, never the same one that generated the change, checks the output.

step 4

Fix the class, not the instance

When a defect turns up, we look for every other place it can occur and fix them together, so it stays fixed across the fleet.

Open source

The method is public

Rails Modernization Skills is the toolkit behind the case study: eight Claude Code skills for coverage work, Rails and Ruby upgrades, failure triage, security remediation, asset conversion, index audits and an independent review pass.

View on GitHub
# rails-modernization-skills
test-coverage-writer       coverage where the change lands
rails-upgrader             one minor version at a time
ruby-upgrader              keyword args and the gems
upgrade-failure-triage     failures sorted by root cause
dependency-security-fixer  clear the alert backlog
legacy-asset-converter     CoffeeScript and Hamlc out
conversion-auditor         a separate review pass
index-auditor              find the missing indexes

Who you work with

Senior, small, and accountable

Every engagement is led by a principal engineer with twelve years in Ruby on Rails, who writes the code, owns the deploys, and answers for the result. Larger projects add senior Rails specialists.

We work with US teams on Eastern time, Monday to Friday, and reply within one business day.

Based in Western New York · remote across the US

Prefer email?