Full Width [alt+shift+f] Shortcuts [alt+shift+k]
Sign Up [alt+shift+s] Log In [alt+shift+l]
27

Record/Replay testing in Sorbet

from Posts on Made of Bugs [alt+shift+b] in technology

In 2017 and 2018, I (along with Paul Tarjan and Dmitry Petrashko) was a founding member of the Sorbet project at Stripe to build a gradual static typechecking system for Ruby, with the aim of enhancing productivity on Stripe’s millions of lines of Ruby, and eventually producing a useful open-source tool. I’m very proud of the work we did (and that others continue to do!) on Sorbet; I think we were very successful, and it was one of the best teams I’ve worked on in a number of ways.
13th Jan 2020

Stay updated

Get a weekly newsletter with the top 5 articles worth reading every week.

More from Posts on Made of Bugs

From error-handling to structured concurrency

How should we think about error-handling in concurrent programs? In single-threaded programs, we’ve mostly converged on a standard pattern, with a diverse zoo of implementations and concrete patterns. When an error occurs, it is propagated up the stack until we find a stack frame which is prepared to handle it. As we do so, we unwind the stack frames in-order, giving each frame the opportunity to clean up or destroy resources as appropriate.

23rd Mar 2026 • 1 votes
Solving Regex Crosswords with Z3

For a while now, I’ve been fascinated by Z3 and by SMT solving more broadly. While on pat leave recently, I was reminded of the existence of regular-expression crossword puzzles, and allowed myself to get nerdsniped by writing a Z3-backed solver. I expected to spend perhaps an afternoon cranking out a quick solver; I ended up getting sucked into understanding and debugging Z3 performance, and learning far more about Z3 and about SMT than I expected.

21st Oct 2025 • 1 votes
The ITTAGE indirect branch predictor

While investigating the performance of the new Python 3.14 tail-calling interpreter, I learned (via this very informative comment from Sam Gross) new (to me) piece of performance trivia: Modern CPUs mostly no longer struggle to predict the bytecode-dispatch indirect jump inside a “conventional” bytecode interpreter loop. In steady-state, assuming the bytecode itself is reasonable stable, modern CPUs achieve very high accuracy predicting the dispatch, even for “vanilla” while / switch-style interpreter loops1!

4th Jul 2025 • 1 votes
Performance of the Python 3.14 tail-call interpreter

About a month ago, the CPython project merged a new implementation strategy for their bytecode interpreter. The initial headline results were very impressive, showing a 10-15% performance improvement on average across a wide range of benchmarks across a variety of platforms. Unfortunately, as I will document in this post, these impressive performance gains turned out to be primarily due to inadvertently working around a regression in LLVM 19. When benchmarked against a better baseline (such GCC, clang-18, or LLVM 19 with certain tuning flags), the performance gain drops to 1-5% or so depending on the exact setup.

9th Mar 2025 • 62 votes
Building personal software with Claude

Earlier this month, I used Claude to port (parts of) an Emacs package into Rust, shrinking the execution time by a factor of 1000 or more (in one concrete case: from 90s to about 15ms). This is a variety of yak-shave that I do somewhat routinely, both professionally and in service of my personal computing environment. However, this time, Claude was able to execute substantially the entire project under my supervision without me writing almost-any lines of code, speeding up the project substantially compared to doing it by hand.

27th Jan 2025 • 71 votes

More in technology

The Topology of Contemporary Politics

I’ve been getting back into the politics fandom this past month.

23 hours ago • 1 votes
So all software is free as in money now?

A few weeks ago I was up late in my kitchen. I've always been a bad sleeper, starting from when I was 10 and would spend whole nights reading books and watching the clock slowly wind it way to when I had to get up and go to

yesterday • 1 votes
The Pulse: Details of incident.io’s AI spend

The resiliency startup has slashed the amount it spends on AI; down from $4,500 per dev, per month, in August, to $1,600 now.

2 days ago • 1 votes
Nathaniel at WordCamp Canada

Nathaniel Christopher has a lovely recap of his time at WordCamp Canada. Very cool that the dashboard widget helped connect him to the local community. Hat tip: Anne.

3 days ago • 1 votes
Our current screen time policies

Managing a house with five kids can be challenging so I like to share what’s working for us when I can. This post is how we currently handle screen time. Screens can be addictive, and it’s easy for anyone (both kids and adults) to fall into unhealthy patterns using them. Historically, I’ve been uncomfortable with screen time restrictions because I don’t want to restrict all the useful, creative, and productive opportunities that screens can provide. We’ve tried zero restrictions in the past (alongside Daily Demos as a creativity incentive), which worked ok, but at some point we wanted bit more structure. Here’s what that structure currently looks like. Device use categories For family members without phones, we have carved out the following categories of time: “Free Time” - Kids are free to do whatever activities they want (bounded only by what we’ve made available for them at the house). Video games, movies, board games, homework, run around outside, whatever. Often, this time trends towards consumption on devices, but it doesn’t have to. We call it “free time” instead of “screen time,” because we want to emphasize that the opportunities are wider than just screens. “Project Time” - Kids are encouraged to do projects, which are usually defined as creative activities of all kinds (with or without screens). This category can be blurry so we’ve often put together lists of approved project time activities, including things like: arts and crafts, coding (including “Scratch create”), playing musical instruments, recording videos, Minecraft (creative mode), the Powder Toy, Dojo Islands, and anything on Let’s Get Creative. Device-based consumption is not allowed. Offline activities are usually considered fine (reading a book, doing a puzzle, etc). “No devices” - No device use allowed. Addendum: Grant Proposals If a kid wants a one-time exception to one of the categories above, we tell them to “submit a grant proposal.” This means they need to get some paper, and write out what they want to do, and why they think it is justified. Example 1: “I want to play Minecraft creative after dinner because I am building a full-scale piano, I want to demo it tonight, and I only have 10 more minutes of work until it’s done.” Example 2: “I want to play Terraria during project time because I am making an tutorial on how to beat Moon Lord, and I need to collect screenshots from the game for my tutorial.” We usually approve grant proposals, as long as they aren’t incomplete. Schedule With these categories defined, we just need to decide how much time to allocate, and when to schedule it. For example, here’s our current “no devices” schedule: "No Devices" times Reason After Dinner Reduce stimulation before bed Sundays Protected for church and family Saturdays, before chores are done Incentivize quick completion of chores, so our Saturday afternoons remain available The categories + schedule constitutes our device policy, in addition to Daily Demos, which we continue to hold on the side. Summary Addictive device consumption can easily crowd out activities that are important long-term but deliver less dopamine short-term. Our device-time categories create a protected space for those activities on a consistent schedule that our kids can expect and make plans around. This is what works for us. Your milage may vary! Thanks for reading this post via RSS! Let me know your thoughts by leaving a comment on the original post or sending me an email.

3 days ago • 1 votes
📚 BoredReading

You seem to be enjoying this.

Join free to unlock everything.

Create free account

Already have an account? Sign in