Stop Waiting for a Senior Dev to Appear: The Case for Async-First Code Review
Photo: developer writing detailed notes on laptop with code on screen, via ilarge.lisimg.com
Picture the scene. A junior engineer opens a pull request on a Tuesday afternoon. They've done the work, written the tests, added a description. Then they wait. And wait. By Wednesday morning, the PR has two emoji reactions and a comment that says 'looks good to me' from someone who clearly didn't read it, and one comment from a senior dev that says 'can we discuss?' — which means another thirty minutes of calendar tetris to find a time that works.
By the time the review actually happens, the engineer has moved on mentally, context has evaporated, and the 'discussion' is a real-time defense of decisions made four days ago. Nobody learns anything useful. The code ships anyway.
This is not code review. This is code review theater.
Why Synchronous Review Is Broken by Design
The pull request as a concept was always meant to be asynchronous. The whole point is that you submit work, someone reviews it on their own time, and feedback accumulates in a written record that everyone can reference. Somewhere along the way, engineering culture turned it into a live performance — a thing you schedule, defend, and survive.
The synchronous review creates a specific set of problems that rarely get named explicitly.
First, it creates an availability dependency. Junior engineers can't move forward until a senior engineer is free. Senior engineers get pulled into review cycles at unpredictable times, fragmenting their own deep work. The whole team's velocity becomes hostage to calendar availability.
Second, it compresses the review into a conversation rather than a document. Verbal feedback is ephemeral. The junior engineer takes notes, maybe, but the reasoning behind the feedback — the architectural context, the pattern it violates, the alternative approaches — lives in the conversation and nowhere else. The next time a similar decision comes up, the institutional knowledge has to be reconstructed from scratch.
Third, and maybe most importantly, it creates performance anxiety that actively inhibits learning. Being asked to defend your code choices in real time, to someone more experienced, while they're looking at your screen — that's not a learning environment. That's a stress test.
What Async-First Actually Means
Async-first code review isn't the same as async-only. It means the default mode is written, time-shifted, documented commentary — and synchronous conversation is reserved for genuinely complex decisions that benefit from real-time back-and-forth.
In practice, this means a few things:
Reviews are written like they'll be read by someone who wasn't in the room. Because they will be. Good async review comments explain the why behind the feedback, not just the what. 'This should be extracted into a helper function' is a synchronous comment — it prompts a question. 'This logic is being duplicated in three places; extracting it makes future changes safer and signals to the next engineer that this is a shared concern' is an async comment — it teaches.
Response windows are explicit, not implied. One of the failure modes of async review is that 'whenever you get to it' becomes 'two weeks from now.' Teams that do this well set explicit review SLAs — something like a 24-hour first-response window — and treat them as seriously as they treat sprint commitments.
Review templates do real work. A blank PR description is an invitation for superficial review. Teams that get async review right use structured templates that prompt reviewers to think about specific dimensions: correctness, performance implications, security considerations, test coverage, and architectural fit. The template makes thoroughness the default.
The Junior Engineer Dividend
Here's the part that doesn't get talked about enough: async-first code review is dramatically better for junior engineers, and not just because it's less stressful.
Written review feedback is a learning artifact. A junior engineer who gets three thoughtful written reviews a week accumulates a library of reasoning — documented explanations of why certain patterns matter, how experienced engineers think about tradeoffs, what the codebase's implicit standards actually are. That's something you can reference. You can search it. You can share it with the next junior engineer who joins the team.
Verbal feedback evaporates. Written feedback compounds.
There's also something important about the time-shifted nature of async review that levels the playing field. When you're not being watched in real time, you can think before you respond. You can look something up. You can ask a better question. The power dynamic that makes synchronous review uncomfortable for junior engineers is significantly reduced when the medium is text and the timeline is hours rather than minutes.
A Framework for Reviews That Don't Suck
If you want to shift your team toward async-first review, here's a practical starting point:
For the author: Write your PR description as if the reviewer has no context. What problem does this solve? What alternatives did you consider? What are you uncertain about? Where do you want focused attention?
For the reviewer: Leave comments at three levels — blocking (must change before merge), non-blocking suggestions (worth discussing but not merge-blocking), and educational notes (context or patterns worth knowing, no action required). Label them explicitly.
For the team: Agree on a review SLA and actually honor it. Nothing kills async culture faster than PRs that sit unreviewed for a week. If reviews are falling through the cracks, that's a workload problem that needs addressing, not a reason to go back to synchronous.
For senior engineers: Treat your written review comments as documentation. The explanation you write for one junior engineer will be relevant to the next one. The ten minutes you spend writing a thorough comment today saves thirty minutes of repeated verbal explanation next month.
The Spell Worth Casting
At Cadabra, we think a lot about what it means to build software that actually helps teams work better rather than just adding complexity. Async-first code review isn't a tool — it's a cultural posture. It's the decision to treat written communication as the primary medium for technical collaboration, and synchronous conversation as the exception rather than the rule.
The teams that get this right aren't just shipping faster. They're building a body of written institutional knowledge that survives turnover, scales with growth, and makes every new engineer who joins a little bit more capable a little bit faster.
That's not rubber duck debugging. That's the real thing.