Skip to content
DevMeme
2947 of 7435
The Two Moods of a Programmer: Empathy and Unholy Rage
DeveloperExperience DX Post #3256, on Jun 15, 2021 in TG

The Two Moods of a Programmer: Empathy and Unholy Rage

Why is this DeveloperExperience DX meme funny?

Level 1: Toy Assembly Tantrum

Imagine you got a new complicated LEGO set or toy that you have to put together. At first, you look at the instruction booklet and think, “Hmm, this looks tricky, but I’m sure the people who made this toy know what they’re doing. I just need to follow their steps carefully.” You’re being patient and assuming the instructions are good because making a toy like this is probably hard. This is like the programmer in the first picture, calmly trusting that the creators of the code did their best.

Now picture that as you start building, the instructions turn out to be really confusing. Maybe they skip steps or the pieces don’t fit like they’re supposed to. You double-check everything and still, the toy isn’t coming together right. After a while, you get super frustrated. You might throw up your hands and yell, “Who wrote these stupid instructions?! This is garbage! Did a donkey come up with this?!” Maybe you even feel like smashing the toy because it’s so annoying. That’s just like the second picture of the programmer, who has lost his cool and is basically having a tantrum at his computer because the software (the “instructions” he’s following) seems so badly made.

In simple terms, the meme is funny because it shows how the same person can go from very patient to very angry when dealing with something difficult made by someone else. First, you’re polite and understanding, then later you’re upset and blaming them. We’ve all had moments like that – whether it’s assembling a toy, following a recipe, or using a gadget that won’t work right. It’s a relatable human experience: try to be nice and blame yourself at first, but if things keep going wrong, eventually you just burst out in frustration. The developer in the meme is doing exactly that, and it’s exaggerated in a silly way (with medieval phrases like “burned at the stake”) to make us laugh. The core idea is that working with stuff other people made can be hard, and it can make even a calm person suddenly really mad when things don’t go as expected.

Level 2: Respect vs Rant

For a less experienced developer, let’s break down what’s going on here. This meme is about using other people’s code – often in the form of libraries or modules (commonly called third-party dependencies). Instead of writing everything from scratch, developers frequently rely on external packages to save time or to handle specialized tasks. For example, rather than coding your own database engine or image processing algorithm, you pull in an existing library that another team or the open-source community created. This is pretty much daily life in programming: your app might include dozens of such dependencies. Now, using someone else’s code means you have to trust that code. You assume the original developers followed good CodeQuality practices (clear structure, well-named variables, proper error handling) and that they understood the domain well. When everything works, you’re grateful – you might even admire how the library handles a complicated domain. That’s the first “mood” shown in the meme: respectful empathy. The developer in the top panel is basically thinking, “Wow, this problem is complex. If the software behaves oddly, maybe it’s because the problem itself is hard. The devs who wrote this probably had a tough job, and they likely did their best.” This is a generous mindset to have; it’s like giving the benefit of the doubt to the code’s creators.

The developer’s pose in that top image – chin resting on hand, looking thoughtful – visually represents this calm, patient approach. It’s as if he’s studying the screen, trying to understand the logic. Maybe he’s reading documentation or combing through the library’s code on GitHub to see how it works internally. At this stage, a junior dev might recall advice like “don’t immediately blame the tools – try to see if you’re using them incorrectly first.” That’s a fair approach: often problems are a misunderstanding rather than a true bug. Empathy in DeveloperExperience (DX) means remembering real humans wrote this code, and they probably had reasons for their choices. For instance, if a function in a library is really hard to follow, perhaps the problem it solves (like cryptography or video encoding) is inherently complex. The top caption reflects an understanding that software domains can be complicated – meaning certain fields of programming have a lot of tricky details or edge cases that make the code seem elaborate or confusing. A junior developer might not yet know all the reasons why the code is that way, so assuming the best of the original devs is a kind starting point.

