Our first Code Freeze

Our first Code Freeze

This Black Friday, for the first time, we stopped shipping code. Here’s why we did it, how we prepared, and what we learned.

This Black Friday, for the first time, we stopped shipping code. Here’s why we did it, how we prepared, and what we learned.

Adam Kaczmarek

Nate Meyer

Dec 9, 2025

Normally we ship code to production constantly throughout the week (yes, even on Fridays). Developers are responsible for getting their PRs tested, approved, and deployed. This year, as Black Friday approached, we made the unusual (for us) decision to put a code freeze in place. Our goal in doing this was to prioritize stability given the needs of our users during this busy email season.

The Typical Reason

Many companies halt production code deploys during the holidays while limited staff are available. Engineers, product managers, and ops teams are taking vacation, leaving fewer hands available to respond to incidents. Most service interruptions are the result of an intentional change, whether it's a bug that shipped or a well intentioned database script that went sideways.

Black Friday Email Volume

The week surrounding Black Friday is one of the highest-risk days of the year from an operational standpoint for email companies. Prior to leaving for their Thanksgiving vacations, many of our users schedule their biggest campaigns of the year to send during this period. Our users trust us to “take it from here” and deliver these emails on time with good inbox placement.

Our intuition (backed by last years experience) ended up being validated as we saw a sharp uptick in email sending on November 28th, the day after Thanksgiving.

Balancing Stability and Velocity

A code freeze didn’t mean we stopped moving forward. We approached it strategically:

  1. Soft boundaries, not a full shutdown

    Critical fixes were still allowed, but everything else was paused. We didn’t do anything to block or otherwise actually prevent folks from merging pull requests or deploying changes. It was just an informal agreement. In the event that we needed to do something, we wanted to keep it easy to do so; being a small team helped in this regard.

  2. Pre-Black Friday preparation

    We reserved extra quotas where needed, shored up monitoring and alerting, and reviewed operational procedures. Our goal was to enter the weekend fully prepared.

  3. Focus on internal improvements

    During the freeze, the team could focus their time on our (very human) support.


  4. Clear communication

    We settled on a plan a few weeks in advance, wrote everything down, and shared the details in a notion doc as an RFC.

Why now?

Choosing to freeze code was a reflection of the scale and maturity that Loops had grown to. Our customers put their full trust in us to deliver email for them when they expected it.

  • Reliability can matter more than shipping features.

  • We value our users’ experience and want to make sure campaigns go out smoothly, especially when the stakes are highest.

Looking Ahead

We'll review system performance from this year and use it to inform how we handle this next year. The freeze serves as a reminder that sometimes, the smartest engineering decision isn't about moving faster. If we can ensure peak reliability while still making steady progress, we consider that a win.

Better email starts here

Let's go

Better email starts here

Let's go

Better email starts here

Let's go