Skip to content
DevMeme
7388 of 7435
Pool of Shame: Mocked for Duplicating Code Instead of Abstracting
CodeQuality Post #8097, on Jun 11, 2026 in TG

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 inherit it. 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

22
Anonymous ★ Top Pick 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
  1. Anonymous ★ Top Pick

    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

  2. @dude_s7 4w

    Claude, what are they talking about?

  3. @Algoinde 4w

    https://youtu.be/wo84LFzx5nI

  4. @yevhen_k 4w

    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?

    1. @Algoinde 4w

      Hobbyist junior that was not taught oop and used what simply worked but now faces it in the workplace

      1. @TarasPushkar24 4w

        Perfect example is this video https://youtu.be/pCbZYe2yoDo

    2. @hy60koshk 4w

      This. The meme is thrash.

    3. @dzek69 4w

      Same. So i came to the third interpretation: someone cant meme

    4. dev_meme 4w

      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

      1. @wielki_arcymistrz 4w

        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

      2. @hy60koshk 4w

        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.

        1. dev_meme 4w

          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

          1. @hy60koshk 4w

            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.

            1. dev_meme 4w

              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

              1. @hy60koshk 4w

                > sane review process Shall we create a ticket with a request for more context for that unclear task of understanding the meme?

                1. dev_meme 4w

                  Let’s setup a real quick meeting first, fill in checklist in confluence and agree on epic which will contain intended scope 🙏

    5. @Art3m_1502 4w

      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

    6. @TarasPushkar24 4w

      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

  5. @callofvoid0 4w

    Or maybe someone who doesn't use OOP in the circle of C# users

  6. @agrubskiy 4w

    If you don’t have 3 layers of boilerplate - you are not doing it right

  7. Егор 4w

    overengineering vs traditional engineering

  8. @posttrau 4w

    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

Use J and K for navigation