MR Process Visibility: reviewer roulette, approval resets, and review timeline
## Problem
GitLab's internal MR review process generates rich workflow data that is currently not available in any queryable form. Teams have no visibility into:
- **Reviewer roulette composition** — how many engineers are available at any given time, and how this evolves over time
- **Approval reset events** — when a file change invalidates a CODEOWNER approval (particularly from the `*` catch-all rule), how frequently this happens and what the downstream cost is on review cycle time
- **MR review timeline** — time to first review request, time to first review, time to first approval, total cycle time
A past attempt to surface some of this data used Sisense/Snowflake with system comment parsing as a workaround — a fragile approach with high maintenance cost.
The need was surfaced directly by Thong Kuah (`` `@tkuah` ``, Principal Engineer, Tenant Scale) in a 1:1 interview in February 2025 as part of the MR Cycle Time Improvement initiative (https://gitlab.com/gitlab-org/gitlab/-/work_items/508116#note_2372951203). He identified two compounding problems:
1. **Too many required approvals** — added as compliance requirements, now getting out of hand
2. **Approval resets create an n² process** — changing a file that was already approved forces re-approval from all CODEOWNERS, making the only viable mitigation "keep MRs smaller"
His explicit ask to Development Analytics: _"Have data about required approvals in Snowflake (to be able to compute average number of reviews)"_. That was ~14 months ago and we have not acted on it yet. His subsequent work on reducing the `*` CODEOWNERS rule (https://gitlab.com/gitlab-org/gitlab/-/work_items/594402) makes this even more timely.
The merge request review process was also formally identified as a `group::development analytics` responsibility when the Engineering Productivity team was dissolved (https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/work_items/582).
## Goals
1. **Audit available data sources** — GitLab REST/GraphQL API, system notes, ClickHouse, Snowflake, the gitlab-roulette static site
2. **Identify gaps** — which events have no structured representation (e.g. approval reset system notes are unstructured text, reviewer assignment is not a queryable event stream)
3. **Prototype structured data collection** for the highest-value events
4. **Deliver a Grafana dashboard** covering:
- Reviewer roulette availability over time (pool size, OOO rate)
- Approval reset frequency and rate
- MR review timeline (time to first review, time to first approval)
## Related
- https://gitlab.com/gitlab-org/gitlab/-/work_items/508116#note_2372951203 — Interview with Thong Kuah on MR cycle time pain points (Feb 2025)
- https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/work_items/332 — MR workflow automations roadmap (historical EP context)
- https://gitlab.com/gitlab-org/gitlab/-/work_items/594402 — Reduce `*` CODEOWNERS rule (`` `@tkuah` `` — direct beneficiary of this data)
- https://gitlab.com/gitlab-org/quality/analytics/team/-/work_items/31 — Dogfood intelligent reviewer selection
- https://gitlab.com/groups/gitlab-org/quality/analytics/-/epics/33 — Expand ClickHouse data collection (broader initiative this fits within)
epic