Skip to content
DevMeme
1108 of 7435
The 'It Works On My Machine' Pull Request
CodeReviews Post #1247, on Apr 3, 2020 in TG

The 'It Works On My Machine' Pull Request

Why is this CodeReviews meme funny?

Level 1: Taking a Shortcut

Imagine you have a big chore list from your parents to clean your room: you need to put away your toys, make your bed, organize your desk, and vacuum the floor. It’s a lot of steps, and you really just want to go play video games. So what do you do? You take a shortcut – you shove all your toys under the bed, pull the blanket over the messy sheets, and push the clutter on your desk into a drawer. In just a minute, the room looks kind of clean, at least if no one looks too closely. Then you run off and say, "Mom, I'm done!" even though you skipped most of the work.

This meme is joking about a similar kind of shortcut, but with writing computer code. The “proper” way (like cleaning every part of your room) would be to test the code carefully, make sure it’s clean and easy to understand, and double-check everything. But the coworker in the joke just did the bare minimum – the code worked one time on their computer – and then they rushed to say “I’m done, let’s use my code!” It’s funny because we all know stuffing toys under the bed isn’t really cleaning, and other people are going to discover the mess later. In the same way, other programmers will quickly see the “mess” in the code. The meme makes us laugh because it’s a silly reminder: just like cutting corners when cleaning your room can backfire when your mom looks under the bed, cutting corners in coding can cause problems when someone else checks your work or tries to use it for real.

Level 2: Skipping Best Practices

Let’s break down what’s happening for those newer to the development world. The meme lists a bunch of recommended best practices – basically good habits that make sure your code works well and is easy to work with – and then shows someone ignoring all of them in favor of one thing: making a Pull Request (PR). A pull request is when you ask to merge your changes into the main codebase (common on platforms like GitHub or GitLab). It’s where your teammates do a code review, checking your work before it becomes part of the shared project. Opening a PR is usually one of the last steps after you’ve done all the prep work... which is why it’s funny that this coworker jumps straight to it.

Here are the items they skipped and why each one matters:

  • Unit tests: These are short programs or scripts that test individual pieces of your code (like functions or classes) to make sure they do what they're supposed to. For example, if you have a function add(a, b) that should add numbers, a unit test would call add(2, 2) and expect 4 as the result. Writing unit tests helps catch bugs early. Skipping them means you’re basically saying "I’ll just assume my code is flawless." 😅 For a junior developer, writing tests might seem like extra work, but it’s a huge part of CodeQuality and protects you from future headaches.
  • Testing with prod data: "Prod data" means real-world data from production (the live environment). Of course, we don’t actually test on the live system, but we often use a copy or sample of real data in a safe environment to see if our feature works with actual scenarios. Imagine you wrote a function that works great on your simple test input, but when fed a full production dataset (with millions of records or weird characters), it crashes or produces wrong results. Experienced devs will validate their code against something closer to reality (often using a staging environment or simulated prod data). Our meme’s coworker didn’t bother – they probably used a trivial example that made their code look fine, missing the chance to catch issues that only show up with real data.
  • Edge cases: These are the tricky situations at the extremes or boundaries of what your code expects. For instance, if you wrote a login function, an edge case is a user with a super long name, or no name, or weird characters like emoji in their password. Considering edge cases means thinking "What unusual or extreme input might break my code?" New developers sometimes focus only on the expected input ("sure, it works for normal cases!") and forget the weird stuff. But users and data are full of surprises. By skipping edge cases, the coworker is essentially leaving booby traps in their code: eventually, something will hit that unhandled scenario and boom – a bug or crash.
  • Refactor for maintainability: To refactor means to improve the internal structure of the code without changing its behavior. Maintainability is about making the code easy to work on in the future. After you get something working, it's good to clean it up: maybe split a giant function into smaller ones, remove duplicate code, or choose better variable names. This makes the codebase healthier in the long run. If you don't refactor, you might have code that's like a tangled mess of wires – it works now, but the next person (or you, two months later) will have a hard time understanding or modifying it. The meme implies our friend got the code to run and said "Good enough!" with no cleanup. That can hurt DeveloperProductivity later because everyone has to tiptoe around messy code or spend extra time deciphering it.
  • Refactor for readability: Readability is just what it sounds like – how easy is it for someone else (or future you) to read and understand the code? This overlaps with maintainability but focuses on clarity: using clear names, adding comments if needed, organizing logic in a logical way. Code is read much more often than it's written, especially during code reviews or when fixing bugs. Skipping this means the PR might contain hard-to-follow logic, which reviewers will likely send back with "nitpick" comments like "can you rename this variable?" or "this function is doing too much." The meme doubles down on refactoring (listing it twice) to show just how much cleanup might be needed – and how thoroughly it was ignored.
  • Git squash commits: When working on a feature, developers often make many commits – every time they hit save and push, essentially. For example, you might commit "initial draft", then "fix null error", "add tests", "fix tests", "typo", etc. Squashing commits means combining those small commits into one (or a few) big commit(s) with a clear message before merging to the main branch. Why do this? It makes the project history cleaner and easier to follow. Instead of future developers seeing 10 micro-commits of trial-and-error, they see one commit that says "Add Feature X (with tests)" which is much more informative. There’s a git rebase -i command (interactive rebase) that lets you squash commits manually, or some teams just click the "Squash and Merge" option on the PR. The meme calls out "meaningless commit messages" – things like "fix stuff" or "oops forgot semi-colon" – which don’t tell anyone about the change. Our fast-moving coworker clearly didn’t tidy up their commit history; they went straight to PR with all those scraps intact. Not the end of the world, but it’s a bit like turning in a school report full of crossed-out sentences. It works, but it’s messy.

