“Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.”
I hate how true this is, even as a job seeker. I'm here building things using Next.js when I'm fully aware that I can build them using less than that, yet I must keep going and overcomplicate things in order to add my familiarity with specific technologies with my personal projects on my resume.
And then, there's people who do "resume-driven development" and push for more complexity in their workplace so that they can list real-life work experience for the next door to open. I know someone who made a tool that just installs Java JDK + IDE + DBearer using Rust, so that he can claim that he used Rust in the previous company he worked for.
I generally think we're more obsessed with being perceived as engineers than actually do engineering.
Though it's not the only way to create legacy systems. Sometimes they are of sound design which deteriorates over time. Or the requirements shifted such that the design is no longer adequate. Or as the article mentions, rewrites for no good reason.
When I do a git blame of something coherent, that worked well in production, that I wrote years ago, almost none of my original code survived, every line is now written by a different person. That's the entropy of software systems left unchecked. It was not really rushed, there was a ton of time debating design before a single line was written.
Also, simple is evident, smooth, maintainable, and fast.
If asked to implement a templated dictionary type, many C++ programmers will write a templated class. If they want to be responsible, they’ll write unit tests. But the simplest way is:
template<typename Key, typename Value>
using Dictionary = std::vector<std::pair<Key, Value>>;
It is trivially correct and won’t have any edge cases which the tests may or may not catch.
Some programmers would consider this implementation beneath them. In just 800 lines, they could build the type from scratch and with only a few months’ long tail of bugs.
It's also a matter of choice when consuming libraries like expressjs, which the linked article referes to.
For example, hapi (https://hapi.dev/), a feature comparable web server framework to express, has zero external dependecies.
There are a lot of responsible maintainers of great packages in the node community which keep dependencies to a minimum. It's up to the consumers to use and value them, not just default to the likes of express.