Software developers commonly fall into a shared set of decisions in their attempts to solve problems in their works, typically known as engineer traps - be it overengineering, or ‘reinventing the wheel’ to name a few. The theory outlined in this blog post is that these traps stem from the thinking imbued into software engineers in their early career, particularly as they develop their portfolio.
Background: How to Become A Software Engineer
To become a software engineer, one of many routes are taken by prospective entrants. Usually that involves a higher education degree - in Australia, that would be either the Bachelor of Information (& Communication) Technology, or the Bachelor of Computer Science - both offer similar majors, however with varying differences between these courses. This also means that when Australian employers ask for a tertiary qualification in a position description for a SoftEng role, they will ask for either a computer science, or information technology degree.
However these courses are structured in a generalist manner, resulting in a situation where many prospective software engineers must specialise and build their portfolio outside of a tertiary education context. This is usually undertaken as a set of hobby projects, rather than a placement or internship - in most cases these are seen as increasingly rare, or otherwise competitive. (just ask /r/cscareerquestionsOCE)
Similar courses exist elsewhere, but generally structured courses usually result in similar outcomes in most places - hence, the growth of self-taught programmers in the industry.
Where the Problem Lies
Pushing an entire global industry’s worth of prospective engineers onto open source hobbyist work has raised issues within the industry, particularly with exploitation of open source developers. While the attention is mainly on developers not being able to afford a living, a more insidious form of exploitation has lied in the expectation of developers to build their portfolio in the purgatory between tertiary education and the first employer.
Due to these prospective engineers needing to build a portfolio, it results into a constant mass of similar works created in the pursuit of learning a language, framework or otherwise core concept in the world of programming. One example would be the large cohort of to-do list applications used to demonstrate the features of a frontend framework, such as React or Vue. This eventually results in newcomer programmers building more of these applications to specialise in a specific framework.
This has gotten to a point where in recent years there have been tutorials that open dummy pull requests in large repositories (video) for newcomer developers. While most people chalk it down to a bad tutorial, or [insert anti-Indian sentiment here], there are likely many people following this tutorial as a way to learn a new skill & fill out their portfolio, in order to get a job in an industry, where in many countries, is one of the last vestiges of upward mobility in their country’s economy.
Eventually, a cohort of developers building more and more applications that are similar to existing products, as it’s the main, mostly ‘accepted’ way to specialise in a tool, programming language or framework.
Conclusion
In short, there is an issue within the global technology industry, regarding the expectations of self-taught and open-source developers. This set of expectations, especially within newcomers, has resulted in ‘reinventing the wheel’ - building a new version of an existing product or application, as its own developer trap. Eventually, these learning processes have stuck with developers throughout their career; old habits die hard.