Adam McCrea
adamlogic.com
Adam McCrea
@adamlogic.com
I spend my days building @judoscale.com to help developers optimize their web hosting.

Follow me to hear about...

💎 Ruby on Rails
🚀 Heroku & PaaS
💸 Independent SaaS

Also on LinkedIn: https://www.linkedin.com/in/adamlogic/
On @searls.bsky.social latest podcast he mentioned "Heroku" and "price", so I can't help but respond. I made the post public since I think it's a really useful pattern.

tldr: Got a high-memory job that pushes you to perf dynos? Isolate it and scale to zero.
November 3, 2025 at 5:26 PM
Nearly 10 years (!!) of autoscaling, some patterns never change: noisy neighbors, too many queues, scaling workers to zero (and saving 💰), and the chaos of downscaling too far.

Stability is boring, repeatable choices.

Here's what we've learned 👉 judoscale.com/blog/autosc...
September 15, 2025 at 8:30 PM
If I was responsible enough to do any sort of ROI calculation, this never would have happened. Instead, we went all-in on RailsConf with 15 homemade videos and a custom local-only app to run our booth. I'd do it all over again.
July 14, 2025 at 5:29 PM
As requested by absolutely no one, a supercut of every kazoo clip we made for #railsconf2025
July 10, 2025 at 3:17 PM
Really hope we don’t get kicked out of the last #railsconf for bringing kazoos 🎶
July 9, 2025 at 2:12 PM
Visit our booth at #railsconf to get your kazoo! Watching us make fools of ourselves is just a bonus.
July 8, 2025 at 4:43 PM
Who’s ready to party? #railsconf #kazoos
July 7, 2025 at 2:11 PM
If it’s not at least a little bit cringe, we didn’t go far enough. #railsconf #kazoos #marketing
July 4, 2025 at 4:42 PM
Marketing technique #77: Humiliate yourself for attention. #railsconf #kazoos
July 3, 2025 at 7:48 PM
Y’all this is only the beginning. Buckle up! #railsconf #kazoos
July 2, 2025 at 2:16 PM
Most autoscalers are reactive—they respond to traffic after it spikes. That’s usually fine… until it’s not.

If your app gets hit with big surges of traffic all at once, even the fastest queue-time autoscaler might not spin up capacity in time to avoid slowdowns or timeouts.
July 1, 2025 at 5:44 PM
One week until #railsconf! The whole Judoscale team will be there with... kazoos?
July 1, 2025 at 12:47 PM
Python task queue pro-tip: Autoscale based on queue latency, not CPU!

Your task queue can back up without CPU spikes, leaving you in the dark.

Check out Jeff's full Celery & RQ comparison here:
judoscale.com/blog/choose...
April 29, 2025 at 4:48 PM
Choosing a Python task queue? Jeff Morhous compared Celery vs RQ:

🧠 Celery: Feature-rich but complex

🚀 RQ: Simple & easy to deploy

Jeff's advice: Most apps do fine with RQ until they need more horsepower. Then consider making the switch to Celery.
April 29, 2025 at 4:48 PM
This behavior is confusing at first, but it's actually super cool once you wrangle it.

And with autoscaling in place, we don't really need to worry about it. New machines are being created with fresh burst balances when needed, spreading the load allowing balances to rebuild.
April 22, 2025 at 4:47 PM
But why do they perform so well at first, only to fall apart after a bit?

It's the bursting!

Shared machines have a "burst balance" where they can use 100% CPU. Once the balance is depleted, CPU is throttled to 1/16.
April 22, 2025 at 4:47 PM
I finally answered my questions about shared CPUs on Fly.io:

- How are they so cheap?
- Why do I need so many of them?
- Why does perf tank after 10 minutes?

Turns out it's well-documented: "shared" machines only get 1/16 of each CPU!

fly.io/docs/machin...
April 22, 2025 at 4:47 PM
⚠️ It's a mistake to ignore these configs. The defaults are NOT what you want.

EXAMPLE: A 4-process, single-threaded web server should use a hard limit of 4 since that's the max concurrent requests. A soft limit of 1-2 would help route requests to less busy machines.
April 21, 2025 at 3:23 PM
Last week I dug into HTTP routing behavior on Fly.io, and it's so cool!

Unlike random routing on platforms like Heroku, Fly can intelligently route requests to machines based on a load. Here are the configs you need to know...
April 21, 2025 at 3:23 PM
If you have more than one worker process sitting idle while the job queue is empty, you're throwing away money.

And for queues with an SLO > 30 seconds, that number drops to zero.
April 17, 2025 at 7:49 PM
"Does Rails 8 truly make platforms a thing of the past? And can small to medium-sized teams really save money by self-hosting?"

Preech it, Jeff! From the Honeybadger blog: www.honeybadger.io/blog/rails-...
April 16, 2025 at 2:15 PM
Feeling very thankful today as Carlos Antonio and I celebrate his one year anniversary at Judoscale. 🥳

Carlos helps me level-up as a developer and feel more relaxed and confident as a founder. And with him Judoscale is a better product than ever.

Thanks, Carlos! 🥂
April 16, 2025 at 12:15 PM
Related: Jon Sully's similar guide as the final part of his 3-part propshaft series

judoscale.com/blog/propsh...
April 9, 2025 at 2:17 PM
I love this deep dive into importmap and propshaft from Radan Skorić

We use both at Judoscale, and even though each of these are simple in isolation, it's crucial to understand how they work together.

radanskoric.com/articles/ra...
April 9, 2025 at 2:17 PM
In this example, 5_sec_worker is always running. The others autoscale down to zero, and scale up based on their SLO.

Each queue is isolated, meaning one queue can't starve another.

Simple, safe, efficient.
April 8, 2025 at 4:46 PM