Running a regression cycle
What actually happens in the days before a release: what you re-run, in what order, how long it takes, and what you do when it fails on the final afternoon. Written as a procedure you could hand to somebody, because “do a regression” is not one.
A coach driver does a walk-round before pulling away. Tyres, lights, doors, mirrors, fluid levels.
The same list, every time, in the same order. Not because the coach is expected to be broken, but because the cost of finding out later is a road full of passengers.
That walk-round is a regression testing process. Somebody wrote the list down once, and now anybody can do the check and reach the same answer.
"Do a regression" is not an instruction. This is what the instruction should look like.
What a cycle actually is
Four things, and if any of them is missing you have an activity rather than a process.
- A fixed pack. The cases you re-run every release, chosen deliberately.
- A build that has stopped moving. A release candidate, deployed once, not updated mid-run.
- An order. Highest consequence first, so the news that matters arrives early.
- A record. What ran, what passed, what failed, on which build, by whom.
Why you should care about this
Because the regression cycle is where a release either gets a decision or gets a shrug.
Without a written procedure, the person running it improvises, the results live in their memory, and the answer to "was this tested last release" is a guess. That guess is the thing that fails an audit, loses an argument with support, and makes the same bug shippable twice.
There is also a personal reason. Running a clean cycle is the most visible work a tester does all month. Everyone sees the outcome, so it is worth doing in a way that stands up afterwards.
The procedure
- Freeze the candidate. One build, deployed to the release environment, with the version recorded. Agree that nothing else ships to it until the cycle finishes.
- Check the environment before the product. Log in, load the home page, place one throwaway order. If the basics are broken, stop and fix the environment. Ten minutes here saves a day of false failures.
- Run the highest-consequence cases first. Payment, login, account data, anything irreversible. If one of these fails, the release conversation changes immediately and everybody wants to know now rather than at five o'clock.
- Then run what this release touched. The areas the stories changed, plus anything sharing code with them. The test plan scope section already lists these.
- Then the rest of the pack, in whatever order suits.
- Record as you go, not at the end. Pass, fail, blocked, with evidence attached to the failures. Memory is not a record.
- Triage before fixing. Group the failures. Environment, test data, a genuine defect, or a case that is simply out of date. In practice a good share of them are not product bugs at all, and your run history will tell you which ones fail regularly.
- Re-run only what changed. After fixes, re-run the failed cases and anything the fix could plausibly touch. Not the whole pack, unless the fix was structural.
- Write the two-line outcome. What ran, what is still open, and whether you would ship. That is the input to the release decision.
A cycle nobody can finish in a day is a cycle that gets skipped in the week it matters most.
A real two-day timetable
Say the release is on Thursday and you have Tuesday and Wednesday. Here is how that looks written down, from the gift-card release at Willow Books, a small online bookshop.
RELEASE gift cards, candidate rc-2026-09-04.3
ENVIRONMENT staging, frozen from Tue 09:00. Agreed with Dan (eng).
PACK 84 cases: 22 checkout, 18 account, 14 catalogue, 12 admin,
18 gift card (new this release)
RUNNER Priya
TUE 09:00 smoke the environment
login, home, one throwaway order, one refund ok, 12 min
TUE 09:15 tier 1, money and access (26 cases)
checkout card, checkout Apple Pay, refunds,
login, password reset, address change
result: 24 pass, 2 fail
F1 refund of a part-gift-card order shows 0.00 DEFECT WB-1863
F2 Apple Pay button missing on iOS Safari 17 ENVIRONMENT
TUE 13:30 tier 2, what this release touched (18 gift card + 9 checkout)
result: 25 pass, 2 fail
F3 partial redemption rounds down by 1p DEFECT WB-1864
F4 balance page shows stale balance after use DEFECT WB-1865
TUE 16:00 triage with Dan and Sam
WB-1863 and WB-1864 must fix before release
WB-1865 accepted, caching, note in release note
F2 was a stale simulator, not a product bug
WED 09:00 tier 3, the rest of the pack (31 cases)
result: 30 pass, 1 fail
F5 admin CSV export column order changed DEFECT WB-1866
accepted by Sam, cosmetic
WED 13:00 re-run after fixes for WB-1863 and WB-1864
8 cases re-run (the 2 failures plus 6 that share the money path)
result: all pass
WED 15:00 outcome written
OUTCOME
84 of 84 cases run. 2 defects fixed and re-tested. 2 accepted in writing
by Sam (WB-1865 stale balance, WB-1866 CSV column order).
Recommendation: ship. Known gaps in the release note.
Total time: 9 hours 20 minutes across two days.Notice the shape of it. Two failures out of five were not product defects, the money cases ran first, and the whole thing produced a sentence somebody can act on. That last line about total time is what lets you argue for a smaller pack next quarter.
How to show you know it
- A written procedure. Nine steps on one page, so anybody on the team could run the cycle while you are on holiday.
- A cycle log with times. Proof of what ran and how long it took. It is also the evidence for trimming the pack.
- A triage breakdown. "Five failures: two defects, one environment, one stale case, one accepted." It shows you separate signal from noise.
- A sentence, not a spreadsheet. The recommendation at the end is the deliverable, and it belongs with the record the release rests on.
Questions
How often should we run a full regression cycle?
Once per release for the full pack, plus a short tier-one subset on any hotfix. If your releases are weekly and the pack takes two days, the pack is the problem rather than the schedule.
Do we still need this if everything is automated?
The cycle stays, and most of it becomes a pipeline run. What remains manual is the judgement: triaging failures, checking anything a person must eyeball, and making the recommendation. The procedure above is the same either way.
What do we do when it fails on the final afternoon?
Triage first, because a good share of late failures are environment or data. Then it is a decision rather than a scramble: fix, accept in writing, or hold the release. Whoever owns the release makes that call, not the tester alone.
Who should run it?
Anybody, which is the point of writing it down. If only one person can run the cycle, the cycle is a single point of failure and a holiday becomes a release risk.