<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://whittakertech.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://whittakertech.com/" rel="alternate" type="text/html" /><updated>2026-10-01T22:20:11-06:00</updated><id>https://whittakertech.com/feed.xml</id><title type="html">WhittakerTech</title><subtitle>Ruby and Rails tools, engineering writing, and the work behind WhittakerTech.</subtitle><author><name>Lee Whittaker</name><email>lee@whittakertech.com</email></author><entry><title type="html">Poly 1.3.0: Lowering the Rails Floor to 6.1 Without Changing the Library</title><link href="https://whittakertech.com/blog/poly-1-3-0-rails-6-1-support/" rel="alternate" type="text/html" title="Poly 1.3.0: Lowering the Rails Floor to 6.1 Without Changing the Library" /><published>2026-10-01T07:00:00-06:00</published><updated>2026-10-01T07:00:00-06:00</updated><id>https://whittakertech.com/blog/poly-1-3-0-rails-6-1-support</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Release Notes" /><category term="Poly" /><category term="Rails" /><category term="ActiveRecord" /><category term="Rails 6.1" /><category term="Gemspec" /><category term="Release" /><category term="Compatibility" /><category term="Continuous integration" /><summary type="html"><![CDATA[Poly 1.3.0 lowers the supported ActiveRecord and ActiveSupport floor from 7.1 to 6.1. No library code changed: the old floor was a policy choice, not a technical constraint. Here is what moved, what did not, and how it is tested.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Midas 0.5.0: Lowering the Rails Floor to 6.1 Without Loosening the Ledger</title><link href="https://whittakertech.com/blog/midas-0-5-0-rails-6-1-support/" rel="alternate" type="text/html" title="Midas 0.5.0: Lowering the Rails Floor to 6.1 Without Loosening the Ledger" /><published>2026-10-01T06:00:00-06:00</published><updated>2026-10-01T06:00:00-06:00</updated><id>https://whittakertech.com/blog/midas-0-5-0-rails-6-1-support</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Software Architecture" /><category term="Midas" /><category term="Rails" /><category term="Ruby gems" /><category term="ActiveRecord" /><category term="Enums" /><category term="Migrations" /><category term="Continuous integration" /><summary type="html"><![CDATA[Midas 0.5.0 lowers its supported Rails floor from 7.1.5.2 to 6.1. Here is what changed in the Poly dependency, the version-conditional enums, the bundled migrations, and the CI matrix.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Polymorphic Joins in Rails: Automatic Query Optimization Without Raw SQL</title><link href="https://whittakertech.com/blog/polymorphic-joins/" rel="alternate" type="text/html" title="Polymorphic Joins in Rails: Automatic Query Optimization Without Raw SQL" /><published>2026-01-21T08:00:00-07:00</published><updated>2026-01-21T08:00:00-07:00</updated><id>https://whittakertech.com/blog/polymorphic-joins</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Software Architecture" /><category term="Rails" /><category term="Polymorphic associations" /><category term="Arel" /><category term="ActiveRecord" /><category term="Security" /><category term="Brakeman" /><category term="Query optimization" /><category term="Architecture" /><category term="Technical debt" /><summary type="html"><![CDATA[Rails avoids polymorphic joins by design—but real systems often have deterministic cases. Here’s how reflection, Arel, and explicit opt-in can make polymorphic joins safe, auditable, and production-ready without injecting SQL.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://media.whittakertech.com/whittakertech/blog/processed/bridge-in-fog/v1/bridge-in-fog-og.jpg" /><media:content medium="image" url="https://media.whittakertech.com/whittakertech/blog/processed/bridge-in-fog/v1/bridge-in-fog-og.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">From 9 Years Solo to Production-Ready in 4 Days: Scaling Architecture Through Team Leadership</title><link href="https://whittakertech.com/blog/solo-to-team-sprint-velocity/" rel="alternate" type="text/html" title="From 9 Years Solo to Production-Ready in 4 Days: Scaling Architecture Through Team Leadership" /><published>2025-11-26T08:00:00-07:00</published><updated>2025-11-26T08:00:00-07:00</updated><id>https://whittakertech.com/blog/solo-to-team-sprint-velocity</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Software Development" /><category term="Technical Leadership" /><category term="Sprint planning" /><category term="Team leadership" /><category term="Architecture" /><category term="CaseFlow" /><category term="VA systems" /><category term="Technical leadership" /><category term="Solo to team" /><category term="Velocity optimization" /><category term="4+1 Architecture" /><category term="Code review" /><category term="Agile methodology" /><category term="Government contracting" /><category term="Full-stack development" /><category term="Knowledge transfer" /><category term="Delegation" /><summary type="html"><![CDATA[How 9 years of solo full-stack experience translated into 2.5x team velocity through systemic architectural prep. First sprint planning delivered production code in 4 days for VA's CaseFlow system.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Processing 1,361 Images in 2 Minutes: How We Transformed a Rails Bottleneck into an Asynchronous Pipeline</title><link href="https://whittakertech.com/blog/processing-1361-images-in-2-minutes/" rel="alternate" type="text/html" title="Processing 1,361 Images in 2 Minutes: How We Transformed a Rails Bottleneck into an Asynchronous Pipeline" /><published>2025-11-25T08:00:00-07:00</published><updated>2025-11-25T08:00:00-07:00</updated><id>https://whittakertech.com/blog/processing-1361-images-in-2-minutes</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Performance Engineering" /><category term="Async Architecture" /><category term="Rails" /><category term="Paperclip" /><category term="AWS S3" /><category term="Sidekiq" /><category term="Performance" /><category term="Architecture" /><category term="Image Processing" /><category term="Concurrency" /><category term="Async Pipelines" /><category term="DevOps" /><category term="Heroku" /><category term="Optimization" /><summary type="html"><![CDATA[How we rebuilt a legacy synchronous Paperclip + S3 image pipeline into a fully asynchronous architecture—cutting processing time from 11 hours to 2 minutes without scaling dynos or increasing infrastructure costs.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://media.whittakertech.com/whittakertech/blog/processed/processing-photos/v1/processing-photos-og.jpg" /><media:content medium="image" url="https://media.whittakertech.com/whittakertech/blog/processed/processing-photos/v1/processing-photos-og.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rails Docker Migration: Complete Configuration Reference</title><link href="https://whittakertech.com/blog/rails-docker-configuration-reference/" rel="alternate" type="text/html" title="Rails Docker Migration: Complete Configuration Reference" /><published>2025-07-04T09:00:00-06:00</published><updated>2025-07-04T09:00:00-06:00</updated><id>https://whittakertech.com/blog/rails-docker-configuration-reference</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="DevOps" /><category term="Reference" /><category term="Rails Docker reference" /><category term="Configuration templates" /><category term="Docker troubleshooting" /><category term="Production deployment" /><category term="Complete guide" /><category term="Reference documentation" /><category term="Rails containerization" /><category term="Docker best practices" /><category term="Configuration examples" /><summary type="html"><![CDATA[Complete Rails Docker configuration reference with all Dockerfiles, GitHub Actions, Makefiles, and troubleshooting guides. Ready-to-use templates for production deployment.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Production Docker Deployment: Heroku Container Registry Guide</title><link href="https://whittakertech.com/blog/heroku-container-registry-deployment/" rel="alternate" type="text/html" title="Production Docker Deployment: Heroku Container Registry Guide" /><published>2025-06-27T09:00:00-06:00</published><updated>2025-06-27T09:00:00-06:00</updated><id>https://whittakertech.com/blog/heroku-container-registry-deployment</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="DevOps" /><category term="Deployment" /><category term="Heroku container registry" /><category term="Docker deployment" /><category term="heroku.yml" /><category term="GitHub Actions" /><category term="CI/CD pipeline" /><category term="Container monitoring" /><category term="Rails production" /><category term="Performance monitoring" /><category term="Memory optimization" /><category term="Production deployment" /><summary type="html"><![CDATA[Complete guide to deploying Rails Docker containers on Heroku. Includes heroku.yml config, GitHub Actions CI/CD, monitoring setup, and performance optimization results.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Docker System Dependencies: Fighting libv8-dev and Node.js Conflicts</title><link href="https://whittakertech.com/blog/rails-docker-libv8-node-conflicts/" rel="alternate" type="text/html" title="Docker System Dependencies: Fighting libv8-dev and Node.js Conflicts" /><published>2025-06-20T09:00:00-06:00</published><updated>2025-06-20T09:00:00-06:00</updated><id>https://whittakertech.com/blog/rails-docker-libv8-node-conflicts</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="DevOps" /><category term="Docker" /><category term="libv8-dev" /><category term="Node.js conflicts" /><category term="Docker dependencies" /><category term="Rails Docker" /><category term="System packages" /><category term="sassc-rails" /><category term="mini_racer" /><category term="libv8-node" /><category term="Package conflicts" /><category term="Debian packages" /><summary type="html"><![CDATA[Solve Rails Docker libv8-dev and Node.js 20 conflicts. Learn alternative approaches with sassc-rails, mini_racer, and libv8-node for stable builds.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Solving Rails Asset Pipeline Conflicts in Docker: Propshaft vs Sprockets</title><link href="https://whittakertech.com/blog/rails-docker-asset-pipeline-conflicts/" rel="alternate" type="text/html" title="Solving Rails Asset Pipeline Conflicts in Docker: Propshaft vs Sprockets" /><published>2025-06-13T09:00:00-06:00</published><updated>2025-06-13T09:00:00-06:00</updated><id>https://whittakertech.com/blog/rails-docker-asset-pipeline-conflicts</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="DevOps" /><category term="Asset Pipeline" /><category term="Rails asset pipeline" /><category term="Propshaft" /><category term="Sprockets" /><category term="Docker builds" /><category term="package.json" /><category term="dependencies vs devDependencies" /><category term="SASS compilation" /><category term="JavaScript bundling" /><category term="Asset precompilation" /><category term="Rails 7 assets" /><summary type="html"><![CDATA[Fix Rails Docker asset pipeline conflicts between Propshaft and Sprockets. Learn the package.json dependencies fix that solved our build failures and improved performance.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rails Docker Architecture: Multi-Stage Builds and Base Images</title><link href="https://whittakertech.com/blog/rails-docker-multi-stage-builds/" rel="alternate" type="text/html" title="Rails Docker Architecture: Multi-Stage Builds and Base Images" /><published>2025-06-06T09:00:00-06:00</published><updated>2025-06-06T09:00:00-06:00</updated><id>https://whittakertech.com/blog/rails-docker-multi-stage-builds</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="DevOps" /><category term="Docker" /><category term="Rails Docker" /><category term="Multi-stage builds" /><category term="Docker architecture" /><category term="Base images" /><category term="Development environment" /><category term="Docker Compose" /><category term="PostgreSQL Docker" /><category term="Container networking" /><category term="Rails development" /><category term="Docker Hub" /><summary type="html"><![CDATA[Learn how to structure Rails Docker builds with multi-stage architecture, base images, and development/production parity. Complete examples with PostgreSQL integration.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Why We Migrated from Heroku Buildpacks to Docker: Performance &amp;amp; Cost Analysis</title><link href="https://whittakertech.com/blog/why-migrate-heroku-buildpacks-docker/" rel="alternate" type="text/html" title="Why We Migrated from Heroku Buildpacks to Docker: Performance &amp;amp; Cost Analysis" /><published>2025-05-30T09:00:00-06:00</published><updated>2025-05-30T09:00:00-06:00</updated><id>https://whittakertech.com/blog/why-migrate-heroku-buildpacks-docker</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="DevOps" /><category term="Performance Optimization" /><category term="Heroku Docker" /><category term="Rails deployment" /><category term="Performance optimization" /><category term="Memory usage" /><category term="Container migration" /><category term="DevOps strategy" /><category term="Cost optimization" /><category term="Heroku container registry" /><category term="Docker benefits" /><category term="Rails performance" /><summary type="html"><![CDATA[Discover why we migrated our Rails app from Heroku buildpacks to Docker, achieving 60% memory reduction and improved deployment reliability. Complete cost-benefit analysis included.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Database Concurrency Tests: Fix PostgreSQL Race Conditions</title><link href="https://whittakertech.com/blog/when-database-concurrency-tests-lie/" rel="alternate" type="text/html" title="Database Concurrency Tests: Fix PostgreSQL Race Conditions" /><published>2025-05-23T10:00:00-06:00</published><updated>2025-05-23T10:00:00-06:00</updated><id>https://whittakertech.com/blog/when-database-concurrency-tests-lie</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Software Development" /><category term="Database Architecture" /><category term="Database concurrency" /><category term="PostgreSQL locking" /><category term="Race conditions" /><category term="RSpec testing" /><category term="FOR UPDATE SKIP LOCKED" /><category term="Thread synchronization" /><category term="Test reliability" /><category term="ActiveRecord" /><category term="Database transactions" /><category term="Production debugging" /><category term="Critical systems" /><category term="Queue management" /><category term="Polymorphic associations" /><category term="CI/CD pipeline" /><category term="Test-driven development" /><summary type="html"><![CDATA[Debug PostgreSQL concurrency issues where RSpec tests pass but database logic fails. Real case study with FOR UPDATE SKIP LOCKED and thread synchronization solutions.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Strategic Code Modification: Custom Shopify Requirements</title><link href="https://whittakertech.com/blog/strategic-code-modification/" rel="alternate" type="text/html" title="Strategic Code Modification: Custom Shopify Requirements" /><published>2025-05-22T13:00:00-06:00</published><updated>2025-05-22T13:00:00-06:00</updated><id>https://whittakertech.com/blog/strategic-code-modification</id><author><name>Lee Whittaker</name></author><category term="Software Development" /><category term="E-commerce" /><category term="Code Architecture" /><category term="Shopify development" /><category term="Custom theme modification" /><category term="Code maintainability" /><category term="Conditional logic" /><category term="E-commerce integration" /><category term="Prescription fulfillment" /><category term="Legacy code preservation" /><category term="Technical debt management" /><category term="Liquid templating" /><category term="Strategic refactoring" /><summary type="html"><![CDATA[Learn elegant code modification techniques through a real Shopify case study. Handle prescription vs regular products with conditional logic while preserving functionality.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rails Encoding Errors: ASCII-8BIT to UTF-8 Solutions Guide</title><link href="https://whittakertech.com/blog/solving-rails-encoding-errors/" rel="alternate" type="text/html" title="Rails Encoding Errors: ASCII-8BIT to UTF-8 Solutions Guide" /><published>2025-04-13T12:00:00-06:00</published><updated>2025-04-13T12:00:00-06:00</updated><id>https://whittakertech.com/blog/solving-rails-encoding-errors</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Software Development" /><category term="International Development" /><category term="Character encoding" /><category term="UTF-8" /><category term="ASCII encoding" /><category term="International users" /><category term="Rails deployment" /><category term="Database encoding" /><category term="Legacy data migration" /><category term="Security vulnerabilities" /><category term="Performance optimization" /><category term="Global market expansion" /><category term="Development workflow" /><category term="Error handling" /><summary type="html"><![CDATA[Fix persistent Rails encoding errors blocking international user migrations. Step-by-step solutions for ASCII-8BIT to UTF-8 conversion with real performance gains.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Ruby Rails Upgrade Guide: From Legacy 6.1 to Modern 7.1</title><link href="https://whittakertech.com/blog/navigating-ruby-and-rails-upgrades/" rel="alternate" type="text/html" title="Ruby Rails Upgrade Guide: From Legacy 6.1 to Modern 7.1" /><published>2025-03-04T14:00:00-07:00</published><updated>2025-03-04T14:00:00-07:00</updated><id>https://whittakertech.com/blog/navigating-ruby-and-rails-upgrades</id><author><name>Lee Whittaker</name></author><category term="Ruby on Rails" /><category term="Software Development" /><category term="Ruby upgrade" /><category term="Rails migration" /><category term="Legacy code refactoring" /><category term="Technical debt" /><category term="Ruby 3.2.7" /><category term="Rails 7.1" /><category term="Paperclip to Active Storage" /><category term="Database migrations" /><category term="Software maintenance" /><category term="Ruby keyword arguments" /><summary type="html"><![CDATA[Complete guide to upgrading Ruby 3.0.7 to 3.2.7 and Rails 6.1 to 7.1. Real case study achieving 99.15% test success while eliminating security risks and technical debt.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" /><media:content medium="image" url="https://whittakertech.com/assets/images/og/whittakertech-fallback-v1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>