Pool of Shame: Mocked for Duplicating Code Instead of Abstracting
Why is this CodeQuality meme funny?
Level 1: The Pool Gang-Up
Picture a swimming pool where everyone suddenly stops, forms a circle around one kid, points, and laughs — because he built two separate sandcastles instead of one big castle with shared walls. The kid looks miserable, the crowd looks delighted, and that's the whole joke: programmers can be just as cliquey as a schoolyard, ganging up over rules that sound very important but are really just fashion. And the kicker? The kid's two little sandcastles are still standing — while big shared castles have a funny habit of collapsing the moment someone changes one wall.
Level 2: DRY, WET, and Other Pool Chemicals
The vocabulary the mockers are weaponizing:
- DRY (Don't Repeat Yourself): the principle that each piece of knowledge should live in one place. Sensible — until it's applied to code that merely looks similar rather than meaning the same thing.
- WET ("Write Everything Twice"): the tongue-in-cheek counter-principle — tolerate duplication until a pattern has proven itself, usually by the third occurrence (the "rule of three").
- Base class: in object-oriented programming, a parent class that shared behavior is hoisted into, so children
inheritit. Powerful, but it hard-wires a hierarchy: change the parent and every child feels it. - Generics: writing code parameterized over types —
List<T>works for integers, strings, anything — so one implementation serves many cases without copy-paste. - Abstraction: extracting the common shape of several concrete things into one reusable form. The hard part isn't the mechanics; it's deciding whether things are actually the same.
Every junior hits this rite of passage: you copy a function, feel vaguely guilty, and a reviewer pounces. Here's the secret the pool mob won't tell you — choosing when to abstract is the senior skill, not knowing how. Duplicating code is a reversible decision; a published base class with five subclasses is not. When in doubt, wait for the third duplicate.
Level 3: Duplication Is Cheaper Than the Wrong Abstraction
Eight grinning swimmers form a perfect circle in the yellow-tinted pool, every finger aimed at the one wide-eyed man standing chest-deep in the middle. Their taunts are pure code-review theater:
"where's your base class, loser?" "hahaha, he duplicated code that could have been abstracted" "i bet he doesn't even know how generics work"
The meme works because every working engineer has stood in that water. But the senior reading flips the joke: the mob is wrong, or at least wrong often enough that their confidence is the real punchline. Sandi Metz's line — duplication is far cheaper than the wrong abstraction — exists precisely because the industry spent two decades worshipping DRY until it curdled into premature abstraction. The pattern is depressingly repeatable: two functions share five lines, someone extracts a BaseProcessor, a third use case arrives that almost fits, so the base class grows a boolean flag, then a strategy hook, then a generic parameter, and eighteen months later nobody can change anything without re-deriving the entire inheritance tree in their head. The copy-paste guy? He shipped. His two duplicated blocks diverged naturally, as duplicated code often legitimately does, because they were never actually the same concept — they just looked similar for one sprint.
The circle-of-pointers composition captures something true about code review culture: shaming clusters around easily-named sins. "Duplicated code" is visible in a diff; "abstraction that will calcify into load-bearing technical debt" is invisible until it's too late to laugh about. So reviewers optimize for the critique that makes them look senior in the thread, not the one that saves the codebase. Add the OOP-purist flavor — base classes and generics as status symbols rather than tools — and you get exactly this pool: a social hierarchy enforced through pattern vocabulary, where knowing the names of abstractions outranks judging when to deploy them. The miserable man in the middle isn't being reviewed. He's being initiated.
Description
The classic 'people pointing and laughing in a pool' comic illustration: eight grinning swimmers in a yellow-tinted public pool form a circle around one miserable, wide-eyed man standing chest-deep in the middle, all pointing at him. Overlaid captions give the mockers dialogue: "where's your base class, loser?", "hahaha, he duplicated code that could have been abstracted", and "i bet he doesn't even know how generics work". The meme lampoons OOP-purist code review culture, where copy-pasting code instead of building base-class hierarchies and generic abstractions invites public ridicule - while seasoned engineers know premature abstraction is often the worse sin (WET vs DRY, 'duplication is cheaper than the wrong abstraction')
Comments
22Comment deleted
Laugh now - in six months that 'missing' base class would've grown nine template parameters and a config flag, and the copy-paste guy ships while you refactor
Claude, what are they talking about? Comment deleted
https://youtu.be/wo84LFzx5nI Comment deleted
first interpretation: vibecoder being shamed on not knowing basics second interpretation: simple code chad being shamed on making code simple and readable both interpretation fail basic logic. the first one fails because vibecoder has clean water around him and all other piss their pants. should be vise versa. the second one contradicts the definition of chad. sad person ashamed of their simple code cant be a chad. so the real interpretation of the meme is unclear. ps do I sound like llm? Comment deleted
Hobbyist junior that was not taught oop and used what simply worked but now faces it in the workplace Comment deleted
Perfect example is this video https://youtu.be/pCbZYe2yoDo Comment deleted
This. The meme is thrash. Comment deleted
Same. So i came to the third interpretation: someone cant meme Comment deleted
Stop with those vibevoders Meme laughs at application of design principles and approaches without even considering any need for them Do you see any context why they are suggesting any of it? Yeah Comment deleted
people with abstract thinking ability at the level of a dishwasher from '90s often reject any abstractions by calling them redundant, and their trash code "beautifully simple" over-engineering is also a thing, but it's impossible to say whether the author of the meme is a case of the latter or the former without seeing the code Unfortunately, vibecoders and other Dunning-Kruger peakers alike will use memes like that to feed their delusions of grandeur Comment deleted
1. If his code is beautifully simple, then why does he feel bad? That's the "Chad" case. 2. One does literally say "he duplicated the code that could have been abstracted". The abstraction level is debatable, ofc, but the fact of the occurrence of code repetition is a hint that the probability that the code is shit is higher. Comment deleted
I’m so tired of people’s attempt to make abstractions to handle 100 small cases "but besides this small nuance the rest is exactly the same" being repeated again and again… No, there’s tons of cases when big portions of code can be duplicated instead of god-like base class abstractions Comment deleted
I'm not talking about godlike base classes. Those are garbage. In a broader sense (not just in terms of interfaces, abstract classes and stuff), any move of duplicated code to a function that's not made precisely for that single action with 100 lines of case-specific code, is an abstraction too. Comment deleted
Image has no context People all around suggest what guy in clean water should change and name him names Doesn’t look like a sane review process to me Comment deleted
> sane review process Shall we create a ticket with a request for more context for that unclear task of understanding the meme? Comment deleted
Let’s setup a real quick meeting first, fill in checklist in confluence and agree on epic which will contain intended scope 🙏 Comment deleted
You assumed the person in the middle is chad who's never upset. He's just a guy that wanted to write simple code and was shamed for it therefore he is sad. I like the meme Comment deleted
You sound like a terminally online person with optimisation OCD and analytical mind. Btw i have a 3rd interpretation: premature abstraction is the root of all eveil, YAGNI Comment deleted
Or maybe someone who doesn't use OOP in the circle of C# users Comment deleted
If you don’t have 3 layers of boilerplate - you are not doing it right Comment deleted
overengineering vs traditional engineering Comment deleted
I think the main reason is that there are a huge number of low-quality js and python programmers without any basic cs knowledge and for whom abstractions are some kind of abstruse and unnecessary things Comment deleted