So the coworker in the meme "got their code to run once on dev under ideal conditions" – meaning in their own development environment, probably with everything set up just right, they finally managed to see the feature working one time. This gives them the confidence (or impatience) to say "Alright, I'm done!" and immediately open a PR for merging. For a junior developer, it’s easy to feel that moment of victory when the code finally does what you want. It’s tempting to declare success without checking all the boring stuff like tests or edge cases. The meme pokes fun at that impulse. It’s very relatable humor because many of us have been there: maybe early in our careers we hurried to show off a working feature, only to have a more experienced teammate ask, "Did you test it with actual data? What about when X happens?". Cue the sinking feeling.

In a real team, skipping all these steps would typically result in a code review full of requested changes. The reviewer might say: "Looks like you haven’t written any unit tests for this – please add them" or "Can you clean up your commit history?" or "What happens if the input is empty? The code would crash – handle that edge case." Best case, the PR is delayed until the author fixes all that. Worst case, if nobody catches it and it gets merged, those oversights become bugs and maintenance headaches. Neither is fun. That’s why teams establish these best practices – to maintain CodeQuality and keep everyone productive and sane. This meme is basically a funny reminder (or warning!) about what happens when someone ignores those practices. It resonates with developers because we strive not to be "that coworker," and we've all felt the secondhand anxiety of seeing a PR come in hot with zero tests and a lot of YOLO energy.

Level 3: Works on My Machine

In this meme, we see a classic scenario where a developer swerves away from every code quality task and heads straight to opening a pull request. The highway sign lists all the good engineering practices – writing unit tests, testing with production-like data, handling edge cases, refactoring for maintainability and readability, cleaning up commit history – basically an engineer's quality checklist. The exit ramp sign says "Submit a Pull Request," and our bold driver (the coworker) is that blue car drifting off the main road. The humor hits home for seasoned developers because we’ve all encountered (or sadly, been) that person who exclaims "Hey, it works on my machine, let's merge it!" after a single successful run.

The meme exaggerates a CodeQuality anti-pattern: skipping vital steps to rush a feature into review. Each item on that sign is a step in a proper development workflow:

  • Write unit tests – This is a cornerstone of quality. Skipping it is like leaving known bugs on the table. Our swerving coworker either doesn’t believe in tests or is “too busy” for them. Experienced devs know that lack of tests today means production bugs tomorrow (and possibly panicked hotfixes at 3 AM).

  • Test feature against prod data – In development, we often use dummy or ideal data. Real production data has messy, unexpected values. The meme highlights that our hero only verified the code under ideal conditions. Maybe it worked with the trivial example he tried, but seasoned engineers immediately think, "Just wait until real user data hits it – it's gonna break." We can practically smell an NullPointerException or an encoding bug lurking.

  • Account for edge cases – This is where a senior dev’s eye starts twitching. Edge cases are those weird scenarios (empty inputs, max values, network failures, weird user behavior) that junior devs often overlook. The coworker clearly didn't stick around to ponder "What if the input is empty or the network is slow?". Veteran engineers joke that Murphy’s Law governs production: if an edge case can happen, it will. Skipping this step means someone else (or the users) will discover the bug the hard way.

  • Refactor for maintainability & readability – The meme’s list actually mentions refactoring twice, emphasizing how important it is to clean up code. After getting things to work, good developers improve the code structure (remove duplication, split large functions, name things clearly) so the next person (or future you) doesn’t have to decipher a mess. Our swerving coworker clearly said “Nope, works fine, don't touch it!” Everyone reviewing that PR is now bracing for a spaghetti-code special. This is a classic source of technical debt – skipping cleanup now means the codebase gets a little harder to work with later.

  • Git squash meaningless commit messages – Ah yes, the commit history hygiene. When someone is hacking away just to make the code run once, you often end up with a pile of commits like “fix typo”, “oops fix test”, “debugging”, “finally works”. The sign is basically saying: before opening a PR, consolidate those chaotic commits into a few clean, meaningful ones. It’s about professionalism and not spamming your team with a noisy history. The coworker here clearly didn't do that; they went full speed into the PR lane with commit messages that likely look like:

    $ git log --oneline
    c13bbd8 Remove debug logs
    e6fd0c3 Add one more check
    34f0b2a Actually fix null pointer
    909d9f1 It compiles now
    

    Each of those messages screams "I was winging it until it sorta worked." Reviewers see this and chuckle (or groan) because it's all too familiar. Squashing commits would turn that series of band-aids into a cohesive story of one feature addition. But our intrepid coworker prefers the "trail of crumbs" approach.

