Go home
Menu

The evidence packet I want before an analytics release is approved

I use a small analytics release evidence packet to keep changed assets, validation output, owner approval, rollback notes, and stakeholder context together before a decision-critical release goes live.

5 min read by Berhan Turkkaynagi

A release can pass every automated check and still leave the approval hard to defend.

The code merged, the pipeline stayed green, the dashboard changed, and three weeks later nobody can reconstruct why the release was considered safe. The evidence exists somewhere, but it is split across pull request comments, CI logs, screenshots, owner messages, and a rollback note that never made it into the same record.

For finance-facing or operations-facing analytics releases, I want one small packet before promotion.

Problem

A pull request says tests passed. A dashboard screenshot sits in a thread. A finance owner writes “looks good” after checking one slice. The rollback path is known by the engineer who shipped it. Each piece may be reasonable on its own, but the release decision is still fragile because the pieces are not tied together.

The cost shows up later. When a finance export, executive dashboard, or operations metric is questioned, the team has to do archaeology before it can answer the actual question: did the live number behave the way the release note said it would?

Default approach

  • Name the release boundary: pull request, changed models, semantic definitions, dashboard cards, exports, and downstream report surfaces.
  • Attach validation evidence that explains the business-facing change, not just the automation status.
  • Separate engineering approval from owner approval. The delivery path and the visible metric interpretation are related, but they are not the same decision.
  • Write the stakeholder-facing release comment before promotion: what should move, what should not move, and where readers should look if they compare against an older deck or export.
  • Keep the rollback or recovery path boring: revert reference, validation rerun, first responder, and owner for stakeholder clarification.
  • Link to durable evidence instead of pasting every log line into the packet.

Example: the packet I want in the release comment

Imagine a release that changes a finance-facing revenue dashboard. The code diff is small, but the release touches one dbt model, one semantic definition, and two dashboard cards.

Analytics release evidence packet
Release: revenue dashboard net revenue definition update
PR link: repository pull request #418
Changed assets:
- dbt model: mart_finance_revenue
- semantic definition: net_revenue excludes refunded order lines after settlement
- dashboard cards: executive revenue scorecard / Net revenue by week and Revenue mix

Validation evidence:
- CI: lint, unit tests, dbt compile, and changed-model build passed
- dbt comparison: mart_finance_revenue row count unchanged for validation slice
- metric comparison: net revenue moved -0.42% for 2025-01-06 to 2025-01-19, expected from settled refunds
- dashboard screenshot diff: only Net revenue by week and Revenue mix cards changed
- owner review: finance analytics lead approved the validation slice and release note

Release comment:
- visible change: net revenue may decrease slightly for weeks with settled refunds
- not changing: booked gross revenue, customer count, and order volume cards
- stakeholder note: finance review should use the release comment if January revenue is compared to last week's deck

Rollback / recovery:
- rollback reference: revert PR #418 and restore previous semantic definition artifact
- recovery check: rerun dashboard validation slice after rollback
- first responder: analytics engineering owns rollback; finance analytics lead owns stakeholder clarification

The pull request and CI run still hold the delivery evidence. The dashboard screenshot still proves the visible output. The owner approval still belongs to the person accountable for the finance interpretation. The packet ties those records together so the approval can be reconstructed without searching five tools.

I check the expected visible movement first.

If net revenue moves by about half a percent for the validation slice and the owner agrees that the movement comes from settled refunds, I have a release decision I can defend. If the same release has green tests but no expected movement, I still do not have enough evidence.

I link the dashboard release checklist, the dbt deployment record, and Azure DevOps delivery checks in the same approval record. The detailed checks stay in those records.

Tradeoffs

  • Breaks when: every low-risk copy edit, label change, or exploratory dashboard tweak gets the full packet → Mitigation: reserve the strict packet for metric definitions, executive dashboards, finance-facing marts, and decision-critical semantic changes.
  • Breaks when: the packet turns into a stale template nobody reads → Mitigation: keep only evidence someone would need during rollback, dispute, or stakeholder explanation.
  • Breaks when: links point to expiring CI output, private chat threads, or screenshots nobody can find later → Mitigation: keep the approval record in the pull request, release note, or repository-backed artifact, and link only evidence that will still be available when the number is questioned.
  • Breaks when: the change cannot be cleanly rolled back because it includes a source correction or historical backfill → Mitigation: record the recovery path instead: affected surfaces, restatement window, validation rerun, communication owner, and first responder.

Close

Next step: Pick one decision-critical analytics release and write the packet you would want to read three weeks later: changed assets, validation evidence, owner approval, stakeholder note, and rollback or recovery path.

I’d be glad to compare which approval evidence your team could still retrieve three weeks after a release.