I feel that this subject has been discussed multiple times, but I want to provide my take on this matter.
Too many tools
There are a ton of programming languages, packages, frameworks, and libraries that accomplish the same thing.
I'm sure you know TypeScript, but I saw in some job posts ReScript popping up. The chances of TypeScript dying are pretty low now since it's included in most JS runtimes. That's an example of a new thing to learn if you get hired on that project.
"As a software developer, you need to learn constantly" - I'm starting to dislike this statement very much. Some tools/technologies will die in 5 to 10 years or you won't find any job with it (Svelte). Why waste time (life is short) on learning shiny new technologies?
Always use old popular technologies and try to have a minimal stack that you could run on your laptop.
Useless induced complexity
Some projects are indeed complex because they need to solve complex problems. Creating ML models from scratch, scaling to millions of users while keeping costs down, operating systems, kernels, software for nuclear power plants, airplanes, CAD software, you get the point.
But... let's be honest, more than 90% of the projects out there are just glorified CRUD apps.
"Let's do this and that maybe we will need it in the future", "Let's try this new fancy framework/tool, fu%k Django is old and slow", "This thing is used in 2 places let's abstract it", "Applying random design patterns and principles with disregard to business requirements" > welcome to legacy sh!tty code that no one understands.
There are cases where developers force some technologies into the project just to spice up their CV.
Don't make it harder than it needs to be. Grow your app organically. Do some tests when a feature is very well defined. Document business requirements (make sure to keep them up to date). Keep it simple.
Capitalism and VC money
I think this is the main reason why everything is so complicated (not only in software development). It's crazy the amount of work we need to do in order to sustain a decent living in this day and age where everything is/can be automated.
Each company is a bet that it may make money by providing value. Once a company becomes profitable, other companies will be created and will compete on value/price.
Let's compare that with a gold mine. You start digging, others follow, they start digging and slowly, but surely the gold runs out and it gets harder and harder to find another gold nugget (C# reference 😄).
Same with the companies: One company starts delivering value in one domain, other companies follow, and the pool of available users starts to run out making it harder and harder to make a profit.
All this pressure is put on devs/employees to perform faster, better, and cheaper on increasingly useless complex projects.
Utopia
In some other alternative universe, we agreed on one programming language, package, and framework for each task.
We all just magically agree on PRs and it all works just fine.
When a company activates in a domain, that company will provide the best imaginable value and price on the market, so other companies won't dare to compete.
But, that won't happen anytime soon. That's the system we live in and can't escape it easily.
Top comments (1)
Other companies "not daring to compete" is a much bigger problem by orders of magnitude than the complexity problem in my opinion. As soon as a company isn't forced to compete to provide the best value it simply won't. The aggressive, perpetual threat of competition and innovation is the mechanism for value, imperfect as it may be.