We should all be using dependency cooldowns

Security vs. stability tradeoff

  • A core debate is whether default delays on dependency updates are good engineering:
    • Pro-cooldown: most changes don’t matter immediately; new releases regularly introduce bugs and vulnerabilities; waiting days–weeks lets scanners, maintainers, and early adopters surface problems before you ingest them.
    • Anti-cooldown: you’re deliberately delaying real bugfixes and zero‑day patches; if your tests are good, staying very up‑to‑date is often the most stable option.
  • Several note that zero‑days are usually patched quickly and tools can/should bypass cooldowns for known CVEs, so cooldowns mainly target unknown malicious or buggy updates.

What “cooldown” actually governs

  • Many argue cooldowns should apply only to automated, semver-based bumps (Dependabot/Renovate/etc.), not to human decisions.
  • Engineers are expected to override the delay for critical fixes, after reviewing changes and accepting responsibility.
  • There’s some confusion/annoyance over whether a “cooldown” is a hard rule or just a default; the article’s author clarifies it’s intended as the latter.

Effectiveness if everyone uses cooldowns

  • Critics: if all consumers wait, fewer “eyeballs” see the new release; discovery of supply‑chain attacks may be delayed, so the attack window stretches.
  • Supporters: recent big supply‑chain incidents were caught by maintainers and automated analysis, not random end‑users; vendors are incentivized to scan new releases regardless of adoption; randomized or staggered cooldowns could mimic gradual rollout.

Dependency management philosophies

  • One camp favors aggressive, continuous updates with strong test suites; another favors minimal churn: update only for needed features/bugfixes or security, otherwise stay put.
  • Several warn that “update only when you must” leads to huge, painful jumps when you finally have to catch up—“falling off the release train.”
  • Others prefer vendoring dependencies and only updating for major vulnerabilities, trading ongoing churn for explicit, infrequent upgrades.
  • There’s wide support for:
    • Keeping dependency trees small and focused.
    • Using LTS-style releases.
    • Avoiding “everything” libraries with giant transitive graphs.

Tooling, AI, and governance

  • Proposed helpers: CI jobs that batch periodic updates, lockfiles plus minimum package age, proxy registries that expose older snapshots, and LLMs to:
    • Triage CVE firehoses.
    • Summarize diffs and call out breaking or suspicious changes.
  • Some want ecosystem-level review/signoff systems where upgrades wait for enough independent audits rather than just time.