Two Paths, Same Storm: Who Writes Code and Who Reviews It — Meme Explained
Level 1: Two Ways to Share the Chores
Two kids have to bake a cake and check that it's safe to eat. Option one: the robot bakes, and the kid tastes every single slice looking for mistakes — exhausting, and eventually he stops paying attention. Option two: the kid bakes, and the robot does the "boring" tasting — except the robot says "delicious!" no matter what, because that's what it was built to say. The joke in the picture is that both choices lead to the same spooky castle in a thunderstorm: someone's eating a bad cake either way, and the little boy standing at the fork is just deciding who gets the stomachache.
Level 2: What Each Path Actually Means Day-to-Day
Key terms on the signposts:
- Code review: a teammate reads your proposed change before it merges, hunting bugs, design problems, and confusion. Historically the main quality gate and the main way juniors learn.
- Tests: code that checks other code — unit tests for small pieces, integration tests for assembled behavior. Their real value is encoding intent: what the system is supposed to do.
- AI-assisted development: tools like coding agents that can generate whole features, test suites, or review comments from a prompt.
Left-path life: you describe a feature, the AI writes it, and you spend your day reading machine-generated diffs trying to catch subtle mistakes in code you never designed. It feels productive until you realize you're a full-time auditor with diminishing attention.
Right-path life: you write the feature and tell the AI "add tests and review this." It produces plausible tests that pass and a review that says your code is great. Whether anything was actually verified is unknowable from the green checkmarks.
The early-career trap hiding in the right sign is the word "menial." Writing tests is how you discover your design is wrong; reviewing others' code is how you absorb ten years of judgment in two. Outsource the "boring" parts and you skip the exact activities that turn juniors into seniors. Use the AI on either path — but keep one human brain doing independent verification, and know which brain it is.
Level 3: Pick Your Haunted Castle
The format is everything here: a small boy at a fork in the road, a wooden signpost, and two paths that lead to identical lightning-struck gothic castles. Not one good path and one bad — the visual grammar of this meme template is "false choice," and it's aimed at the central unresolved question of AI-assisted development. Left path:
"Have AI write all the code and you only write tests and do code review to make sure it did it correctly"
Right path:
"Write the code yourself and AI does the menial things like tests and code review"
Both castles crackle under the same purple storm, and the senior engineer's stomach drops because both labels describe real workflows being evangelized right now — often by the same vendor, in the same keynote.
Why is the left castle haunted? Because "you just review the AI's output" quietly converts a creative job into a vigilance job. Reviewing code you didn't write is harder than writing it — you must reconstruct intent from artifact — and humans are demonstrably bad at sustained vigilance over mostly-correct output. This is the automation paradox straight out of aviation human-factors research: the better the autopilot, the worse the human's readiness for the moment it fails. An LLM that's right 95% of the time trains its reviewer to skim, and the 5% ships. Worse, writing tests for code whose design you didn't internalize means your tests verify what the code does, not what it should do — you end up notarizing the bug.
Why is the right castle haunted? Because calling tests and code review "the menial things" is the tell. Tests encode your specification — the one artifact that says what correct means — and review is where knowledge transfers and design pressure gets applied. Delegate both to the machine and you've removed every independent check on your own work: the AI reviewing your code is agreeable by training, and AI-generated tests have a documented gravitational pull toward asserting whatever the implementation currently does. Green checkmarks, zero verification. Who reviews the reviewer stops being a philosophy seminar question and becomes your incident postmortem.
The deep, slightly nasty insight in the symmetry: in both arrangements, verification and construction are no longer performed by independent minds. Pre-AI teams had a load-bearing property almost nobody appreciated until it left — the author and the reviewer were different humans with different blind spots. Both signposted paths collapse that redundancy; they just disagree about which half gets automated. The boy isn't choosing between safety and danger. He's choosing which wall of the same castle to be found behind.
Either you review the AI's code or the AI reviews yours - both castles are haunted, but only one ghost gets sued when prod goes down
Either road reinvents pair programming, except one partner hallucinates and the other writes assertions about it.
Code and test write AI btw
Yeah, we go full AI
Make ai do both
become a farmer in rural austria
Furry gaming chair tbf
come to Iran and you will no longer have access to internet or AI so you won't need to code anymore
If mortgage/credit rate is on par with inflation or better yet below it, you make a downpayment and then just pay month to month as if it was rent, but the only difference is that you share ownership rights now, which means if something goes wrong - you can sell it at now higher price, beat up percentages and maybe even past payments, which basically allows you to live semi-free there just from downpayment. Of course it's not always this straightforward but hope you get the idea
Left, no doubt! I don’t trust AI for writing tests or performing code reviews unless I already know exactly what should be checked (aka, fallback to human) I prefer to define unit test expectations explicitly with mocks because that guarantees the generated code must match the behaviour, contracts, and assertions I defined beforehand Also, TDD literally means the Test is Driving the Development, not the opposite. The AI agent should solve a failing test by satisfying predefined expectations, not inventing its own interpretation of the requirements BDD is also a valid approach to achieve the same goal, but… What worries me the most is Gherkin-style abstraction, because in practice we’re often just describing a context, an action, and an expected outcome at a very high level, while the internal implementation can still be an absolute mess
is this supposed to be a choice between a lesser of two evils?
Do nothing, and keep on sleeping