Sign in

nateberkopec.bsky.social

@nateberkopec.bsky.social
1.7K followers 63 following 670 posts
PostsRepliesMedia
nateberkopec.bsky.social @nateberkopec.bsky.social · 27/09/2026
That's real
010
Reposted by @nateberkopec.bsky.social
Aaron Patterson @tenderlove.dev · 24/09/2026
I think everyone should visit the Peace Museum in Hiroshima at least once in their life
3363
nateberkopec.bsky.social @nateberkopec.bsky.social · 12/09/2026
narrator: neither would, in fact, happen in 2022
021
nateberkopec.bsky.social @nateberkopec.bsky.social · 10/09/2026
I think what Zohran showed was that, if you have a political goal, the first thing is you have to be _effective_ and provide services _effectively_ through building capacity. currently, lefty OSS communities are extremely _ineffective_ in a way that the Omarchy steamroller is not.
040
nateberkopec.bsky.social @nateberkopec.bsky.social · 09/09/2026
NixOS' community is so incredibly disorganized and full of infighting and the DHH/omarchy steamroller is so sufficiently funded and enthusiastic that they could conceivably just hard fork it and in 5 years the omarchy fork of nix just "is" nix as we understand it
330
Reposted by @nateberkopec.bsky.social
John Nunemaker @johnnunemaker.com · 06/09/2026
Another great reason to have a read replica AI can query is you can make informed data-driven decisions. And then share with the team via github issue comment or whatever. This image is an example of analyzing image upload dimensions to optimize for rendering.
Text-heavy image discussing production image size research and statistics.
141
nateberkopec.bsky.social @nateberkopec.bsky.social · 27/08/2026
lemur guy agrees with my testing take, now I know I'm on the right track!
100
nateberkopec.bsky.social @nateberkopec.bsky.social · 27/08/2026
LLM driven dev has completely changed my opinions on BDD
260
Reposted by @nateberkopec.bsky.social
Dan Luu @danluu.com · 17/08/2026
The benchmarkpocalypse: danluu.com/benchpocalyp...
There's been a lot of talk about the vulnpocalypse, to which I don't have much to add because I'm not a security person, but I haven't seen much discussion on the closely related (and to be fair, less serious issue), the benchmarkpocalypse.

While it's become easier than ever to make serious performance gains, it's also become easier than ever to reward hack a benchmark and make fake performance gains. The former is probably happening quietly across many different companies, but the latter is something I see at least once a week nowadays. Someone will claim they optimized X and got some huge performance improvement over existing software but, when you look at it, what they did was make some optimization that improves benchmark performance without actually improving real-world performance. This is often some kind of "we re-wrote X in Rust"1 project or a new startup that's looking to either fundraise or sell something, but it happens on other kinds of projects as well2.

Rather than point to someone's bad claim, I'll point to FRE, this regex engine I had an agent build, which I could claim is the world's fastest regex engine because it beats the Rust regex crate at the fairly comprehensive rebar regex benchmark suite. But this was created by putting an agent in a loop for a month with instructions to not overfit to the benchmark but no real supervision. For the most part, getting an LLM to give you a good benchmark score is fairly easy, and this case was no different; it took a couple weaks to roughly match Rust regex crate performance and then another couple weeks to get to 1.4x faster3 on rebar. But, agents are wont to reward hack and ovefit unless you put serious guardrails in place to avoid that, which I didn't do in this case as an experiment.

