A Dependency Update Routine You'll Keep
10 Mar 2026Dependency updates fail as a habit for one of two reasons: you do them constantly and every week loses an hour to a broken build, or you never do them and eventually face a security patch that requires jumping three major versions at once. Batch them, test them, ship them — on a schedule, not on panic.
Batch, don’t trickle
Updating one dependency the moment a new version drops means constant context-switching and constant small risk. Instead, batch on a fixed cadence:
# weekly or biweekly, not continuous
npm outdated
Group updates into three buckets, and handle each differently:
| Bucket | Example | Cadence |
|---|---|---|
| Patch/minor, no breaking changes expected | lodash 4.17.20 → 4.17.21 |
Batch weekly, low scrutiny |
| Major version bumps | react 17 → 18 |
Its own PR, read the changelog, budget real time |
| Security advisories | Any CVE | Immediate, out of band, skip the batch |
Automate the boring bucket
# Dependabot or Renovate config: group patch/minor updates into one weekly PR
# renovate.json
{
"extends": ["config:base"],
"packageRules": [
{ "matchUpdateTypes": ["patch", "minor"], "groupName": "routine updates", "schedule": ["before 9am on monday"] },
{ "matchUpdateTypes": ["major"], "groupName": null }
]
}
One PR a week with every low-risk update bundled together, tests run automatically, and you review the diff and the CI result — not each package individually. Major versions get their own PR, ungrouped, so they don’t get rubber-stamped alongside twelve unrelated patch bumps.
Never skip the test suite for “it’s just a patch version”
Patch versions aren’t supposed to break your app. They sometimes do anyway — semver is a promise, not a guarantee, and plenty of maintainers ship a breaking fix as a patch by mistake. Run the full suite on every batch, no exceptions:
npm ci && npm test && npm run build
If CI is green, merge. If it’s not, that’s the one package in the batch worth isolating and investigating — not a reason to skip the whole batch going forward.
Security advisories jump the queue
npm audit --audit-level=high
A high or critical advisory doesn’t wait for the weekly batch. Patch it same-day, in its own PR, even if it means testing one dependency in isolation outside your normal rhythm. This is the one case where moving fast is correct — the batching discipline exists to reduce noise, not to slow down an actual vulnerability fix.
Major versions: read the changelog before you touch the lockfile
# don't just run this and hope
npm install react@latest react-dom@latest
Read the migration guide first. Budget real time — a major bump is a small project, not a line item in a routine PR. Do it in isolation, with its own test pass, and be willing to revert if it surfaces problems you didn’t anticipate.
The routine that actually sticks
- Weekly: automated PR for patch/minor, reviewed and merged same day if CI is green.
- As advisories land: patched same day, out of band.
- Quarterly: look at what’s gone stale — packages nobody’s bumped in six+ months — and schedule the major-version work deliberately, rather than discovering it during an unrelated feature.
The goal isn’t zero outdated dependencies. It’s no dependency old enough that updating it becomes a project instead of a routine task.