Erik McClure

Software Engineering Is A Shit-Eating Contest


Years ago, I realized that trying to become a “programming expert” was both an ill-defined goal and did not actually correlate to being paid well. Throughout my career, I noticed that things software developers considered “amazing feats of engineering” often amounted to dealing with a shitty tool nobody else wanted to deal with, being able to contort a shitty tool into doing unholy things, or papering over a shitty tool with a very thin abstraction layer. Companies that were built on bewildering towers of duct tape and prayers always paid whoever was willing to duct tape more crap to the tower, never the ones suggesting how to fix it. Your pay at a large tech company mostly correlates to how much bullshit you are willing to put up with, and how much tribal knowledge you’ve accumulated.

Even in open-source communities, nobody wants to replace shitty tools with better tools. Instead, programmers often worship the shitty tools, taking pride in knowing how to properly utilize a particularly annoying and unnecessarily complex tool, lording their knowledge over people who might point out that the tool is needlessly complex and actually just bad. This behavior was rampant in the early 2000s when Linux fanboys would say things like “everyone should just learn how to use a terminal”. Nowadays they just complain about people using rust, presumably because it takes away their inalienable right to push shitty, insecure garbage.

Nowadays, it feels like it’s impossible to complain about anything without someone insisting that I’m just “holding it wrong”. It’s as if I’m being handed a hammer full of rusty nails, and when I insist on trying to build a hammer without rusty nails instead of learning how to hold their shitty hammer full of rusty nails in just the right way, I’m told that I’m either being “lazy” or “unrealistic” or that I’ll “fragment the ecosystem”. Open-source advocates absolutely love using XKCD #927 as a sledgehammer against any attempts at fixing anything. Contributors may only pull rusty nails out of the hammer, one by one, agonizingly slowly, and if anyone even hints at replacing the entire hammer, they’ll be accused of “fragmenting the ecosystem”.

Once you get old enough, this is recognizable as a very obvious, very transparent attempt to rationalize an emotional need to preserve social status. Being a major contributor on a very important package grants you social status. If the only impressive thing you’ve ever done in your entire life is being a major contributor to some random package relied on by half the ecosystem, you will treat anything that threatens to obsolete that package as an existential threat to your life, because humans are hardwired to treat loss of social status as life-threatening.

Seeing this kind of behavior crop up so often is infuriating, because it’s what you expect from insecure college kids who don’t have any hobbies, but the industry is overrun by professionals who do this, and worse, are often paid large sums of money to deal with whatever cursed bullshit a particular company has built its entire product on top of. Then these people get into dick-measuring contests and immediately affirm the consequent - they believe that because they’re paid a lot of money, they must be good programmers. This makes everything worse, because now attempting to replace whatever nonsense they’re maintaining is an actual threat to their livelihood.

This juxtaposition of misaligned incentives has turned the entire field of software engineering into a shit-eating contest, where programmers compete not on their ability to create useful tools, but instead on who can deal with the most bullshit. Eating shit yields the best short-term rewards, so the best shit-eaters quickly accumulate wealth and influence, which they immediately use to try to convince everyone to use the same bullshit they’re paid to deal with.

This is also why the entire industry is panicking over AI tools that are objectively terrible at high-level design, or even moderately complex tasks, because the AIs are superhumanly good at dealing with bullshit. If you’ve ever had to deal with an enterprise codebase, modern AI, despite being unable to handle anything beyond simple logic, is incredibly good at figuring out weird C macros and whacky build rules and weird in-house utility functions that have been built-up over the years, because an AI agent can read literally all of your documentation and code comments in a matter of hours. If your job security was based on absorbing all this tribal knowledge and wielding it to solve strange bugs and problems that your coworkers had, you’re screwed - they can just ask the AI now instead of having to ask you. The AI is probably also nicer to talk to.

AI can eat shit better than any human, which is also why they are superhumanly good at finding certain classes of bugs, because AIs can find any needle in any haystack. What they lack is judgement, common sense, and the ability to do high-level design. It turns out a whole lot of human coders also couldn’t do high-level design, they were just good at eating shit, and they’re the ones who think AI is going to destroy the world, because to those people, AI is already destroying the only world they knew - one ruled by enterprise bullshit.


Avatar

Archive

  1. 2026
  2. 2025
  3. 2024
  4. 2023
  5. 2022
  6. 2021
  7. 2020
  8. 2019
  9. 2018
  10. 2017
  11. 2016
  12. 2015
  13. 2014
  14. 2013
  15. 2012
  16. 2011
  17. 2010
  18. 2009