← all talks

← → move · D light/dark · . blank

Something new on your pull requests

Every Time It Was Wrong

What the reviewer does to your PR, and how we know whether it is any good.


Tjakoen Stolk

When your PR is sitting waiting for review

it leaves up to six comments on the lines they are about it can hold the merge when something really is broken it cannot approve ever. That is still a person. Two tools run the same reviewer. The label on the review says which one wrote it.

First, the boring question

99% of its comments were right. 1,363 of them, graded one at a time against what actually happened to the code. Which is the least interesting thing about it.

Because we have all been sent the accurate one

a tool that comments on everything you scroll past all of it this one you read all of it

So most of the work is throwing things away

six reviewers reading at the same time checks that throw things out the next slide it argues back against its own findings six comments everything it could have said what it actually says

Three ways a comment dies before you ever see it

what the reviewers found what is left the ticket askedfor exactly this someone alreadysaid it it cannot say whatwould break that is the point of the PR a reviewer, or you, in a reply "this looks wrong" is not enough On a close call it stays quiet. A wrong comment costs more than a missed one.

Then whatever survived gets attacked on purpose

a surviving finding a second reader whose only job is to kill it, and which cannot see the case for it it survives it is deleted you see it nobody ever does If the second reader cannot decide, the answer is no.

It is not fire and forget

you it ask it a question push a fix close the thread, say nothing it answers you it reads the code as it is now, then closes it it still reads the code before believing you

The limits, and they are not going to move

it may leave comments on lines hold a merge open it may not approve merge push anything, ever close or reopen your PR The right-hand column is not a promise. It is blocked before it runs. In every mode, whoever is asking, including me asking for it directly in writing.

And when something goes wrong on its side

the six reviewers on your change donedonedone donedone did not finish Then it cannot tell you the PR passed. Passing is a claim about coverage and it just lost some. The summary names the missing check and what it leaves uncovered, in your terms rather than its own.

Now the part we did not expect

was it right? on a line 99% in the summary 99% did anyone do anything about it? on a line 92% in the summary 32 to 43% Same run, same quality. The only difference is where it was printed.

We only know that because of this loop

it leaves a comment every one is written down graded later: did you fix it, or was it wrong? scored per topic, so a bad one cannot hide in an average fix one reviewer re-run it on old pull requests it cannot get past this on its own It can tell me it was wrong. It does not get to decide what to do about that.

Every comment ends up in one of these, and they do not all count

what became of it you fixed it it was wrong you merged past it you explained, fairly the PR was abandoned Was it right? fixed, out of fixed plus wrong. Low here means fix the reviewer. Did anyone act? fixed, out of fixed plus ignored. Low here means move the comment. counted in neither, because neither says the comment was any good

Eight pieces, and only three of them run on their own

runs on its own nobody is watching finds PRs waiting on review chases threads nothing told us about settles the log once a PR lands hourly hourly 05:00 runs only with a person there because each one either costs real money or makes a decision queues them aschips to click reviews the PRand posts answers you, checksyour fixes tunes thereviewer files finishedsessions Nothing in the top row can write a comment, change a rule, or touch the repo. They notice things and hand them over. Everything that speaks needs somebody present.

Everything you have just seen, joined up

the review, on a clock your PR ispicked up what was asked,what was said read aroundthe change six reviewers,at the same time sort, thenargue back five rules, thencheck itself after it posts it posts it answers whatyou ask it checks your fixagainst the code every commentwritten down it watches foryour reply later, and separately each one isgraded the score,per topic re-run it onold pull requests fix onereviewer filled: the one a person decides

Nobody starts any of this by hand

what happens how it is noticed what runs a ticket moves to code review you reply to a comment you push a fix you close a thread, saying nothing the PR merges a check, every hour straight away straight away nothing fires. Hourly. overnight it is queued, someone clicks it answers you it reviews just the new code it reads the code anyway your comments get graded

And none of it was designed up front

the first version what it is now going to look every half hour one number for right and acted on writing down only the line comments no limit on how long a run could take →→ →→ it tells us the moment it happens two numbers, kept apart writing down all of them a clock, and it gives up out loud Each one needed shipping the wrong version first, then measuring it.

That is the whole thing

It will be wrong sometimes. Tell it, and the next one gets better.

Reply the way you would to a person. That reply is what gets graded, and it is the only thing that says which reviewer to fix.


The judgment is human. The typing, by design, is not.

1 / 18 00:00

    Next

    Arrows here drive the main window · T resets the clock · the clock turns accent past 20 minutes