Now, the bottom panel illustrates the other extreme mood, which tends to surface after things go wrong. The same developer is now leaning forward, glasses on (perhaps he put them on to really scrutinize the code or error messages), and he’s visibly upset – mouth open in a yell, hand out in an “What is this?!” gesture toward the monitor. The caption in white text captures the raw DeveloperFrustration unleashed: “What the actual $&%# is wrong with these $&%@ing donkeys? This is absolute horsesh*t and whoever wrote this code should be burned at the stake!” This is obviously not a polite or rational response – it’s an overreaction born from hitting a breaking point with the software. Let’s unpack why a developer might get this angry.

Imagine our developer has been trying to use this third-party software and keeps encountering bugs or strange behavior that makes no sense. Perhaps the library is poorly documented: there’s not enough information on how to use it correctly. Or maybe the code is extremely confusing – functions doing things you don’t expect, error messages that are unhelpful, or inconsistent results. After spending hours debugging, it’s easy to run out of patience. This leads to what we see in panel two: the rant. In developer culture, it’s unfortunately common to vent loudly (maybe not in public, but at least to your teammates or in a private chat) when a tool or code frustrates you. The meme exaggerates it to a comical degree by using insults like “donkeys” and medieval punishment imagery (“burned at the stake”), but it’s poking fun at how a usually logical programmer can momentarily lose their cool completely.

Let’s clarify some terms used in the categories and tags that relate to this meme:

  • Dependencies: These are external pieces of code or libraries your project depends on. Using dependencies is like plugging someone else’s work into yours. It’s great because you don’t have to reinvent solutions, but it also means if there’s a problem in that external code, it becomes your problem too. This meme is essentially about dependency troubles — colloquially known as DependencyHell when things go really wrong (for example, version conflicts or major bugs in a dependency can cause huge headaches). When you’re in dependency hell, you might feel exactly like the bottom panel, cursing the maintainers of those libraries.

  • CodeQuality: This refers to how well-written and maintainable the code is. Good code quality means the code is easy to read, well-documented, and works reliably. Poor code quality might mean the code is messy, hard to follow, or full of hacks that break easily. In the meme, the developer’s two moods can be seen as a reaction to perceived code quality. At first he assumes the code quality is fine and any issue is due to complexity. In the second panel, he clearly thinks the code quality is abysmal (“absolute horsesh*t” is a very strong way to say “this code is garbage.”). The swing from trusting the code to condemning it is really a judgment of code quality after experiencing the code in action.

  • DeveloperExperience_DX: This tag is about the experience of developers while developing software (as opposed to User Experience, which is about end-users using the software). A positive Developer Experience might come from well-designed tools, clear documentation, and code that “just works.” A negative Developer Experience is when the tools or code you rely on are frustrating or counter-intuitive. Here, dealing with this mysterious other people’s code started maybe as okay, but turned into a nightmare – a terrible DX – thus the raging reaction. The meme is extremely relatable because many devs have fought with clunky frameworks or libraries that made their job harder, not easier.

  • Other People’s Code: This phrase is practically a trope in programming. There’s an old saying: “Any code you didn’t write is crap; any code you wrote is beautifully structured (until six months later when even you can’t understand it).” It humorously acknowledges that reading code written by others is tough. You don’t know the decisions behind it, and initially it often looks wrong or weird simply because it’s unfamiliar. This meme zeroes in on that universal challenge. The top caption is the developer reminding himself not to jump to conclusions about other people’s code. The bottom caption is him failing to hold that line after the code frustrates him sufficiently.

All junior devs eventually encounter a moment like this: you import a library to do something (say, handle file uploads or parse a data format). You’re using it as documented, but it’s not working as expected. You check your own code, maybe debug step-by-step, and then start suspecting "could the problem be in their code?" It’s a bold thought – as a newbie you often assume the library can’t be wrong, it must be you. But sometimes, it really is the library’s fault! Discovering that can be simultaneously validating and infuriating. Validating because hey, you weren’t doing it wrong after all – there was a bug in the third-party code. Infuriating because now you have to find a fix or workaround for something that shouldn’t have been your problem. That emotional pivot from “I must be missing something” to “This tool is broken garbage!” is exactly what the meme depicts.

