Skip to content
leeveel
← Index
Nº 008 · Apr 18 · 4 min read#process

Why we ship on Fridays

The week's worst day to ship turns out to be the most honest one. We argue why, then show our deploy log.

by Nephele K.

++++

The conventional wisdom is "never deploy on a Friday." We do, and often. Not as bravado — as a forcing function. Friday deploys mean we don't ship anything we'd hate to debug on a Saturday, which means we don't ship things we don't trust.

The flip side is the part nobody tells you. A Wednesday-deploy culture lets bad code slip in because there's always room to patch it later. Friday closes the door. The change is in production for the weekend or it isn't. That binary is uncomfortable, and it's the whole point.

Caveats. Migrations get scheduled mid-week. Anything that touches payment, auth, or a queue at scale ships behind a feature flag with a pre-arranged rollback. The rule isn't reckless — it's about never lying to ourselves about whether something is finished.

We checked our deploy log for this post. Of the last 60 production deploys, 24 went out on a Friday. Three rolled back. Two of those were rolled back the same Friday afternoon, by the engineer who shipped them. None happened on a Saturday. That's the only number that matters.

Friday isn't evenly distributed across the week — it's where the work lands. The shape of the bar chart above is the shape of our actual practice. By the time we look at the calendar on Tuesday, the change is already in a draft PR. By Thursday it's reviewed. Friday is the day where the work meets the world. Pulling that forward to Wednesday wouldn't change the engineering — it would just change the day we lie about being done.

The other thing Friday forces is a real on-call rhythm. Whoever ships owns the change through Monday morning. Not "we'll look at it," not "the next person on rotation will pick it up" — the same engineer answers the phone. That accountability shrinks the set of changes anyone is willing to ship at 4pm on a Friday, which is exactly what we want it to do. The rule is the filter.

What changed since we wrote this internally three years ago: nothing. The retro after every Friday rollback used to say "maybe we should stop." Now it says "why didn't the test catch this?" — which is the conversation we wanted in the first place.