Review Cycles
The average number of “changes requested” reviews a PR receives before it gets merged. Bucketed as 0 / 1 / 2 / 3+.
- Family
- Flow & Cycle Time
- Cadence
- Per PR, aggregated
At a glance
Review Cycles counts how many rounds of “changes requested” each PR went through. A PR merged with zero changes-requested reviews has 0 cycles (a clean first-pass). One round of “please fix X” before approval is 1 cycle. Two rounds is 2. Three or more is 3+.
It is one of the dashboard’s better diagnostic metrics — a high cycle count is almost always either too-big PRs, unclear specs, or mismatched author and reviewer expectations. Each of those has a different fix.
Formula
Review Cycles per PR = number of CHANGES_REQUESTED reviews before merge Bucketed as 0 / 1 / 2 / 3+ for aggregate views
The PR record stores approved_at (the first APPROVED-review timestamp) and review_cycles (the count of CHANGES_REQUESTED reviews).
How GitKraken Insights calculates it
For each merged PR, the backend counts reviews with state CHANGES_REQUESTED that occurred before the PR was merged. That count is stored on the PR record as review_cycles.
For aggregate views (team-level, org-level), the metric is shown either as the mean number of cycles, or as the distribution across the four buckets (0 / 1 / 2 / 3+) as stacked bars or breakdown lines.
The buckets are the more useful presentation — they show the shape of the problem rather than just the average. A team averaging 1.0 cycles could be evenly distributed across the buckets or could be “everyone gets exactly 1 cycle.” Those need different fixes.
Why it matters
Review Cycles tells you about a few different problems at once:
- PR size. Big PRs accumulate more reviewable surface area, more review feedback, more cycles. High cycles usually correlate with high effort scores.
- Spec clarity. When developers don’t have a clear spec, the review becomes the spec. Cycles spike.
- Reviewer-author calibration. A reviewer who reflexively requests changes on every PR will inflate cycles regardless of PR quality.
- Style guide drift. PRs failing for inconsistent style or lint should not show up here — but if your team’s automation isn’t catching those, they will.
Compared to Cycle Time, Review Cycles is more causal. Cycle Time tells you it took 5 days; Review Cycles tells you it took 5 days because of three rounds of back-and-forth.
How to read it
- < 0.5Strong — most PRs go through clean. Code quality at submission is high.
- 0.5 – 1.0Healthy — typical for orgs with good but not great PR discipline.
- 1.0 – 2.0Fair — every PR averages a round of revisions. Look at PR size and spec clarity.
- > 2.0Needs attention — chronic back-and-forth. PRs are likely too big, or specs are too thin.
The distribution matters as much as the mean. A team with 60% at 0 cycles, 30% at 1, and 10% at 3+ has a small problem cohort. A team with 50% at 0, 30% at 1, 15% at 2, 5% at 3+ has the same mean but a worse tail.
Settings that affect it
None. Review Cycles is a measurement.
How to improve it
- Split big PRs. The single most effective intervention. PRs that take 15 minutes to review get 0 cycles. PRs that take 90 minutes to review get 3.
- Write better PR descriptions. A PR with a clear “what / why / how to test” description gets approved faster than one with title only. AI-assisted PR descriptions are a low-effort win here.
- Tighten the spec before coding. PRs that change scope during review are PRs that get cycles. Get spec alignment in the design stage, not the review stage.
- Calibrate reviewers. If one reviewer’s PRs always get more cycles than peers, have a quick conversation. Reviewer perfectionism is a fixable habit.
- Automate style enforcement. Lint failures, formatting nits, and type errors should never be in a human review. If they are, your CI isn’t catching them.
Limitations and gotchas
- Doesn’t measure the quality of feedback. A PR with three cycles that resulted in genuinely better code is a healthy outcome; a PR with 0 cycles that shipped a bug is not. Use Review Cycles alongside CFR.
- Doesn’t count dismissed reviews. A “changes requested” that gets dismissed without action still counts as a cycle.
- A PR that bypasses formal review (e.g. small fix from a senior IC, merged after a comment) shows as 0 cycles.
FAQ
A team has high Review Cycles but low CFR. Are we just being too picky?
Possibly, but probably not. Thorough review catches real problems before they ship — high cycles + low CFR is the trade. The interesting question is whether the time cost of those cycles outweighs the bug-prevention value.
One developer’s PRs have 4× the cycles of the team average. Is that a performance issue?
Maybe, but check the work first. PRs in unfamiliar domains, big refactors, or risky changes naturally accumulate review feedback.
Does this count “approving but with suggestions” reviews?
No. Only formal CHANGES_REQUESTED reviews count.
Related metrics
| Metric | Relationship |
|---|---|
| First-Pass Rate | The “0 cycles” percentage, expressed as a positive metric. |
| Cycle Time | Long Review phase is usually high Review Cycles. |
| Effort Score | High-effort PRs tend to have more review cycles. Track together. |
Where it appears
/ai-adoption/ai-impactReview Cycles bucketed breakdown is available as a dimension on Cycle Time and PR Volume charts.- PR drill-down tables — every PR drill-down has a Cycles column.