This also ties into DeveloperHumor and SharedPain: the reason other programmers find this meme so funny is that it’s a comic exaggeration of a scenario we all know too well. Even as a junior dev, you might have heard senior colleagues crack jokes like “I’m gonna find whoever wrote this and make them fix it at sword-point,” said in a jesting way when a bug is particularly maddening. We don’t actually hunt down developers with swords, of course! It’s just a way to express extreme frustration. The meme uses that kind of over-the-top language to get a laugh precisely because it is over-the-top. It’s taking an internal monologue that many might have (lots of creative profanity) and splashing it on the screen as a caption. For someone new to the field, it’s good to know this is normal developer venting and not to be taken literally. In fact, many programming communities encourage being respectful and understanding when you actually talk to maintainers or other teams about issues. The empathy in the first panel is what we aspire to maintain. The rage in the second panel is what we privately feel sometimes, and then we try to calm down before sending that GitHub issue or Slack message 😅.

In summary, the meme shows a programmer’s two opposite reactions to dealing with tricky external code: first giving empathy (“the domain is hard, the authors did their best”) and later flipping to anger (“this code is awful, its authors must be fools or malicious”). It’s an emotional cycle that even relatively new developers will experience as they work on projects with dependencies. The juxtaposition is funny because of how recognizably true it is – we’ve all had that “Ok, stay calm, it’s probably me...” moment followed by the “Nope, not me, this is just BAD!” meltdown. Being aware of this pattern can actually help you manage your developer experience: it’s okay to feel frustrated, but remember that in the end, someone wrote that code under circumstances you might not be aware of. Today you’re cursing their code; tomorrow someone might be cursing yours. That humbling thought often brings us full circle, back to a bit of empathy – after we’ve finished ranting, of course.

Level 3: Empathy & Exasperation

On the surface, this meme humorously exposes the duality of a developer’s mindset when working with third-party code or legacy systems. In the top panel, the programmer is in a state of professional empathy: calmly considering that “this is a complicated domain, I’m sure the devs are doing their best.” This patience reflects a seasoned understanding that software is hard – complex business logic, edge cases, and historical context can lead to strange code that might have good reasons behind it. Senior engineers often remind themselves that what looks like a bizarre implementation could be due to performance trade-offs, backwards compatibility, or a late-night hotfix to solve a production bug. In other words, they start with the charitable assumption that technical debt or odd design might be the result of constraints and not sheer incompetence. This is the mindset of a developer who’s been in the trenches and knows that reading someone else’s code can be like archaeology: unearthing layers of decisions and compromises.

But then comes the snap. The second panel shows the other mood: the developer erupting in pure frustration-fueled rage, yelling “What the actual f** is wrong with these fing donkeys? This is absolute horsesh and whoever wrote this code should be burned at the stake!” 😱 This extreme (and comically exaggerated) outburst is painfully familiar to any programmer who has spent hours chasing a bug or deciphering inscrutable code from a dependency. It’s the boiling point when all empathy evaporates. The humor works because of how drastically the tone flips — from zen-like understanding to medieval-level condemnation. Every experienced developer recognizes this volatile oscillation. One moment you’re a rational debugger carefully stepping through someone’s API, and the next moment you encounter a mind-boggling issue (like a null pointer in a supposedly impossible place, or a config that magically resets itself) and suddenly you’re cursing out loud at an unseen coder who isn’t there to defend themselves.