To check for overfitting, I somewhat arbitrarily4 used the ripgrep benchmark corpus as a benchmark a holdout and instead of being 1.4x faster it was 10x slower on cases where the benchmark didn't take forever due to an alg…
5619
Reposted by @nateberkopec.bsky.social
hailey @hailey.at · 18/08/2026
say what you want about ai but pre ai i wasn’t able to do database performance work while sitting on my balcony at 3pm in the sun drinking a claw
171715
nateberkopec.bsky.social @nateberkopec.bsky.social · 09/06/2026
was the mention of Stripe in the announcement blog post your work?
000
nateberkopec.bsky.social @nateberkopec.bsky.social · 09/06/2026
can't believe they've done this to you
100
nateberkopec.bsky.social @nateberkopec.bsky.social · 09/04/2026
mfw I live in a real civilized country
010
nateberkopec.bsky.social @nateberkopec.bsky.social · 09/04/2026
Puma 8.0 "Into The Arena" has been released! 1. Framework/lib authors can move threads into a special "high IO" pool 2. single/cluster DSL hooks for easier config 3. API for adjusting threadpool size at runtime (who would want to that? stay tuned...)
292
nateberkopec.bsky.social @nateberkopec.bsky.social · 03/04/2026
Re: Axios - so I guess if you're an OSS maintainer, your threat model is now: "I may be targeted by a state-sponsored hacking group at any time."
161
nateberkopec.bsky.social @nateberkopec.bsky.social · 26/03/2026
It also ignored the mathematical reality of queueing theory: queue time decreases proportional to ~1/n, where n is the number of processes pulling from the queue. Increase that ratio! Load balancers like ALB cannot be as efficient as ~32+ processes `accept`ing the same socket
000
nateberkopec.bsky.social @nateberkopec.bsky.social · 26/03/2026
1 proc per container was always a misunderstanding of the original principle, which was that each container should only do 1 thing. A preforking server still _does one thing_, it's just parallelizing across processes rather than threads or fibers.
120
nateberkopec.bsky.social @nateberkopec.bsky.social · 26/03/2026
When we're done here we're probably gonna save tens of thousands per month purely based on a config change. With preforking server designs (puma, unicorn, pitchfork), you want to run between 4 and 64 processes per container, as big as you can handle but still autoscale sensibly
120
nateberkopec.bsky.social @nateberkopec.bsky.social · 26/03/2026
1 process per pod was a LIE that you were sold by BIG SRE and people who don't understand the oldhead technology of PRE-FORKING SERVERS. We went from 1 Puma proc per pod to 4 and HALVED RESPONSE TIMES and dropped queue time to ZERO, for the same CPU/memory alloc.
1133
nateberkopec.bsky.social @nateberkopec.bsky.social · 25/03/2026
Has anyone applied an autoresearch loop (successfully or not) to a Ruby project outside of Shopify yet? I would like to cover it in my RubyKaigi talk.
011
nateberkopec.bsky.social @nateberkopec.bsky.social · 24/03/2026
Why restrict to MacOS? I've been thinking that if I'm going to sandbox, might as well go full remote (or at least remote-capable).
130
nateberkopec.bsky.social @nateberkopec.bsky.social · 22/03/2026
@simonwillison.net maybe you're used to this level of notability now, but I noticed Jensen Huang explicitly referencing the Lethal Trifecta a few times at GDC, although I noticed he said "it's fine as long as you only have two [legs of the trifecta]"
180
nateberkopec.bsky.social @nateberkopec.bsky.social · 21/03/2026
I know you've worked mostly at big shops where threading isn't common, but in my client base over 10 years, so we're talking... around 100 apps or more? It's >80% sidekiq. I speak to my audience.
101
nateberkopec.bsky.social @nateberkopec.bsky.social · 21/03/2026
I don't think so. LLMs already are good enough at understanding the semantic meaning of an integration test.
100
nateberkopec.bsky.social @nateberkopec.bsky.social · 20/03/2026
Yeah most people don't have access to enterprise. If you can fork of course you should fork 👍
110
nateberkopec.bsky.social @nateberkopec.bsky.social · 19/03/2026
The #1 most important performance work in almost any web app is converting full navigations into SPA/route changes/Turbo Drive clicks. You are converting a ~4 second experience into a 400ms experience every single time. Nothing else comes close.
050
nateberkopec.bsky.social @nateberkopec.bsky.social · 18/03/2026
Super common mistake I see in Ruby setups: don't allocate more than 1 CPU core to background job containers. You're only running one process in there (usually) so there's no reason to allocate > 1 core.
170
nateberkopec.bsky.social @nateberkopec.bsky.social · 17/03/2026
After ~9 months of experimentation (synthetic and in prod), I can say definitively that MALLOC_CONF has no measurable effect on any Ruby workload that I've seen. Don't bother.
030
nateberkopec.bsky.social @nateberkopec.bsky.social · 16/03/2026
That idea came from my book! nateberk.gumroad.com/l/sidekiqinp...
nateberk.gumroad.com
Sidekiq in Practice
Are you using Sidekiq to process your background jobs, but struggling with it as your application scales? Sidekiq can scale to 5,000 jobs per second with just a little effort and knowledge: in Sidekiq...
111
nateberkopec.bsky.social @nateberkopec.bsky.social · 16/03/2026
50% of what I'm doing at clients these days is addressing unclear expectations of what queue latencies are allowed to be in background work. Almost no one has the proper suite of alerts and observability, queues routinely ballooning without anyone realizing.
181
nateberkopec.bsky.social @nateberkopec.bsky.social · 13/03/2026
It's pretty rare these days to be on a version this old, but if you're still running Ruby 3.1 in production: it's worth upgrading to 3.2+ purely to get YJIT.
171
nateberkopec.bsky.social @nateberkopec.bsky.social · 12/03/2026
LCP is not a good top-level frontend metric to base your entire frontend perf efforts around _unless_ you are specifically targeting search rankings. LCP is not captured on route change/SPA nav or on Safari at all, which means ~50%+ of clicks go unmeasured.
000
nateberkopec.bsky.social @nateberkopec.bsky.social · 11/03/2026
Datadog's continuous profiling product is now best-in-class. Took them a while but Ivo Anjo has really put in a ton of work here for Ruby and the profiles you get now are so, so good. Being able to see gc activity (as well as the reason!) for GC is so cool.
1101
nateberkopec.bsky.social @nateberkopec.bsky.social · 05/03/2026
When people say "Claude is conscious", I always like to ask "which part?"
020
nateberkopec.bsky.social @nateberkopec.bsky.social · 27/02/2026
Seen in a Shopify project README. TIL RSpec is deprecated at Shopify.
4123
nateberkopec.bsky.social @nateberkopec.bsky.social · 26/02/2026
LLM slopcannons are putting pressure on top of already broken software dev team cultures. The problem isn't the slop generator, so much as your process was only handling low volumes of human-generated slop until now.
150
nateberkopec.bsky.social @nateberkopec.bsky.social · 25/02/2026
A pattern I am seeing: "Generate a 10 question quiz on how this PR works to test my understanding." Do not allow merge until someone passes the quiz. Gusto did this years ago but with humans writing the questions for certain types of PRs.
171
nateberkopec.bsky.social @nateberkopec.bsky.social · 24/02/2026
for the sadists out there
010
nateberkopec.bsky.social @nateberkopec.bsky.social · 24/02/2026
You are probably not using LLMs enough to generate non-code artifacts. "Review this PR and then generate an interactive HTML website to explain it. Turn this state machine into a mermaid diagram. Generate a 10,000 word deep research report on the state of the art of CSRF protection."
3100
nateberkopec.bsky.social @nateberkopec.bsky.social · 23/02/2026
LLMs are (not _just_) autocomplete. They will tend to do MORE, tend to katamari. The dangers of shipping more code and never shipping less still apply.
040
nateberkopec.bsky.social @nateberkopec.bsky.social · 20/02/2026
Your prior at this point needs to be "if LLMs are breaking my SDE lifecycle, the problem is the lifecycle or how we are using the LLM, not the capabilities of the model". You can make models generate anything now. The problem is how you move them through the latent space.
020
nateberkopec.bsky.social @nateberkopec.bsky.social · 19/02/2026
The only code review agent I have ever seen be even remotely good is just Codex xhigh. All the review services (and I've seen at least a dozen at this point) suck so bad that I'm not sure how they make any money at all.
050
nateberkopec.bsky.social @nateberkopec.bsky.social · 18/02/2026
When you've got a queue with a very tight SLO, you don't want to scale down too fast. You end up with a "sawtooth" or jagged container count. The "true" demand for containers is the red line here. In situations on <30 sec SLOs, you often want cooldowns in the >1hour range.
130
Reposted by @nateberkopec.bsky.social
Jeremy Morrell @jeremymorrell.dev · 18/02/2026
I’ve seen a number of home-grown Claude code orchestrators with built-in kanban… You’ve just been given access to a magical tool that can build anything you can imagine, and… kanban?
6461
nateberkopec.bsky.social @nateberkopec.bsky.social · 17/02/2026
Even if not deployed single-node, it's helpful to use Little's Law to understand if you _could_ be. Avg CPU load = CPU time in seconds per req/job * req-per-sec. If that's below ~16, you could definitely run single-node. Why aren't you? No wrong answers, but have a good one.
020
nateberkopec.bsky.social @nateberkopec.bsky.social · 16/02/2026
I didn't really dig into it too carefully but pangram does seem to hold up pretty well in studies
010
nateberkopec.bsky.social @nateberkopec.bsky.social · 16/02/2026
Your proposal for RubyKaigi 2026 has been accepted.
1130
nateberkopec.bsky.social @nateberkopec.bsky.social · 06/02/2026
not anymore. my license is probably still valid though...
020
nateberkopec.bsky.social @nateberkopec.bsky.social · 04/02/2026
What's your sense: do we get different curve shapes for different evals? Or all the same curve shape, different y-intercept/slope? So far I think you have to say most evals correlate pretty strongly
110
nateberkopec.bsky.social @nateberkopec.bsky.social · 04/02/2026
I think there's a problem about conceptualizing this as a single line when really what we care about is an x-dimensional space where particular types of human labor are each dimension
220