So why is all this funny? Because it's relatable humor in the developer world. The image caricatures that one teammate who blows past all the Best Practices 101 stuff in their excitement (or impatience) to get their code merged. In a CodeReview context, it’s simultaneously annoying and amusing – you know you’re about to write a novel in the review comments pointing out tests are missing, code is funky, and commit history is a mess. The meme format (car swerving off highway) perfectly depicts the deliberate disregard for the straight-and-narrow path of quality. It’s an exaggeration, sure, but not by much – we’ve all seen a pull request from "that coworker" that triggers an immediate facepalm. The humor has a bit of pain behind it: skipping all those steps might save time today, but it steals time from tomorrow’s debugging session or the poor soul who maintains the code. Seasoned devs laugh because we've learned the hard way that doing things right the first time is always worth it, and seeing someone veer off toward "Submit PR" too soon is like watching a horror movie you’ve seen before – you already know the jump scares (bugs) that are coming.

Description

A two-panel meme using the 'Drifting Car Exit' format. In the top panel, a green highway sign points straight ahead with the text 'SUBMIT A PULL REQUEST'. An exit ramp to the right lists a series of software development best practices: 'WRITE UNIT TESTS', 'TEST FEATURE AGAINST PROD DATA', 'ACCOUNT FOR EDGE CASES', 'REFACTOR FOR MAINTAINABILITY', 'REFACTOR FOR READABILITY', and 'GIT SQUASH ALL OF YOUR MEANINGLESS COMMIT MESSAGES'. The bottom panel shows a blue car recklessly drifting, tires smoking, to take the exit ramp, which is labeled 'MY COWORKER WHO SOMEHOW GOT THEIR CODE TO RUN ONCE ON DEV UNDER IDEAL CONDITIONS'. A watermark for 't.me/dev_meme' is in the bottom-left corner. The meme satirizes developers who, after a single successful test on their local or a development environment, rush to merge their code while completely bypassing essential quality assurance steps. This behavior is a classic example of the 'it works on my machine' fallacy, creating technical debt and instability that more experienced engineers often have to resolve

Comments

7
Anonymous ★ Top Pick The fastest way to get your code into production is to make sure it only has to work correctly once, and only on your laptop. The SRE team can handle the rest
  1. Anonymous ★ Top Pick

    The fastest way to get your code into production is to make sure it only has to work correctly once, and only on your laptop. The SRE team can handle the rest

  2. Anonymous

    Nothing says Friday afternoon like a 4,000-line PR from the “ran once on dev” crew - no tests, seven commits titled “fix”, and my pager whispering “see you at 3 AM.”

  3. Anonymous

    "Works on my machine" evolved from a junior excuse to a senior's containerization strategy, but somehow Jenkins still finds a way to make it fail

  4. Anonymous

    We've all worked with that developer who treats 'it compiled once on localhost' as sufficient QA, then submits a PR that's essentially a game of production roulette. They've discovered the ancient art of transforming technical debt into someone else's problem - usually yours during the 3 AM incident call when their untested edge case decides to surface in prod. The real tragedy? Their code somehow passes CI because the test suite is as comprehensive as their commit message 'fixed stuff'

  5. Anonymous

    Ran once on dev with a warm cache and fake fixtures; submit PR, git-squash the evidence, and let CI write the postmortem

  6. Anonymous

    That PR which 'ran once on dev': the architectural equivalent of a monolith that scales until the first Black Friday spike

  7. Anonymous

    Submitting a PR after a single happy‑path run is event sourcing for bugs - append‑only pain with eventual consistency to a 3am rollback

Use J and K for navigation