Skip to content

Instantly share code, notes, and snippets.

@LarryUllman
Last active January 25, 2024 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LarryUllman/574d9160a171fc13ff278f16d9887d44 to your computer and use it in GitHub Desktop.
Save LarryUllman/574d9160a171fc13ff278f16d9887d44 to your computer and use it in GitHub Desktop.
Insights example

Insights example

The table presents a sequence of events for a PR from creation to merge. Note that the stats are only computed when the PR is merged, not at each individual step.

Event Step Insights impact
1 Author creates a PR in draft state that adds 10 lines of code and deletes 5 lines of code Lines of code added increases by 10 for Author; lines of code deleted increase by 5 for Author
2 Author publishes the PR, making it ready for review Starts the virtual timer for publish to merge time calculation
3 Author requests reviews from three people Starts the virtual timer for response time calculation
4 Reviewer A requests changes on the PR PRs reviewed increases by 1 for Reviewer A; Reviewer A response time = time at event 4 - time at event 3; wait time until first review for Author = time at event 4 - time at event 2
5 Reviewer B leaves a comment on the PR PRs reviewed increases by 1 for Reviewer B; Reviewer B response time = time at event 5 - time at event 3
6 Author makes updates, and re-requests reviews from Reviewers A and B Starts a new virtual timer for response time calculation
7 Reviewer A leaves a comment on the PR PRs reviewed does not change; Reviewer A response time = time at event 7 - time at event 6
8 Reviewer B leaves a comment on the PR PRs reviewed does not change; Reviewer B response time = time at event 8 - time at event 6; review cycles for Reviewer B = [(event 8, event 6), (event 5, event 3)] (count = 2)
9 Author makes updates, and re-requests a review from Reviewer A Starts a new virtual timer for response time calculation
10 Reviewer A approves the PR PRs reviewed does not change; Reviewer A response time = time at event 10 - time at event 9; time waiting on reviews for Author = (time at event 4 - time at event 3) + (time at event 7 - time at event 6; review cycles for Reviewer A = [(event 10, event 9), (event 7, event 6), (event 4, event 3)] (count = 3)
11 Author merges the PR PRs merged increases by 1 for Author; publish to merge time for Author = time at event 11 - time at event 2; max review cycles for Author = max(3, 2) ⇒ 3

Four calculations feed into the PR author's aggregated median statistic:

  • Wait time to first review, how long the author waited until anyone reviewed their PR after it was published/ready for review
  • Publish to merge time, how it took for the PR to be merged after it was published/ready for review
  • Review cycles until merge, the max number of review request/response pairs for a single a reviewer until the PR was merged
  • Time waiting on reviews, the sum of time spent waiting on anyone to review the PR

Note that we didn’t count the time between event 10 and event 9 here because there was a review from Reviewer B on the PR—so the author wasn’t waiting on reviews during this time. If the Author re-requested a review from both Reviewer A and Reviewer B in event 9, we would also add time at event 10 - time at event 9 into the computation above.

Response time to review requests is computed for each reviewer on each review as review time - review request time. Each computed response time factors into the reviewer's aggregated median statistic.

In the above flow, Reviewer C did not participate, creating no statistical impact.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment