Why is software development so toxic?
I've always felt that this isn't an easy answer to nail down. My own thoughts and opinions of it have fluctuated during my career, but I'm trying to record some initial thoughts here so I can continue to write more about this subject.
1. Is software development an industry?
What's interesting about software development is how it exists as both its own industry and also a facilitation of other industries. Some companies exist to solely make software to assist the development of more software. Other companies use software to facilitate their goals, like a car company using an onboard computer. You wouldn't consider a programmer at Subaru in the software development industry, but someone at GitHub would more aptly fit that description. Perhaps it's more accurate to consider the software development "industry" as an extension or application of the software development field. Software exists to serve a purpose and fulfill a need by way of a computer, so many industries benefit from it. At some point some clever individuals figured out they can sell software to other software developers, and an industry was built around that.
2. Do other industries have the same toxicity problems?
If toxicity were strictly a software development problem, then we would only find it in its standalone industry or in the parts of other industries that use software development. But you can ask any non-programmer and they would also say their industry is toxic, or has the capacity to be toxic. My partner's mother works in the human resources industry as a consultant and she focusses a lot on disfunctional teams and organizations. No matter where she goes she'll find some toxic behaviour to address.
So toxicity is everywhere. This means it's not likely to be something inherent to programming or the industry, and that just leaves us with the people. Software development is toxic because of the people, which sounds obvious on the surface but my coming thoughts will explain my underlying thoughts about this.
3. The obvious answer
I'm sure the conclusion I just shared isn't revolutionary. There aren't many things in this world that are evil by nature, so typically "hell is other people". With that said, I want to re-iterate that toxicity, including the form I'm about to mention, is typically a learned behaviour and isn't something inherent to software development. So, what is it about the people in software development that make it toxic?
The toxicity we see in the industry today is a manifestation of elitism. I think this started some time in the 60s and 70s, around the beginnings of computer science, and has slowly persisted through that time to today. There was a lot to learn about computer science back in those days, and that knowledge rested in a few people who were willing to share but it was still very much an in-group and out-group dynamic. I wouldn't consider it quite elitist at this point. Eventually computing changed a bit and soon we had general-purpose operating systems like UNIX. And then came consumer-facing applications and businesses got interested. I think the elitism started somewhere around here: the operating system developers were important but they weren't held in quite the same regard as the developers who brought busines value through products. Animosity started to develop, and the operating system developers thought every other developer wasn't at their level of knowledge or skill. The first elitism was one developer thinking they were better than any other developer. This spread as more and more people got into software development and the barrier to entry got lower and lower.
4. Progress through the ages
So now we're here, 50 years later where the technology has changed but the people are likely the same. I find the culture of leetcode and '10xers', even commit histories and stars on Github have now gamified the superiority of some developers over others. Internships at FAANG corporations and jumping jobs for salary increases (à la r/cscareerquestions) also contribute to this behaviour. I also find these feelings in software architectures, as older solutions not using the latest tech are looked down upon with disdain as archaic. You name it, some dev will find a reason to feel superior.
5. The curse of accessibility
This only gets worse since everyone now has a computer at home and can do whatever they want in their spare time. Programming is addictive — it's fun to constantly build things and get instant feedback as you build it. It's enjoyable to diagnose issues and fix bugs, and to figure out problems after hammering at them for some time. There can always be too much of a good thing, and I feel that applies to only doing programming/software development in your spare time. If software development is all a developer does, that will become all the developer has. The more they place their self-worth in development, the more they'll try to preserve that worth, which is what leads to the elitism.
Thus, our conclusion:
The elitism in today's developers is because it's all they have to find value in themselves, and they don't want to lose it.
6. So what to do?
If you're a developer, stop coding at 5PM. Get a hobby outside of development. Do something humbling, like weightlifting or martial arts. Play video games on the hardest difficulty. Do something you're incredibly bad to ground yourself. If you're a person of faith, acknowledge the role your religion plays in your interactions with people. If you're not, remember that all of humanity depends on how good we are to eachother.
The concept that you need to be constantly working on something and improving your skills 24/7 is a lie. Unless you believe in something, the long hours you're putting in are simply not worth it unless you're paid hourly. Programming is a great side hustle but don't expect yourself to come up with a groundbreaking idea. It's an easy way to judge yourself and burn out.
If you're in a position to hire someone, there's more responsibility on you. The only solution to this problem is to fundamentally change the culture of hiring. Elitism enters a team through the people. No matter how high performance or brilliant a developer is, it's not worth a toxic work culture with constant infighting. I find the best solution is to truly identify why a person wants to work for you, and also check what they do in their spare time. Anything about keeping up with trends is a negative indicator.
Software development isn't going to change the world. Its responsibility is to enable the necessary changes to the world through other industries. This will only happen through cooperation, teamwork, and development with a common goal of success, rather than individualistic achievement.