Why I Turned Off Automatic Dependency Upgrades — and the One Rule I Kept

I shut down auto-merging dependency PRs after a midnight outage. Here’s the precise workflow I replaced it with, the failure I didn't anticipate, and the one automation I still trust.

Written by: Arjun Malhotra

A laptop on a wooden desk showing a code editor and terminal windows
Photo by Sven Mieke on Unsplash

It was 2:15 a.m. when I woke up to a Slack thread full of failed payment logs and a terse DM: “Are we rolling something?” Our small payments service had a burst of 500-ms timeouts, then errors: checksum mismatches while calling a third‑party adapter. The stack traces pointed to a tiny utility library we’d automatically upgraded the night before.

We were running Renovate with auto‑merge on minor and patch bumps. It saved me a few routine PRs and, at 2 a.m., it also shipped a breaking transitive change from a dependency that changed a function signature (semver lie). Tests had passed in CI because our suite mocked the adapter. Production hit an edge case that CI didn’t cover. I spent the weekend tracing, hot‑fixing, and rebuilding trust with the client. That was the finish line: I flipped the switch and turned automatic merges off.

What I was defending against Automatic dependency upgrades are attractive for small teams. They reduce busywork, keep things current, and close security holes quickly. But they also introduce three practical problems I’d underestimated:

Turning off automerge felt reactionary. It was, but it forced us to be deliberate.

The new workflow (exact, copyable) I didn’t go back to manual PRs and no automation. I wanted the noise turned down and the safety turned up. Here’s the workflow I implemented and have kept for a year:

  1. Keep bots, stop auto‑merge
  1. Two-tier policy for merges
  1. The smoke suite
  1. Changelog gate and “why this matters” PR template
  1. Weekly dependency review meeting (15 minutes)
  1. One automation I kept: security alerts + auto‑patch for critical CVEs

Where this approach bit me (the honest failure) A month after switching off auto‑merge entirely for a period, I got sloppy. We treated dependency updates as “non‑urgent” and missed a critical OpenSSL backport that affected an internal client library. Because no bot had auto-merged it, our library stayed vulnerable for two weeks. We had to do a hot patch, coordinate with three clients, and take a Saturday to push updates. That failure taught me not to swing the pendulum too far toward manual. Automation needs boundaries, not full removal.

Tradeoffs you should expect

Why this works in practice We reduced weekend pagers to almost zero. Production issues caused by surprise dependency changes dropped to near‑zero. Developers spent ten extra minutes per upgrade PR reading changelogs and writing the one‑line risk note. That discipline changed our culture: we stopped treating dependencies as “someone else’s problem.”

One takeaway Turn off blind auto‑merge. Keep the bot for PR creation and security noise — but require minimal, automated, real‑world smoke tests plus a human check for anything beyond a trivial patch. It costs a few developer minutes each week and saves you a messy midnight. That tradeoff fits a small Indian product team: we pay in scheduled time, not in scrambled weekends.