The Triangle Factory: A Perfect Metaphor for Shipping Workarounds
Why is this Management PMs meme funny?
Level 1: Make Do With What You’ve Got
Imagine you have a little machine that can only make triangle-shaped cookies. Every time you use it, out come perfect triangles and nothing else. Now, your boss (or teacher) suddenly comes and says, “Hey, we actually need circle-shaped cookies instead, and we need them right now!” You look at your triangle-cookie maker and feel confused – it can’t make circles, it’s only built to make triangles. But the boss doesn’t give you a new machine or more time; they just insist you figure something out. So, what do you do? You decide to get creative: you bake a bunch of triangle cookies and then fit them together in a ring, kind of like a puzzle, until they form a shape that’s vaguely like a circle. It’s not a perfect round cookie – if you look closely, it’s more like a six-sided stop-sign shape – but from far away it’s sort of circle-ish. Nervously, you show this funky cookie to your boss and ask, “Is this okay?” The boss is impatient and says, “Yeah, whatever, just send it out!”
This is funny because obviously the boss’s request was a bit silly – how can a triangle-cookie machine suddenly make circles without a change? – and the solution is also silly – you made a “circle” that’s really made of triangles stuck together. It’s like when you don’t have the right tools or ingredients to do something properly, you make do with what you have. The result is usually not ideal (and maybe a little janky), but it satisfies the person who was demanding it, at least for the moment. The humor (and slight frustration) in this scenario comes from the boss expecting magic (“I want circles now!”) and the worker doing a scrappy workaround (“Here, I glued triangles into a round-ish shape, is that fine?”). It’s a playful way to show how sometimes in life (and work), people have to deliver something even if they aren’t given the proper way to do it – so they cobble together an almost-solution and hope it’s good enough. The boss’s reply, essentially “just hurry up and send it,” makes it clear they don’t really care how it happened, they just want it done. Anyone who’s ever had to finish a project with the wrong tools or under a tight deadline can relate – it’s both funny and a bit exasperating, because the end product is basically a bunch of triangles pretending to be a circle!
Level 2: Improvised Geometry
Let’s break down the meme in simpler terms, piece by piece, and explain the tech concepts for a less experienced developer (or someone new to these situations). The cartoon has two panels showing a conversation and its outcome. In the top panel, two developer characters are standing next to a machine that’s spitting out red triangles. This machine is basically a metaphor for their current tooling or codebase – it’s a “triangle-maker,” meaning all it can produce are triangles (one very specific output). One dev says, “management says we have to start making circles,” and the other replies, “but we only have a triangle-maker… yeah, I dunno.” In plain language: the boss (management) suddenly wants a new kind of product (circles), but the team only has equipment or code to make the old product (triangles). The developers are basically shrugging and saying, “Uhhh, we don’t have the right machine or software for that… so… we’re not sure what to do.” This highlights MisalignedExpectations – the managers expect one thing, but the reality of the tools is something else. It’s like a small startup where all you’ve built is a web app for doing one task, and one day the CEO comes and insists, “Now we need this other totally different feature by tomorrow.” The team is caught off guard.
Now, in the bottom panel, we see how the developers handle this demand. Instead of magically producing a circle (which they can’t, because the machine isn’t built for it), one of the devs has taken six little red triangles and put them together into the shape of a hexagon (which kind of looks like a circle if you squint). The dev shows this improvised shape and asks, “how’s this?” Meanwhile, the manager (the figure on the right) says, “just ship it ffs.” Here “ffs” is an abbreviation (semi-polite way) for “for ****’s sake,” expressing frustration. The manager is basically saying, “I don’t care if it’s not a perfect circle, just send it out!” In other words, they’re in a hurry and just want the product delivered, even if the solution is makeshift.
There are a few key concepts and terms illustrated by this scenario:
Scope Creep: This refers to when the scope (the set of features or requirements of a project) keeps growing unexpectedly. Initially, the “scope” of this team’s project was making triangles. Now management suddenly added “make circles” to the scope. It’s called creep because it often sneaks in gradually – but here it’s pretty abrupt. Scope creep is tricky because unless timelines or resources are adjusted, the team has to do more work with the same amount of time/money, which often isn’t realistic. Here, no one gave the team a circle-making machine or extra time; they just added the requirement. So the team has to scramble to deal with it.
Existing Tool/Code Limitations: The triangle_maker symbolizes an existing codebase or tool that is specialized. For a junior dev, think of it this way: imagine you wrote a function that always draws a triangle shape on screen. It might rely on assumptions (like always using 3 sides of equal length). Now someone asks you to draw a circle with that function. You can’t directly do it because the function isn’t designed for circles. The cartoon’s machine is hardware, but in software it’s the same idea: your current program or library is limited in what it can do. To fulfill a very different requirement, you might have to significantly rewrite it or do something hacky. In real projects, this happens if, say, your app was only ever meant to handle one type of user or one type of data, and suddenly it needs to handle something totally new. If it wasn’t built with that flexibility, engineers have to either refactor (change the code structure) or find a workaround.
Hacky Solution / Quick Fix: The hexagon made of six triangles is definitely a hacky_solution. A hack or quick fix in developer lingo means a solution that isn’t elegant or correct by design, but it gets the job done just enough for now. It often involves using tools in ways they weren’t intended. Here, the devs basically said, “We can’t truly make a circle, but maybe we can fake it.” By arranging triangles in a ring, they’ve created a hexagon, which has six sides. A true circle would have an infinite number of infinitely small sides (in math terms), but a hexagon is at least closer to round than a triangle is. In software, an equivalent hack might be something like using a bunch of if-statements and copy-pasting some code in multiple places instead of writing a proper generalized solution – it works for now, but it’s brittle and not scalable. Another example: let’s say your system can only output text and your boss wants PDF reports. A hacky fix would be to quickly embed the text in a PDF template manually, rather than implementing a full PDF generation library properly. It might work for one report, but it’s not a robust long-term method. The hexagon is a visual metaphor for that kind of fix – it technically fulfills the requirement of “not a triangle,” but it’s not exactly what was asked (it’s not smoothly round).
To make this concrete, imagine some pseudo-code for what they did:
class TriangleMaker: def make_triangle(self): return Triangle() def make_circle(self): # Quick hack: approximate a circle by assembling six triangles triangles = [self.make_triangle() for _ in range(6)] circle_like_shape = Hexagon(triangles) # using triangles to form a hexagon return circle_like_shape # Usage machine = TriangleMaker() shape = machine.make_circle() # Actually returns a hexagon made of triangles print(shape.type) # might output: "Hexagon (approximate circle)"In this pseudo-code,
TriangleMakerwasn’t really supposed to have amake_circle()method. We added one, but instead of actually making a true circle, it just callsmake_triangle()six times and then combines those into a hexagon. We even pretend it’s a circle by naming it as such. This is exactly what a quick fix in code can look like: reusing the only capability you have (triangles) repeatedly to fake a new capability (circle). It’s not the “right” way to do it, but it’s what you do when you’re forced to deliver something fast with what you have.“Just Ship It” Mentality: The manager saying “just ship it ffs” is a prime example of ReleasePressure and a deadline-driven mindset. “Ship it” means “release the product to customers/deploy it to production.” When someone says “just ship it,” they often mean “I know it’s not perfect or we’re not fully ready, but do it anyway.” Adding “ffs” (for ****’s sake) shows the manager is irritated and just wants it done immediately. This often happens near Deadlines – maybe an important demo is due, or end-of-quarter is approaching, and management promised a feature to stakeholders. The result is a lot of pressure on the dev team to deliver something, anything, that can be called the requested feature, even if under the hood it’s held together with duct tape. This attitude can be really stressful for developers, especially juniors who might feel, “But it’s not really correct, it might break!” However, when higher-ups insist, teams sometimes have to cave and push the imperfect solution out. The phrase “just ship it” has almost become a joke in programmer circles (there’s even a common t-shirt that says “~ Works on My Machine. Just Ship It! ~”). It’s basically the opposite of thorough testing and quality assurance. Here, the humor is that the manager doesn’t even want to discuss the details of the hexagon – they just see something red and vaguely circular and go, “fine, whatever, send it out.”
Technical Debt: Now, what are the consequences of this hack? This is where TechnicalDebt comes in. Technical debt is a metaphor we use in software engineering: when you take shortcuts to meet immediate goals, you incur a “debt” that you’ll have to pay back later. In other words, by not doing it the right way now, you’re saving time in the present (like borrowing money), but you’re likely going to spend extra time in the future to fix problems (paying interest on that debt). In the meme, the hexagon is absolutely a form of technical debt. The team delivered something now (met the immediate need in a crude way), but later on, that decision might cause trouble. For example, maybe now every time they need a circle, they have to assemble six triangles – that could make the code more complex, harder to maintain, or even cause bugs if those triangles don’t line up perfectly. If a new developer joins and sees this solution, they’ll be like, “What on earth is this? Why are circles implemented as hexagons of triangles?!” The company might eventually need to invest more time to build the real solution (a true circle maker), meaning the quick fix only delayed the work, possibly making it even more cumbersome (because first they have to rip out or untangle the hack).
To sum up the scenario in relatable terms: management_demands a new feature (circles) that the team isn’t equipped to produce. The team, under pressure, delivers a hacky_solution (hexagon made of triangles) to satisfy the demand as best as they can with existing tools. The manager, driven by a looming deadline or promise, says ship_it – implying “we’ll take whatever we’ve got at this point.” This results in TechnicalDebt, which is like a mess we’ll clean up later (if ever). Every element of the meme – the stick figures, the shapes, the dialogue – corresponds to real-world tech culture terms: ScopeCreep for the new requirement, QuickFixes for the hexagon, UnrealisticDeadlines for why they had to do it this way, and the eternal struggle between ManagerExpectations and engineering reality.
For a junior developer, the lesson or insight here is: this kind of situation really happens. It might seem exaggerated with literal triangles and circles, but it’s just a funny simplification. Often, you’ll find yourself thinking, “We don’t have the time or proper tool to do X correctly… can we somehow use what we have to fake it?” That’s not a great feeling, but in high-pressure moments, teams sometimes do it and vow to “refactor later.” The cartoon is poking fun at that dynamic. It’s both humorous and a bit cautionary – it’s always better if you can push back on unreasonable demands, but that’s not always possible early in your career or in certain jobs. If you ever do implement a “hexagon masquerading as a circle,” just know you’re not alone – and you’ll definitely understand why technical debt is called debt when you (or your colleagues) have to fix it down the line!
Level 3: Triangle Peg, Round Hole
At a high level, this meme is a perfect storm of misaligned expectations and technical debt in software development. The top panel sets the stage: management suddenly decrees, “we have to start making circles,” while the engineering team stares at their existing machine that only churns out triangles. This is classic scope creep – new requirements dropped in after the fact – without any regard for whether the current system (our trusty TriangleMaker) is capable of delivering. The developers’ response, “but we only have a triangle-maker… yeah, I dunno,” drips with the resigned sarcasm of engineers everywhere who’ve been told to do the impossible with zero new resources. It’s the age-old scenario of a boss changing the spec at the last minute and assuming the tech is magically flexible. Management_PMs in this scene don’t care how it gets done, they just expect results. They want circles from a machine designed for triangles – essentially demanding a miracle or, as we see, a very creative workaround.
Let’s break down the elements of this darkly comedic scenario in more concrete terms:
The Triangle-Maker (Existing Tooling): The factory-like contraption on the conveyor belt is spitting out red triangles consistently. In real projects, this is analogous to an application or system that was built with a narrow specification: it generates one kind of output (triangles) very reliably. Perhaps the entire codebase, architecture, and tooling are specialized for that one purpose. It’s like a legacy report generator that can only output PDFs, and now someone suddenly wants interactive web dashboards. There’s no plug-in architecture for different shapes here – just a single-purpose system. The triangle-maker does its one job well, but it’s not general-purpose. An experienced engineer would immediately recognize that fulfilling a totally new shape requirement isn’t a trivial tweak; it might require fundamental changes or even a new system. In an ideal world, you’d refactor or rebuild the machine to accommodate circles properly (maybe design a universal ShapeMaker that can do any polygon or curve). But that takes time, budget, and planning, none of which management is offering. The machine’s limitations represent the technical constraints or a rigid architecture that the engineers are stuck with.
Management’s Circle Demand (Scope Change): When the manager says “we have to start making circles,” it’s a blunt introduction of a new requirement that the current system was never designed to meet. This is ScopeCreep 101: suddenly broadening the project’s scope (circles are a whole different shape category) without adjusting timelines or resources. In software terms, maybe marketing promised a flashy new feature to clients (“Now with Circle Support™!”) without consulting engineering. The devs give that “yeah, I dunno” response which is basically shorthand for “that’s impossible given our current setup, but you’re the boss.” It’s clear the team wasn’t involved in this decision – a hallmark of MisalignedExpectations between management and developers. The humor (and pain) here comes from how nonchalantly leadership can upend plans; one day you’re building triangles, the next day the boss waltzes in expecting circles as if it’s just flipping a switch. Seasoned devs know that these “simple” requests often require major overhauls. This disconnect – management’s simplistic view of “just change it” versus the engineers’ grim awareness of reality – is exactly what’s being lampooned. A senior engineer reading this might recall dozens of meetings where they had to explain, “No, we can’t just do that overnight. Our entire system is built differently,” only to be met with blank stares or insistence to find a way. The understatement “we only have a triangle-maker” is a polite way of saying “our technology stack cannot support that requirement.” Yet here, like in real life, that nuance is ignored.
The Hacky Hexagon Solution (Technical Debt): In the bottom panel, the engineer has improvised a shape that’s kind of like a circle by assembling six red triangles into a hexagon. They present it saying, “how’s this,” which is both comedic and tragic. This hexagon is the embodiment of a QuickFix. It’s an engineer’s clever-but-crude attempt to fulfill the letter of the request (“make something circle-ish”) without a proper circle-making machine. Why a hexagon? Because if all you can make are triangles, the closest you can get to a curve is by combining triangles into a polygon with more sides – a hexagon has six sides, so it appears more circular than a triangle. It’s essentially a polygon of compromise. In geometric terms, they approximated a circle using straight edges. In coding terms, this is like writing a new function that calls your existing triangle-producing function multiple times and then glues the results together. It’s as if the developers said, “Alright, we can’t produce a true circle, but maybe we can jury-rig something: take what we do have (triangles) and mash enough of them together so that from a distance it’s circle-esque.” This is exactly how a lot of TechnicalDebt gets introduced: rather than redesigning or re-engineering properly, you hack together components in unintended ways to meet a deadline. The result “works” in the immediate sense – it’s roughly circular in appearance – but it’s unquestionably not the right solution. A hexagon made of triangles might fool someone at a quick glance, just as a hacky code fix might pass basic testing or demo, but anyone who looks closely will see the cracks (or in this case, the edges). The veteran developer in me can’t help but cringe: today it’s a hexagon shipped as a circle, tomorrow it’s a production bug or a customer complaint when they notice the product is literally rough around the edges. This one panel distills the concept of tech debt born out of desperation into a simple visual. Each of those six triangles is like a debt shard – an ugly workaround that will live in the codebase. Eventually, if someone truly needs a perfect circle (a correct solution), they’ll have to rip out that hexagon and build the real thing, paying off the debt with interest. But for now, the hexagon is deemed “good enough.”
“Just Ship It ffs” (Deadline-Driven Pressure): The manager’s response, “just ship it ffs,” is painfully on-point. “FFS” is an exasperated slang short for “for f**’s sake,”* which here encapsulates the manager’s impatience: they don’t even care to discuss the hack’s shortcomings – they just want something, anything, delivered. This reflects a ReleasePressure cooker environment. We’ve got Deadlines dictating decisions, rather than quality or correctness. The manager’s basically saying, “I don’t care if it’s not actually a circle. We promised circles and the clock is ticking, so package that thing and deliver it!” This is where the meme’s truth really hits home for developers: we’ve all had a higher-up effectively say “I don’t want to hear why it’s not perfect, just get it out the door.” It’s a mix of panic and frustration from management, and it often leads to shipping known flaws. A senior dev reading “just ship it” likely hears echoes of crunch-time product launches or Friday 5 PM deploys where corners were cut. The humor here is dark because it’s true – features often go to production half-baked under pressure. The manager’s stance also implies: “We’ll deal with the fallout later (or never).” This is how you end up with systems held together by duct tape and prayers. The phrase “just ship it” is almost an industry meme on its own, synonymous with prioritizing the appearance of progress over actual sustainable progress. It’s the polar opposite of careful engineering. And that little “ffs” at the end adds a touch of anger, showing the manager is annoyed at the team for even hesitating. From the devs’ side, that’s absurd – they’re performing alchemy here, turning triangles into a pseudo-circle overnight, and still getting yelled at. But from the manager’s tunnel-vision perspective, the team is just delaying a promise. This communication breakdown – where urgency trumps reality – is exactly why such projects go awry.
Stepping back, the entire cartoon is a commentary on how TechnicalDebt accumulates and why engineering quality often erodes under business pressure. The boss didn’t stop to say, “Do we need to invest in a new tool or adjust our timeline for this circle feature?” Nope, they just passed the demand downhill. The engineers, not empowered to obtain a proper solution, did the only thing they could: bend the existing system into an unnatural shape. The result is a hacky_solution that satisfies the immediate requirement on paper, but everyone in engineering knows it’s held together by glue (or in this case, by the edges of triangles). There’s an unwritten understanding among developers that today’s “just ship it” hack will become tomorrow’s legacy nightmare. The meme cleverly captures that moment of Resignation and Improvisation. The characters’ body language – one slumped with a “yeah, I dunno” and later the other meekly asking “how’s this” – sells the defeat and loss of idealism. They know this isn’t what the requirement really is, but it’s the best they can do given the constraints and the orders. And of course, the manager’s stiff reply is an order to march onward with the flawed output.
From a senior perspective, there’s even an ironic nod to the Project Management Triangle (scope, time, cost – pick two). Here, management has increased the scope (circles instead of triangles) while keeping time and cost constant. Something has to give, and indeed it does: quality becomes the sacrifice, resulting in a half-baked hexagon instead of a true circle. In effect, they tried to turn a triangle into a circle without investing the proper effort – a violation of the basic laws of engineering (and geometry!). The outcome is a compromise shape – much like how rushed software becomes a collection of compromises. This is why experienced devs preach that “fast, cheap, good – you can only have two.” If you insist on fast (deadline) and cheap (no new tools/resources), you’re not going to get “good” (a real circle) – you’ll get a hexagon declared as a circle. And indeed that’s what we see shipped.
Finally, the meme resonates because it’s DeveloperHumor born from real pain. It’s funny in the “ugh, too real” way. Pretty much anyone who’s worked in software for a few years has a war story that boils down to “management demanded X, but our system/skillset was only built for Y, so we did some crazy workaround and shipped it.” Maybe it was adding a feature the codebase wasn’t designed for, or supporting a new platform last-minute by wrapping the old one in layers of hacks. The specifics differ, but the pattern is the same. That shared experience is why we laugh (perhaps while groaning). The stick-figure simplicity of the drawing only amplifies the point – it doesn’t need fancy art to convey this universal developer experience. In summary, this panel is a satirical snapshot of the TechDebt cycle: ManagerExpectations out of sync with reality, ScopeCreep without resources, an improvised_geometry solution, and a mandate to ship_it regardless. Every senior engineer chuckles because we’ve all assembled a proverbial hexagon out of triangles under pressure, knowing full well it’s not sustainable – and we’ve all heard the inevitable “just get it out the door” when trying to warn of the consequences. This is the kind of scenario that scars you, leaving you a bit more of a Cynical Veteran each time it happens. 😅
Description
A two-panel comic drawn in a simple, MS Paint style that satirizes engineering constraints. In the first panel, a factory conveyor belt produces red triangles. One figure, wearing a hard hat, says, 'management says we have to start making circles'. An engineer with glasses replies, 'but we only have a trianglemaker'. The manager figure responds, 'yeah, i dunno'. In the second panel, the engineer presents a hexagon composed of six red triangles and asks, 'how's this?'. The manager replies with resigned urgency, 'just ship it ffs'. The technical context is a powerful and widely relatable metaphor for software development under pressure. The 'trianglemaker' represents a legacy system, an existing API, or a restrictive framework that cannot easily fulfill a new business requirement ('making circles'). The engineer's solution - a hexagon made of triangles - is the quintessential technical workaround: it approximates the desired outcome using only the available tools. The manager's 'just ship it ffs' captures the universal pressure to meet deadlines, even with an imperfect solution, often leading to the accumulation of technical debt
Comments
10Comment deleted
The hexagon is the MVP. The perfect circle is on the roadmap for V2, pending a full platform re-architecture that marketing has already sold as 'paradigm-shiftingly round'
We hot-glued six triangles into a “hexagonal circle,” relabeled the Jira as “adopt hexagonal architecture,” and management thanked us for the strategic innovation
After 20 years in tech, I've learned that every 'circle' in production is just six triangles in a trench coat, deployed on Friday at 4:59 PM with a comment that says '// TODO: implement actual circles when we get budget for a circlemaker'
When the product owner asks for OAuth2 but you only have a JWT library and a prayer - sometimes six triangles is close enough to a circle that nobody in the stakeholder meeting will notice the difference. Ship it, we'll refactor in Q3 (narrator: they never refactored in Q3)
Product asked for circles; legacy only makes triangles, so we used Composite+Adapter to glue six together, shipped a hexagon as the Minimum Viable Polygon, and logged the rest as geometry debt
Management demands event-driven circles, but with our polling triangle maker, here's hexagonal architecture via callbacks. Just ship it - observability will hide the edges
Spec says circle, tooling produces triangles; we delivered “hexagonal architecture” - six adapters around a void - and PM called it the MVP
TIE Fighter panels. Comment deleted
I know the pieces fit Comment deleted
A fun fact is that triangular holes are created by a rotating drill bit. https://demonstrations.wolfram.com/DrillingATriangularHole/ Comment deleted