Andreas Neukoetter

Cargo Culting in Software Development: A Quick Introduction

July 07, 2025

Picture this: a development team spends weeks implementing the latest industry darling. Perhaps it's that shiny new microservices architecture everyone's raving about, or maybe it's the blockchain-enabled-AI-powered-whatever making rounds on Twitter. Fast forward three months, and they're scratching their heads wondering why their actual problems aren't magically solved.

Origins in the Pacific

The term "cargo cult" comes from an interesting incident around World War II. In the Melanesian islands, local communities had witnessed an amazing phenomenon: massive metal birds (aircraft) would descend from the heavens, bringing incredible wealth—or "cargo"—to military bases. After the war ended, some communities, hoping to summon back these divine deliveries, built elaborate replicas of airstrips, complete with wooden control towers and bamboo radio equipment.

This gave rise to a powerful metaphor: the act of recreating the form of success without understanding the function behind it. The concept entered software discourse through Richard Feynman's brilliant 1974 "Cargo Cult Science" speech, and essay, where he warned about the dangers of fooling ourselves—a principle that hits uncomfortably close to home for many in software development.

Why Software Teams Fall Into the Pattern

After four decades of watching this pattern repeat in various organisations, here's my observation:

  1. Social Proof & Prestige Chasing: "Google does it this way!" Ah yes, because your three-person startup definitely has the same problems as a trillion-dollar tech giant. That service mesh might be overkill when you're serving dozens of users rather than millions.

  2. Fear of Missing Out: The tech world's equivalent of "all the cool kids are doing it." That panic when everyone's talking about some new framework and you're still happily using "outdated" technology that, very inconveniently, just works.

  3. Complexity Blindness: Everything looks simple in the marketing blog post. Reality, as usual, has other plans. Those "just five minutes to set up" tools that somehow eat up three sprints? Every team has a story.

  4. Measurement Gaps: "It feels faster!" is not a metric. Neither is "everybody says it's better." Without concrete measurements, teams can convince themselves they're improving while actually adding unnecessary complexity.

  5. The Shiny Toy Factor: Let's be honest—after decades in game development, and even longer in classic IT, I still get excited about new tools. The trick isn't to suppress that excitement, but to channel it productively. And yes, I'm fully aware of the irony here—ask me sometime about my recent years of enthusiastically replacing Java backends with Rust. At least I'm eating my own dog food when it comes to admitting our biases.

The Hidden Price Tag

Here's what those shiny tech blog posts conveniently forget to mention:

  • Complexity Debt: Each "simple" addition to your stack is like adopting a high-maintenance pet. Sure, that exotic architecture looks cute now, but wait until you have to feed and clean up after it at 3 AM.

  • Performance & Efficiency Drift: Sometimes the boring solution is boring because it just works. Revolutionary, I know.

  • Opportunity Cost: While teams are busy implementing blockchain-based logging systems, their users are still waiting for basic features. But hey, at least those logs are immutable, right?

  • Cultural Stagnation: When "because FAANG does it" becomes a team's mantra, you might as well replace engineering meetings with a bot that scans twitter for roadmap items.

Breaking Free: A Practical Guide

Drawing from both successes and failures in game development and enterprise systems, here's how to avoid the cargo cult trap:

  1. Start with Context Mapping

    • Write down your actual constraints. No, really, write them down.
    • If your list includes "because we might be the next unicorn," start over.
  2. Form a Causal Hypothesis

    • "X will solve Y because Z." If you can't fill in those variables without using buzzwords, that's a red flag.
    • The best solutions often sound embarrassingly obvious when explained clearly.
  3. Run Time-boxed Experiments

    • Test new approaches in controlled environments
    • Collect real metrics. "Developer happiness" is important but try explaining that to your customers when the app crashes.
    • Keep it small—you're running an experiment, not rebuilding the Death Star.
  4. Set Exit Criteria

    • Define what success looks like before you start. Let me repeat that ask the question before you look for an answer.
    • Include abort conditions. Yes, it's allowed to admit something didn't work—and learn from it.
    • Remember Feynman's principle: The easiest person to fool is yourself.
  5. Document Learning

    • Keep records of what worked AND what failed
    • Be honest about the failures—they're often more educational than the successes
    • Share the war stories. Your team will thank you (eventually).

Looking Forward

This is just the beginning of my exploration into software development's favourite cargo cults. In future articles, I'll dive into specific cases from these past four decades—some hilarious, some painful, all educational. Because if you're going to make mistakes (and you will), you might as well make original ones.

The goal isn't to never adopt new practices—it's to be thoughtful about what you adopt and why. As Feynman taught us, the first principle is not to fool yourself. In an industry that excels at self-deception, that advice is more true than ever.

Food for Thought: When was the last time you adopted a practice primarily because it was fashionable? How did that work out? Be honest—we've all been there.

← Back to all posts