Software Engineering Is NOT Heaven
Uncovering Myths and Realities of Software Engineering Day-to-Day Without Sugarcoating
Software engineering is akin to modern alchemy where engineering minds forge miraculous solutions from ones and zeros. It’s seen as a field where innovation is constant, job opportunities are endless, and the work environment is nothing short of idyllic. There are a couple of problems with this romanticized understanding as it omits the challenging realities of the day-to-day.
In this article, I’m going to try addressing what I think are some of the myths about software engineering as an easy-going utopia, free from the problems plaguing other professions, that anyone can get into and succeed:
- Myth of Endless Innovation Without Obstacles
- Myth of Guaranteed Satisfaction and Security
- Myth of Best Practices and Methodologies
- Myth of Software Engineering as a Solitary Endeavor
You might also enjoy my article How To Not Be a Run-of-the-Mill Software Engineer as a follow-up!
If you like this content, please consider clapping, following and subscribing to my newsletter.
MYTH: Endless Innovation Without Obstacles
Software engineering is one of those professions that until one has to do it themselves, it is extremely difficult to imagine how it might be.
Example: hacking/penetration testing
A case and point analogy is how hacking is portrayed in movies, as a fast-paced adrenaline-filled experience. In practice, hacking takes days of extremely dull and laborious work of writing text in terminals, attempting infinite variations of the same approaches with slight configuration changes, with a high likelihood of failure over failure until something works.
Example: game development
Another example is game development where we might consider it a dream job when looking externally. It is regarded as a job where one lets their imagination free and one gets to publish worlds of their own making. While that is somewhat true, more true is the crunch and endless time needed to create these experiences. Even with the latest game engines in our hands, the expectations also increase, and the workload never goes down for the game developer. For them, the game is different from the player. The game often loses its magic and requires a lot of mental strength to stay motivated.
Software engineering is fairly rarely about innovation and small groups of people effortlessly creating groundbreaking applications and systems. The truth is that software engineering is filled with obstacles that often impede progress, and are riddled with mundane work required to build the basis of more complex systems.
Technical Debt
Software projects, especially long-term ones, accumulate technical debt, sometimes in terms of compromises in code quality for short-term gains. This can lead to a future full of issues that stifle innovation as teams must spend considerable time managing and refactoring legacy code instead of forging new paths. See my article Dante’s Code Hell Inferno: the Nine Layers for a metaphorical expanded view on tech debt.
Complex Problem-Solving
While solving complex problems can be intellectually stimulating, it can also be incredibly daunting and consume days of work during which progress is minimal. Engineers often face ambiguous requirements, uncharted designs, and unpredictable challenges that require grueling hours of troubleshooting and iteration, alongside discarding work and unsatisfactory implementations.
Integration Hell
The integration of multiple systems or modules, which on paper should operate harmoniously, in reality, can result in what’s known as integration hell. Compatibility issues, unexpected bugs, and data inconsistencies can turn the task of integration into an ordeal that will make you question your life choices.
MYTH: Guaranteed Satisfaction and Security
The narrative that software engineering offers job satisfaction and security is ephemeral. High salaries and the demand for talent on the street create an illusion of a professional haven.
Burnout
The pressure to deliver, coupled with long hours and often monotonous tasks, can lead to burnout if not managed correctly. The expectation to continually learn and keep up with the rapid pace of technological change can be mentally exhausting.
Offshoring and Automation
Job security is not a given. Many companies outsource software development to countries with lower labor costs. Moreover, automation and AI are becoming capable of performing tasks that were once the sole province of human engineers, forcing engineers to understand their actual value-add and up-skill or become irrelevant.
Ephemeral Success
Even successful products can quickly become obsolete. This transience can lead to job instability as engineers must frequently transition to new projects, teams, or even employers to stay relevant.
During the engineering phase of a project, it is easy to ride the wave and feel a sense of purpose, but it all comes down to how well it is received by the end customers and adoption stats, not how much engineering time has been put into it.
MYTH: Best Practices and Methodologies
It is assumed that software engineering operates under a standard set of best practices, design patterns and methodologies that ensure smooth and predictable known project trajectories.
Methodology Wars
There is significant disagreement within the field regarding the best approaches to software development. Agile, Waterfall, DevOps, and many other methodologies coexist, each with its advocates and detractors, often leading to methodological conflicts within teams made up of members with diverse backgrounds.
It Works on My Machine
The diversity of development and production environments means that software that functions flawlessly in one context may fail miserably in another, leading to the infamous it works on my machine problem.
More often than expected, a build of a product may work in a non-optimized local context, and break unexpectedly on deployed simply because of optimizing the build for release (e.g. minification) which theoretically should not change the behavior of the code.
Quality Inconsistency
There’s no universal standard for code quality. Different teams and developers have varying levels of rigor, leading to inconsistency and sometimes conflict over what constitutes good enough software engineering.
MYTH: Software Engineering as a Solitary Endeavor
Another myth is that software engineers work in a bubble, immersed in code and detached from human interaction, at the back of the room, in their cubicles.
Collaboration is Essential
Effective software development is inherently collaborative. It requires constant communication with peers, stakeholders, and users. Miscommunication can derail projects and lead to failure to meet user needs, or understanding them to begin with.
Cross-Disciplinary Engagement
Engineers must engage with multiple areas such as UX/UI design, product management, and long-term customer support. These interactions require a set of soft skills that are not imagined by default when considering the stereotypical view of a software engineer.
Soft skills are important even for engineers who have difficulty interacting with others. This makes the job quite demanding and often challenging for most, as indeed you find yourself having to spend more time than not alone and coding, but also your understanding of what to deliver is tightly coupled to the conversations you have.
Maintenance and Support
A significant part of software engineering work involves maintenance, code base sustainability and production support. This unglamorous aspect is far from the lone-genius narrative. The engineers need not only to build the cool product, but the tools to maintain it, deploy it across the environment, debug it when something goes wrong, test it on an ongoing basis, and train others over time to support it.
Closing Remarks
Software engineering is a field that can be intellectually rewarding and challenging. It offers the potential for creative problem-solving, meaningful work, and a collaborative community. But, it is important to recognize that, alike other professions, it has its pitfalls and pressures that can make the day-to-day far from glamorous. It’s not heaven, it’s an endeavor to use technology to have an impact bigger than you otherwise can as an individual, subject to the complexities of collaborative enterprise.
Let us foster a more realistic understanding of software engineering, one that prepares new joiners for the challenges they will face and that shapes a work culture conducive to long-term sustainability and well-being. Otherwise, many will feel like they are not capable enough and that their feelings are not valid, because it just looks so easy for everyone else.
Dear Reader,
Please clap, follow and join my newsletter if you like this content and you would like to support 🙇🏻♂️. You can connect with me on X (Twitter), Linkedin, Instagram & Github!
If you liked this article, you may also enjoy:
- Dante’s Code Hell Inferno: the Nine Layers
- The Code Purgatorio: Ascension to Clean Code
- How To Not Be a Run-of-the-Mill Software Engineer
- Plato’s Republic Of Software Engineering: A Philosophical Perspective
- Code 💻: The Modern Driving Skill — Why It’s as Crucial Today as Driving 🚙Was in the Past
- Diversify your Experience as you would your Investment Portfolio!