Shipping and supporting

How to write release notes

Release notes serve four audiences with one ship: customers, support, executives, and the on-call developer. Write each for its reader.

steps
8
named failure modes
5
definition-of-done criteria
6

How to write release notes, in one paragraph

Release notes are four artefacts produced from one shipped change: a customer note, a support pack, an executive one-pager and an on-call entry, plus the rollout plan and comms that schedule them. Together they are the ship kit, and they are written before the release date is set rather than after it lands. Good ones trace back to the epic and its share of the outcome's currency target, and claim nothing the passing tests and demonstrated journeys support. Bad ones are a changelog dump forwarded to four inboxes and read carefully by none of them.

What these are. The delivery operating model our engagements install alongside client teams: the method underneath the agentic work rather than the agentic work itself, published in full and free to use. It is written for the person running a quarter, not for a buyer, so if you are evaluating us, read the five priced engagements or the case studies instead.

When to use this

Every time a done story, or in an AI-native team a done outcome ticket, has been reviewed and product-approved and is about to be given a release date. Write the ship kit as part of scheduling the release, not as a tidy-up after it.

Time to run it once
About three hours, for all four artefacts
What you need
  • An evidence folder holding the commit range, the passing test run and screenshots
  • The delivery tracker
8 steps

Step by step

Each step is deep-linkable, so you can send a colleague the one that is in dispute.

  1. 1

    Build the evidence folder before you write

    Twenty minutes, one folder, no prose yet.

    Walk up the chain from the ticket: story, epic, outcome, currency target, and copy out the epic's planned share, which the executive note needs exactly. Then collect the commit range, the passing test run, the acceptance criteria or key user journeys with evidence they were demonstrated, screenshots of the new state, the flag name and its default, any migration and whether it reverses, and the rollback procedure with the date it was last run against a real environment. A missing piece is a readiness problem, not a writing problem, and cheaper to find now than at 3am.

  2. 2

    Write the customer note in the customer's words

    Eighty words, three parts: one sentence on what changed, two or three lines on what to do differently, and where to find it.

    First read the last five support tickets touching this workflow and steal the words customers use, because they will not be the feature name your team argued over. Strip ticket IDs, service names, internal team names and anything about the pipeline that built it. If the change sits near a workflow people are protective of, name what has not changed, because that is the fear the note has to answer. If the change is invisible to users, write no note and record that decision on the ticket.

  3. 3

    Write the support pack as answers, not narrative

    Build a four-column table: the symptom in the customer's words, the one-line answer, the ready-to-send macro, and when it escalates.

    Three rows minimum, covering the questions this change will generate, not the ones you wish it would. Add who is affected and who is not, by plan or cohort, and the limitations you shipped on purpose. Then the two lines that save the most time: what a ticket must contain before it returns to the team, and the signal that means stop widening the rollout. Support gets this 48 hours before the first cohort, not on the morning. Hearing about a release from a customer costs more goodwill than the release earned.

  4. 4

    Write the executive one-pager against the number

    One page, four lines: the epic, the outcome it rolls up to, the epic's planned currency share, and what shipped in plain English.

    Then the honest part, in three more: the evidence that exists today, the value expected and through what mechanism, and the date of the next monthly outcome validation, when this number first gets tested. Add a line reading realised value to date, nil. Do not claim delivered value. The epic sits in value monitoring until validation confirms the number or someone closes it saying the value did not land. Reporting a shipped feature as banked value is the one sentence that breaks the loop.

  5. 5

    Write the on-call entry for a tired stranger

    This is the developer changelog in the ship kit.

    Its reader was not involved, is half asleep, and has a pager going off. Name the commit range, the flag and its current default, any migration and whether it reverses, new configuration and secrets, changed dependencies, and the two dashboards or alerts most likely to move. Then the line that matters: the exact rollback step, how long it takes to bite, and whether it has ever been run against a real environment. If rollback means a forward fix because a migration is destructive, put that in the first two lines. Finish with blast radius: which cohorts, which regions, which downstream services.

  6. 6

    Attach the rollout plan and comms schedule

    The notes are useless until someone has agreed when each lands.

    Write the cohorts as percentages with dates: who gets it first, how long you hold before widening, and the named metric and threshold that must hold at each step, so widening is a check rather than a mood. Then the comms: who sends the customer note and when, who briefs support, who posts internally, and whether anything goes to a public changelog. A person's name against every line, never a team name. Hold one cohort at the old behaviour until the seven-day live monitoring check closes, so you keep a clean comparison group for when the number is questioned.

  7. 7

    Draft with AI, then verify claim by claim

    This is one of the places AI earns its keep.

    Hand a model the diff, the ticket, the test output and the demonstrated journeys, and ask for all four artefacts in one pass, each written for its own reader, marking anything it inferred rather than read. Then go line by line and strike every factual claim you cannot point at a specific file in the evidence folder. Models write confident notes about behaviour nobody implemented, and a model reporting that it has finished is not evidence that it has. Product approves the customer note and the one-pager; whoever presses release signs the on-call entry.

  8. 8

    Publish, link back, hand into live monitoring

    Attach all four artefacts to the ticket so the chain holds: anyone opening it reaches the notes, the epic, the outcome and the number behind it. Publish on the schedule, in the order you wrote. Then hand the customer note and the support pack into live monitoring, because for seven days they are what you triage against: the FAQ gets extended as real questions arrive, the macro gets corrected where it was wrong, and the continue, watch or rollback call is made against thresholds you already agreed rather than invented under pressure. When live monitoring closes, the epic stays in value monitoring until outcome validation reports.

Worked example

A worked example: Ledgerly, an invented invoicing product

