Adam McCrea

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/

2.7K followers62 following218 posts

Render made it SO EASY to connect logs and metrics to a third-party observability tool. Railway, as far as I can tell, doesn't support either. 😞 What am I missing?

Do you know someone new to the Ruby community that wants to attend RubyConf in July? I have an extra ticket to donate. DM me.

Who is doing really great in-app contextual help? I want... - Contextual: If I'm confused about a UI element, the help is right there. - Non-intrusive: When I don't need the help, it doesn't clutter the UI. - Obvious: I don't have to dig for it Not sure how to balance the last two.

Heroku is doubling down on the "sustaining engineering" language and it really bothers me. For most devs, "sustaining engineering" == "maintenance mode" If they don't want customers to think they're in maintenance mode, they need clearer language.

Thoughts on env vars as I spend some time with Fly... I actually like that Fly separates env vars and secrets as distinct concepts. Confused me at first, but it makes sense. Secrets get extra protection, env vars are for config. Good semantic separation.

What I don't like: Env vars require a code change. And for secrets, I actually had to *destroy* my machines after I unset a couple. Heroku might be the only platform where you can change an env var and it just restarts. Just works, and fast. Easy to overlook until you don't have it.

I love how Northflank's pricing page lets you choose the timeframe for the metered pricing. All metered pricing should have this.

I just updated our PaaS Pricing Comparison Calculator: - Added Amazon ECS Fargate - Updated pricing for Railway - Factored CPU time-slicing for Fly shared machines Heroku still stands out as the most expensive, but the others are very competitive!

Idea: The Judoscale Platform Tour... We deploy our 3,000+ RPS Rails app across each of the fully-managed hosting platforms and write up our experience in detail. Things I'd want to cover: - cost - perf - DX/vibes - review apps - setup - env/secrets - scaling What else would you want to see?

Everyone is freaking out the Heroku blog post. Take a breath. There's no way Heroku shuts down anytime soon. The post confirms they won't be making improvements... how is that any different from the last decade? Migrate eventually, but take your time. You literally have YEARS.

If you're thinking of leaving Heroku, here's a simple mapping: If you want the easiest switch, go with Render. If you want Docker and more flexibility, go with Fly. If you want to be a sysadmin, use a VPS (don't need to scale) or Amazon ECS (do need to scale)

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.

Adam McCrea reposted

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.

I love my job

Drew Bragg@drbragg.dev

"We didn’t sponsor RailsConf to try to sell Judoscale or win customers..." And yet this will both sell @judoscale.com and win them customers! They have an AWESOME product and they are present in the community for the sheer love of it. Be more like Judoscale. judoscale.com/blog/rails-o...

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.

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.

🔌 Big news! Custom platform integrations coming soon to Judoscale! Create your own adapter, keep your infrastructure, get all the autoscaling magic. Message me if you want early access. What platform would you connect with?

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.

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.

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...

View full thread

⚠️ 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.

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...

🧸 soft_limit: Traffic to a given machine is deprioritized when the soft limit is met. 🪨 hard_limit: Traffic to a given machine is STOPPED when the hard limit is met. 🔧 concurrency type: How concurrency is measured. Should be "requests" for web servers. NOT THE DEFAULT!

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.

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! 🥂