Blog

Deprecation Warnings Developers Skip

A warning on stdout is invisible once the command still exits 0. Put deprecations on stderr, give them a code, and count how many unique developers ignore them before you delete the path.

2026-08-27 · 6 min read · AethelLayer

Exit 0 means they will not look

If the command succeeds, a warning above a JSON payload gets piped away or scrolled past. Print deprecations on stderr so they stay out of the data, and include the date or version when the path disappears.

Give the warning a code. You will want to search it later. A prose sentence you reword next month cannot be counted.

Say the replacement in the warning

The next command, not a link to a marketing page. If the replacement is a flag, print the flag. If it is a new package, print the install line.

One warning is enough. Repeating it on every retry trains people to ignore the stream.

Count ignores before you remove the path

A probe on the deprecated path, without failing the command, tells you how many hashed developers still use it. Remove the path when that number is a list you can email, not when the calendar says so.

Do not prompt during the warning. You are not in a failure. Prompt when the path is actually gone.

The removal error should quote the warning

When you finally exit non-zero, use a different code from the warning, and mention the version that printed the warning. People who jumped from an old lockfile to latest need that bridge.

Draft the issue only for removals that still surprise a crowd. A planned break with a quiet tail is a changelog line.

Capture the failure before they leave

Capture the failure before they leave. Book early access or talk to sales, then install @aethellayer/sdk when you are onboarded.