This meme nails a shared industry experience: dealing with other people’s code can feel like an emotional rollercoaster. We start by giving benefit of the doubt — “maybe the original dev had a tough problem to solve” — but if we hit enough roadblocks, the narrative in our head shifts to “this code is garbage, how could they be so stupid?” The dual captions capture that inner monologue swing perfectly. The top panel’s caption is practically saintly in its understanding, something you might genuinely think when using a complex open-source library or a gnarly legacy module: perhaps the maintainers know things I don’t, there must be a reason for this weird design. This is often true! Complex domains like cryptography, concurrency, or graphics do result in code that seems convoluted but is carefully crafted. Senior devs train themselves to not scream in horror at first sight of odd code, because sometimes there’s deep context or a hard problem being solved under the hood.

However, the bottom panel is the unfiltered reaction once you’ve spent a day wrestling with that code’s fallout. Maybe the library promised to handle all your HTTP requests, but you discover it randomly retries calls without any backoff and now your server is melting. Or the dependency’s documentation was so sparse that you had to read the source, only to find copy-pasted functions and half-baked fixes. At that breaking point, even the most patient engineer might lose it. The language becomes colorful (as shown with the barrage of expletives) because it feels like a personal betrayal – “I trusted this component and it made me look like an idiot in front of users/boss!” It’s a visceral DeveloperFrustration when you realize you’ve been debugging not your own mistakes, but someone else’s sloppy work. The meme exaggerates it to the point of suggesting the original coder be “burned at the stake,” invoking an absurdly medieval punishment. This phrase is obviously not serious; it’s dark humor to illustrate how infuriated we can get. It taps into that over-the-top rage where you momentarily feel the offending coder committed a cardinal sin against software and must face holy retribution 🔥.

What makes this especially relatable (and funny) is that it’s totally overdramatic – every developer knows deep down that shouting insults at the screen doesn’t fix anything, yet we’ve all been that person at least once. It’s cathartic humor. The setting in a bright, modern office with a peaceful potted plant and a nice big monitor contrasts with the second panel’s meltdown. It’s like everything is calm and professional externally, but the code on screen has internally transformed the dev into a raging medieval mob. This contrast between environment and emotion is something many of us hide in real life: you might outwardly just frown or sigh in the office, but in your inner monologue you’re unleashing a torrent of “WTFs” at the code. In fact, there’s an old joke that the best measure of code quality is the number of “WTFs per minute” a programmer utters while reading it. In the bottom panel, the WTF-meter just broke.

On a more serious note, the meme hints at a truth: maintaining empathy in software development is hard but important. Seasoned devs learn to try to understand why code is the way it is. They know that real-world code often involves constraints like deadlines, old hardware requirements, weird client demands, or just lack of time, which can yield less-than-ideal solutions. The top panel’s attitude (“I’m sure the devs are doing their best”) is basically a mantra to remain calm and analytical. It’s what you tell yourself when stepping into a legacy codebase or using a new framework: assume positive intent, because ranting too early might blind you to the actual solution. However, the bottom panel shows that even the best of us have a breaking point. Perhaps the code truly is awful with no excuse — e.g. copy-pasted stack overflow answers, zero comments, inconsistent naming, functions that do 10 unrelated things. That’s when a developer’s goodwill combusts into a fireball of profanity. It’s an emotional whiplash familiar to anyone who has debugged a hairy issue at 3 AM with an urgent fix needed. In those moments, the code’s author transforms in our mind from a fellow engineer to a “donkey” (as the meme puts it, choosing a not-so-polite term). We temporarily label them clueless, lazy, or worse.

The meme’s second line is deliberately extreme to be funny, but it reflects a genuine if fleeting sentiment. It’s the kind of thing a developer might rant in a private Slack channel or to a teammate after hours of frustration: “Who wrote this crap?! They should be drawn and quartered for this atrocity!” Everyone knows it’s hyperbole born out of stress. In a way, this dark humor is a coping mechanism in tech culture. We vent in exaggerated terms to blow off steam. The next day, we might even laugh about it or feel a twinge of guilt, especially if we later learn that the code was written under impossible time pressure by an exhausted colleague. The cycle of respect to rage and back to respect is something one gains perspective on with experience. A senior perspective might add, “Today’s WTF code you’re cursing was probably written by yesterday’s version of you or someone equally human.” In fact, a humbling experience is when you dig into a piece of “awful” code, ready to trash its author, only to realize you were the one who wrote it years ago! That full-circle moment flips you right back to empathy (and embarrassment).

