How to write release notes people actually read
Bug fixes and performance improvements.
Every product has shipped this. It is not lazy writing exactly. It is what you get when release notes are written from the inside, by someone who has spent two weeks in the diff and can no longer see which parts of it a stranger would care about.
The fix is not a better tone of voice. It is answering one question per entry.
The question
What can the reader do now that they could not do before, and what do they have to do about it?
If an entry cannot answer that, it belongs in the changelog and not in the release notes. Both halves matter. The first half is the value. The second half is the part teams forget, and it is the one that generates support tickets when it is missing.
Two examples of the second half doing real work:
- “Existing webhooks keep working until 1 November. After that, unsigned payloads are rejected.”
- “No action needed. Existing exports are re-encoded automatically the next time you open them.”
The second one says “no action needed” explicitly. That sentence is worth writing every single time, because a reader who cannot find it assumes the worst.
Order by consequence, not by component
The most common structural mistake is grouping by where the work happened: API, dashboard, mobile, infrastructure. That is your org chart, not the reader’s problem.
Order it like this instead:
- Breaking changes and anything with a deadline. First, always, even if it is small. If a reader stops after one line, this is the line they must have read.
- What is new that they will want. One per paragraph, with the outcome in the first clause.
- What got better. Fixes that were reported, limits that were raised, things that were slow.
- Everything else, as a list. Dependency bumps, internal refactors, minor copy. One line each. Nobody reads this section, and it should still be there, because the person looking for it really needs it.
The rewrite
Before:
v4.2.0 Fixed an issue where the
POST /exportsendpoint would intermittently return 500 under load. Refactored the export worker. Bumpednode-pgto 8.11. Improved error handling in the CSV serializer.
After:
Exports no longer fail on large accounts. Accounts over roughly 50,000 rows could get a 500 when starting an export, more often at month end. That is fixed, and exports of any size now retry themselves rather than failing. No action needed, and any export that failed in the last week can simply be run again.
Also in 4.2.0:
node-pg8.11, clearer CSV serializer errors.
Same release. The second one names the account that was affected, the time it was worst, what changed, and what to do. The dependency bump did not disappear, it just stopped being the headline.
Things worth deleting
- “We are excited to announce.” The reader is not excited yet. Earn it in the sentence after.
- Internal ticket numbers.
PROJ-4471means nothing outside your tracker. If the entry needs a reference, link the docs page. - Component names only your team uses. If you renamed the “ingest pipeline”, say “imports”.
- A version number as the only headline.
v4.2.0is a filing label, not a summary. - Screenshots of a settings page nobody has visited. Show the thing that changed, in use.
Cadence beats volume
Notes that arrive for every release train everyone to ignore them. Notes that arrive when something happened get opened. That means it is fine, and usually correct, to ship a release with no notes at all and roll its entries into the next set that has a headline worth reading.
The changelog still records all of it. That is the division of labour: the changelog is complete, the notes are selective. If you keep the changelog structured as you go, writing the notes is selection and rewriting rather than archaeology.
The release notes template is the shape we use for the selection step, and changelog examples collects entries from teams whose changelog is good enough to derive notes from.
One test before you publish
Read the notes as someone who has been on holiday for two weeks and has 40 seconds. If, in that time, they cannot tell whether anything is required of them, the notes are not finished, however accurate they are.
The technical claims in this article have not been independently reviewed. If something here is wrong, tell us and we will correct it.