The outcome is cut days sales outstanding from 47 to 38, with a currency target of £1.2m in recovered working capital over two quarters. The Q3 roadmap carries an epic, automated payment reminders, with a planned share of £400k. The story shipping on Tuesday is the reminder schedule editor, behind the flag reminders_v2, default off. Customer note, 71 words: You can now set your own reminder schedule. Until today, Ledgerly chased an unpaid invoice once, seven days after the due date. Go to Settings, then Reminders, to choose up to three chase points and edit the wording of each. Your existing invoices keep the single reminder until you change it, so nothing new goes to a customer without you deciding it should. Support pack: three symptoms with an answer and a macro each (why did my customer get two reminders, can I turn this off, why can I not edit the template), a line that legacy-plan accounts do not see the setting and must not be promised it, and one escalation rule, that any report of a reminder sent against a paid invoice comes straight back to the team as a P1 and stops the rollout. Executive one-pager: epic automated payment reminders, outcome DSO 47 to 38, planned share £400k, shipped so that customers can set their own chase schedule. Evidence today, 14 acceptance tests passing and three key journeys demonstrated. Expected value comes from invoices being chased earlier and more than once, and is first tested at outcome validation on 3 October. Realised value to date, nil. On-call entry: commits a41f2c to 9be013, flag reminders_v2 default off, one additive migration creating reminder_schedule, reversible, no new secrets, new dependency on the scheduler queue. Watch reminder_send_rate and invoice_webhook_errors. Rollback, set reminders_v2 to off in the flag console, effective within 60 seconds, no deploy needed, migration can stay in place, last run for real in staging on 22 September. Rollout and comms: 5% internal accounts on Tuesday (Priya), 25% on Thursday if reminder_send_rate stays within 10% of baseline and no P1 has been raised (Priya), 60% the following Tuesday (Priya), with a 10% cohort held at the old behaviour until live monitoring closes on 6 October. Customer note in-app on Thursday (Dan), support pack to the team on Monday (Dan), public changelog at the 60% step (Dan).

Failure modes

Where this goes wrong

  1. 01

    One note relabelled four times.

    The customer note gets a technical paragraph pasted on the end and goes to everyone. It happens because writing one thing is quicker, and it fails because a note aimed at four readers is read carefully by none of them.

  2. 02

    The changelog dump.

    Ticket titles and commit messages pasted straight into a customer note. Ticket titles are written for the team that raised the work and describe the work, not the change in the customer's day.

  3. 03

    Reporting shipped as delivered.

    An executive note that presents the epic's planned share as money earned kills outcome validation before it runs, because nobody re-examines a number already reported as banked.

  4. 04

    Writing the notes after the release.

    By then the person who knows the blast radius is on something else, and the on-call entry gets reconstructed from the diff by whoever is free, at the moment it is least useful.

  5. 05

    A rollback line nobody has ever run.

    Revert the deploy is not a procedure when the migration is destructive or the flag was deleted in the same release. If the step has never been executed against a real environment, the note says so in those words.

Definition of done

Done means

  • All four artefacts exist, each names its audience, and all four are attached to the ticket before the release date is agreed.
  • Someone outside the team read the customer note and could say what changed and what to do next, and it contains no ticket IDs, service names or internal team names.
  • Support has the pack at least 48 hours before the first cohort, with one answer, one macro and one escalation rule per user-visible change.
  • The on-call entry names the flag and its default, the rollback step, how long it takes to take effect, whether it has been run for real, the blast radius, and the two dashboards to watch.
  • The executive one-pager states the epic's planned currency share and the date of the next outcome validation, and records realised value to date as nil.
  • Every line of the rollout plan and comms schedule carries a person's name and a date, with one cohort held back until the seven-day live monitoring check closes.
If your team is AI-native

An AI-augmented team writes the ship kit per story. An AI-native team has no stories, so it comes off the outcome ticket, and the evidence is what that ticket already demanded: the test requirements passing and the key user journeys demonstrated working. That makes drafting easier and verification harder. Nobody typed the code, so no one carries the blast radius in their head, and the on-call entry has to be derived from the diff and the migration files, then read line by line by whoever will be paged. Ask the model to mark every claim it inferred rather than read, and delete those first.

The two delivery modes, side by side →

Questions

Who writes the release notes, product or engineering?

Whoever shipped the change drafts all four, with a model doing the first pass. Product approves the customer note and the executive one-pager, and whoever presses release signs the on-call entry. One drafter, two approvers, no committee. If the drafter is not on the rota, someone who is reads and countersigns the on-call entry before the release date is confirmed, because that is the artefact they will be woken up by.

What if the change is invisible to customers?

Then there is no customer note, and saying so is the correct output. Write no customer note required on the ticket so the absence is a recorded decision rather than an oversight. You still owe the on-call entry, because invisible changes are the ones that page people, and support still gets two lines if anything they can see in an admin tool, an export or a log has moved.

Can we auto-generate the notes from commit messages?

You can generate a draft, and you should. What you cannot do is publish it unread. Commit messages describe the work, not the change in the customer's day, and they carry service names and ticket IDs that have no business in a customer note. Treat generated text as a first pass to be verified against the evidence folder, and expect to rewrite the customer note almost entirely, because that reader sits furthest from the diff.

Is this proportionate for a hotfix at 2am?

Write the on-call entry first and four lines is enough: what changed, the flag, the rollback, the blast radius. The rest follows within one working day. Do not skip the executive line if the fix changes what the epic is expected to be worth, and do not skip the support pack if a customer might notice, because a hotfix support has not been briefed on generates the same tickets a planned release does, at a worse moment.

Want help installing this?

These guides are free and you owe us nothing for using them. If you would rather have operators install the operating model alongside your teams and stay until it sticks, that is what our engagements do.

30 minutesWith James personallyNo obligation

Most organisations start with a fixed-price Agent-Readiness Audit · £30k–£90k · 6–8 weeks