In summary, the meme is hilarious to developers because it dramatizes how we ping-pong between professional courtesy and utter exasperation when dealing with DependencyHell or just the quirks of a codebase that isn’t ours. It’s a candid acknowledgment of our SharedPain: we love reusing code (why reinvent the wheel?), but the second that wheel gets wobbly, we’re cursing the wheel-maker to high heaven. It encapsulates the inside joke that no matter how advanced you are in your career, other people’s software can reduce you to a face-palming, ranting caricature at least for a moment. And yet, after the rant, we usually pick up the pieces, find a workaround or fix, and maybe even submit a polite bug report upstream – perhaps a bit sheepishly, remembering that initial empathetic thought: they probably did their best given the circumstances. This comical tug-of-war between understanding and anger is what makes the meme ring true for so many programmers, especially those battle-hardened by years of wrangling mysterious code that someone else wrote.

Description

A two-panel meme format based on stock photos, illustrating a programmer's conflicting attitudes toward third-party software. The header text for the entire meme reads: 'Programmers have two moods when using other people's software:'. The top panel shows a man sitting calmly at his desk, looking thoughtfully at a computer monitor with his chin resting on his hand. The text overlay reads, 'This is a complicated domain, I'm sure the devs are doing their best'. This represents the initial, empathetic, and professional mindset. The bottom panel depicts the same man, now wearing glasses and visibly enraged, shouting at the screen. The overlay text on this panel is much more aggressive: 'What the actual fuck is wrong with these fucking donkeys? This is absolute horseshit and whoever wrote this code should be burned at the stake!'. This meme perfectly captures the Jekyll and Hyde transformation developers undergo when a tool or library, which they initially respect, turns out to be buggy, poorly documented, or maddeningly counter-intuitive, causing their professional patience to evaporate instantly

Comments

7
Anonymous ★ Top Pick The transition from 'They probably had good reasons for this design' to 'This API was designed by a committee of squirrels on meth' usually takes about one failed API call
  1. Anonymous ★ Top Pick

    The transition from 'They probably had good reasons for this design' to 'This API was designed by a committee of squirrels on meth' usually takes about one failed API call

  2. Anonymous

    My emotional state machine for third-party libraries has two states - CompassionateExceptionHandling and RethrowWithProfanity - and any semver-minor release is an epsilon transition between them

  3. Anonymous

    The real bug here is thinking we'd maintain the same energy level of empathy after discovering the third-party library stores all data in a single VARCHAR(MAX) column with pipe-delimited JSON strings nested inside XML tags

  4. Anonymous

    Every senior engineer knows this progression intimately: you start with 'Chesterton's Fence' reasoning - surely there's a good architectural reason for this seemingly bizarre abstraction layer. Three hours later, after discovering the 'abstraction' is just nested switch statements wrapped in a factory pattern that instantiates singletons, you realize the only fence here is the one preventing you from reaching through time to stop the original commit. The real kicker? The git blame reveals it was written by someone who's now a Distinguished Engineer at a FAANG company, and suddenly you understand why they left

  5. Anonymous

    The two moods map to two designs: import it directly, or wrap it behind a circuit breaker, idempotent retries, feature flags, and a plan to strangle it in Q3

  6. Anonymous

    Using other people’s software oscillates between 'they had brutal constraints' and 'ah, the constraint was a static initializer that does network I/O and spins up a thread pool on import.'

  7. Anonymous

    Empathy overflows into rage faster than a third-party lib's unhandled promise rejection in prod

Use J and K for navigation