Running the new code next to the old one is not the win. #TechDebt only drops when you delete the legacy path. Shadow-log both, compare, then flip the flag. go.fastruby.io/sow #LegacyCode #StranglerFig #DesignPatterns
FastRuby.io
@fastruby.io
Productized services by @OmbuLabs.ai to remediate technical debt in #Ruby and #Rails applications. Open source contributors and maintainers.
#SimpleCov 1.0 filters test directories by default when you call start with no arguments, so your coverage number can drop without a single line changing. Recalibrate the baseline before you panic. go.fastruby.io/xfr #Ruby
Parallelizing your RSpec test suite could produce massive performance gains. For example: Nearly 2 hours down to under 5 minutes! Here is the part teams skip: isolating Redis and cache per worker, not just the database. go.fastruby.io/vo1 #RSpec #Ruby #Performance
Skipping versions feels faster until a user hits a bug and nobody can say which jump introduced it. go.fastruby.io/6sc #RailsUpgrade #RubyOnRails
We measured 304 blog pages and 20 came back with content quality problems. The fix that sticks is not the cleanup, it is the CI check that fails the next pull request. go.fastruby.io/4np #RubyOnRails #CI
`load_defaults` is not all or nothing. Flip it to the target version, then override the one setting you are not ready for, like keeping dom_testing_default_html_version on html4. go.fastruby.io/svl #RailsUpgrade
Rails 6.1 stopped trusting raw SQL in order, reorder, and pluck. Need it anyway? Wrap it in `Arel.sql`. Otherwise you get ActiveRecord::UnknownAttributeReference. go.fastruby.io/xtw #RailsSecurity
One service left at DEBUG can dominate an APM bill, because log ingestion is priced by volume, not by host. go.fastruby.io/s43 #Observability
The tell for tech debt is not a broken build. It is estimates quietly stretching and a few tests marked skip so the suite stays green. go.fastruby.io/7hl #TechnicalDebt
We refreshed our Ruby 4.0 write-up with clearer reasoning on the API changes. #ZJIT and #RubyBox are opt-in, but #Ractor drops four methods, so that is the part that can break your code. go.fastruby.io/3me #Ruby
Dual-booting a #Rails upgrade inside #Docker? Move RUBY_VERSION and BUNDLE_GEMFILE into build args, then hide the next-version service behind a Compose profile so both apps never fight over the same port. go.fastruby.io/b5e #RailsUpgrade
On an EOL Rails version there is no patch coming. Not late, not ever. The fix is the upgrade, then the dependency bumps around it: net-imap 0.5.7, rexml 3.4.2. go.fastruby.io/6qv #RailsSecurity
One unmaintained gem can hold a whole Rails upgrade hostage. In one app it was spree_active_shipping pulling in a deprecated dependency, and writing a replacement turned out cheaper than forking it. go.fastruby.io/vrp #TechnicalDebt #Rails
Cannot patch libvips today? Vips.block_untrusted(true) closes the Active Storage file-read hole until you can. Stopgap, not a fix. go.fastruby.io/w0k #RailsSecurity
This week we’re saying thanks to our silver sponsors! That’s @honeybadger.io, @fastruby.io, and @appsignal.com, all back for another year, as well as new kid on the block @serpapi.com! Thank you all for your support! 💛 hanakai.org/blog/2026/09...
Thanking our silver sponsors, and Carolyn Cole
“Reading your code is a larger cost than creating it, so having more organization is a definite benefit.” Week three of our sponsorship drive.
hanakai.org
Our blog has no database and no CMS. Posts are Markdown in the repo we already work in, reviewed in pull requests like any other change. go.fastruby.io/vrh #Jekyll #Ruby
Skip the agent. Most Rails teams have a retrieval problem, and an embedding model plus pgvector fixes more of it than any autonomous system will. go.fastruby.io/xhn #RubyOnRails #AI
Refactor sprints lose to a boring habit: tidy the file you were already touching. Debt-free is not the goal, intentional is. go.fastruby.io/siz #TechnicalDebt #RubyOnRails
A clean audit today is not clean next month. New advisories land, and the same Gemfile.lock starts failing. www.fastruby.io/security-ris...
Config test: could you open source this repo tomorrow without rotating a single credential? www.fastruby.io/twelve-facto...
The option nobody pitches: not one monolith, not microservices, but a few monoliths with clear seams. www.fastruby.io/monolith?utm...
A React + Redux todo list needs three JS files: store, serializer, boilerplate. In Hotwire it collapses to a controller and a view. Turbo + Stimulus ship around 35KB gzipped, React + React-DOM alone runs 45KB. go.fastruby.io/ff8 #Hotwire #RubyOnRails
Does your #Rails app allocate objects? Then you should upgrade Ruby! Allocations are much faster starting with Ruby 4.0. Aaron Patterson (@tenderlove) explains why in this short 👇 www.youtube.com/shorts/VSqC2...
Ruby object allocation just got faster
Aaron Patterson (@tenderlove) on Ruby 4.0 allocation performance
youtube.com
GitHub's Ubuntu runners ship with MySQL preinstalled, so if your CI hangs, check whether sudo service mysql start is fighting your containerized MySQL on 127.0.0.1:3306. go.fastruby.io/jyb #GitHubActions #MySQL #Rails
Rails still doesn't automatically balance reads across database replicas, you have to route that yourself once a single database becomes a bottleneck. go.fastruby.io/1oh #Rails #Scalability
When a single Postgres database becomes your bottleneck, Rails gives you three ways out: read replicas, model level sharding, and full horizontal partitioning by category. go.fastruby.io/sy6 #Rails #ActiveRecord
Rails 7 quietly removed every deprecated method from ActiveModel::Error, the endpoint of a long evolution from plain hashes to queryable error objects. go.fastruby.io/xss #Rails #RubyOnRails
Hanami 2.2.1 needs Ruby 3.1+ (3.4 recommended). We keep a compatibility table so you're not guessing before an upgrade. go.fastruby.io/rdq #Hanami #Ruby
Multi-stage Dockerfiles keep your compilers out of production, so fewer packages means fewer CVEs to patch. go.fastruby.io/s9a #Docker #DevOps
Dual-booting Ruby means testing two versions in the same CI matrix with one flag in your Gemfile, no second pipeline needed. go.fastruby.io/tf8 #RubyUpgrade #CI