← Workflows

阅读中文版本

Feature Freeze Stabilization Workflow

Announce a freeze, convert the team to stabilization mode with daily bug triage, and measure exit by open-blocker burn-down to zero.

beginner~20 minreleaseprocessquality

Objective

Drive a release candidate from feature freeze to shippable through daily triage, targeted fixes, and explicit exit criteria.

Environment

  • A release branch under freeze
  • A bug tracker with severity labels
  • The team available for a stabilization period

Steps

1. Announce the freeze with exit criteria

Declare the freeze date and define exit as zero open blockers plus zero open criticals older than 48 hours, published where everyone sees them.

Expected state: The criteria are visible and agreed before the freeze starts, not negotiated during it.

2. Switch to daily triage

Hold a fifteen-minute daily triage over every new and existing issue against the release: blocker, critical, deferred, or not-a-blocker, with an owner for each.

Expected state: Every open issue has a classification and an owner by the end of each triage.

3. Fix in priority order

Assign capacity to blockers first, then criticals, with deferred items recorded for the next cycle rather than silently dropped.

Expected state: The burn-down chart shows blockers closing faster than they open on most days.

4. Verify fixes against the candidate

Require every stabilization fix to be verified on the current RC artifact, not on a developer build, before the issue closes.

Expected state: Closed issues reference the RC version where the fix was confirmed.

5. Exit on criteria, not on calendar

Release when the exit criteria hold for a full day, or explicitly reset scope by downgrading a blocker with a documented waiver.

Expected state: The exit decision cites the criteria state, and any waiver is written and owned.

Expected outcome

A stabilization period that ends on measured criteria with a full record of what was fixed, deferred, and waived, instead of ending on fatigue.

Verification

The tracker shows zero open blockers at exit, every closed issue verified on the RC, and the burn-down history attached to the release record.

Cleanup

Convert deferred items into the next cycle plan and archive the triage log with the release.

Freeze ends on criteria, not on fatigue

Stabilization periods drift when exit means everyone is tired of fixing. Publishing exit criteria before the freeze, triaging daily, and burning down blockers converts the period into a measurable trajectory with a defined end.

exit criteria (published day 1):
  open blockers            = 0
  open criticals > 48h     = 0
  held for one full day

day  blockers  criticals  deferred
 1       9         14          0
 4       5          8         11
 8       2          3         17
11       0          1         19   <- one 30h-old critical
12       0          0         19   <- EXIT (criteria held)

Triage every day, including old items

The daily pass must cover previously classified issues too, because a critical sitting untouched for three days is a decision that nobody made. Re-triaging forces the demote-or-fix decision into the open each morning.

Waivers are written, never silent

Sometimes a blocker must ship: the workaround exists, the exposure is bounded. That is a legitimate business call, but only as a documented waiver naming the risk and the owner. Silent downgrades are how freezes rot.