When it comes to software engineering, the image often portrayed is one of glamour, lucrative salaries, and cutting-edge innovation. You can be forgiven for thinking along the same lines if you don’t have much experience working in the software industry.
As a software engineer with over 18 years of experience, I’ve navigated through the software engineering challenges, experiencing firsthand the darker aspects that are often overlooked.
Let’s go through some of these challenges, and you can decide for yourself the worthiness of the software career.
The constant fear of recession and job loss
In the last few months, companies have let go of their employees in herds. Thousands of software engineers have lost their jobs in the name of performance, restructuring, or workforce reduction.
The remaining engineers who still have a job are living in fear of being laid off next. They’re constantly worried that the next call can be their last.
This is nothing new in the software industry.
By now, I’ve experienced three recessions in my career, including the current one. I’ve seen people losing their job out of nowhere.
You might think those software engineers who cannot hold on to their job are poor performers.
That’s not true.
People get laid off for all sorts of reasons. Many of those reasons have nothing to do with their performance. Firing (or Work Force Restructuring, if you prefer a friendlier term) happens for many reasons, whether in a recessionary period or not.
The company made a mistake in its hiring strategy and onboarded more than required. Now they’ve to reduce the headcount to lessen the impact on their profit.
The company is going through budget cuts or financial constraints.
The product gets deprioritized or canceled due to market conditions.
The engineer falls from the grace of their leaders.
The client no longer wants to continue with the project.
When an employee loses a job, no matter the reason, it hits hard emotionally and financially.
Most software engineers start to feel insecure and doubt their capabilities. That makes it even more challenging to focus and find another job. Especially if it’s a recession when every company is laying off or pausing the hiring.
The fluctuating mood
Software engineers’ day is usually filled with emotional rollercoasters.
One moment you’ll be on an emotional high full of enthusiasm, followed by feelings of despair and anxiety.
When you solve a critical defect that’s holding your deployment hostage, the sense of achievement can be exhilarating. The appreciation received from peers and leaders can further increase your enthusiasm.
Simultaneously, you’ll also face situations where you’ve spent days perfecting an innovative proposal, only for it to be dismissed by your seniors or leaders.
The disappointment of having your hard work and creativity overlooked can be demoralizing.
Your emotional state fluctuates from super high for successfully closing a deployment to super low for receiving dozens of review comments on your code that now needs rework.
Somedays, when you don’t have much work to do, you feel like you did nothing worthy. It’s a hard feeling that you can’t shake off though you know it’s not justified.
Instead of enjoying the slow day at work, you feel guilty for not being productive. Suddenly a restful day feels like time wasted.
If any of these mood dampeners happens on Friday evening, you’ll carry the foul mood into your weekend.
The mental drain
Most people imagine software engineering as a ‘not so hard’ job. Engineers sit in AC rooms with ergonomic setups. They don’t have to leave their seat or do any physical work.
And they all get paid better than average citizens of their country.
The truth is entirely different.
Yes, there’s no physical labor like most other professions, and the pay is good. However, the mental drain is real. The job demands high cognitive effort.
Often, developers have to think about designs, architectures, and complex solutions for hours. Then there’s the endless demand to upgrade knowledge, meet deadlines, and take accountability for product failures.
The constant fear of not meeting expectations or making critical mistakes can lead to frustration and stress. Add to it, the pressure to remain productive can be pretty overwhelming.
This has a severe impact on the mental health of the software engineers.
In a 2001 survey of programmers by StackOverflow, 10% of 16,000 respondents indicated that they deal with anxiety.
All this forces software engineers to put in extra hours on most days, which adds to the problem.
The mental exhaustion not only affects their ability to perform the job but can also spill over into their personal lives. Thus, making it difficult to find the energy to engage in hobbies, spend time with friends and family, or simply unwind after a crazy day at work.
The challenge of continuous learning
The world of technology is a fast-changing one. And software engineers have no choice but to keep up with the pace to stay relevant.
Learning a new tool or programming language can be pretty exciting or downright frustrating, depending on how you take it.
Most people will view learning new things to be exciting and motivating. However, imagine keeping the same pace of learning while doing eight hours of mentally draining time bounded work.
It no longer sounds attractive. Right!
I am not talking about getting a POC done on a new technology. I am talking about getting to a proficiency level where you feel comfortable solving problems rather than searching for behind the scene workings, libraries, and syntaxes.
There’s a never-ending flow of enhancements to languages and frameworks. To perform the job efficiently, you must learn them within a given timeframe.
And, If you don’t keep up, you may eventually become obsolete.
Or, at least, you’ll stop growing.
But if you try to keep pace, you’ll get burned out quickly.
The situation can be drastic, especially in a senior position or when you lead a team.
As a senior, you’re expected to do your tasks and also oversee the juniors’ work. As a team lead, you’ll be responsible for the entire team’s delivery.
The pressure suddenly becomes double. But, the time you’ve in hand to learn & practice becomes less. After a point, you feel you’re trying to catch up constantly and are no longer in sync with the latest updates.
When this happens for a long (which is inevitable), you doubt you’re not doing enough to prioritize your responsibilities. Suddenly you start feeling incompetent and outdated.
Dealing with ‘my way or highway’ personalities
Software engineers face many frictions in their daily work. They’ve to deal with other developers, product managers, quality analysts, business stakeholders, and leaders.
Most of these interactions go smoothly except for a few that irritates the engineers to the core.
The most annoying is the ‘my way or highway’ personality.
You’ll invariably find such arrogant characters in every company. These people make life difficult for others by imposing their views on the rest of the team.
Arrogant seniors or leaders don’t like accepting that their idea may not be the best in the room.
They’re in a position where they can do what they want with a decision. It’s hard to rationale or have a mature conversation with such people.
I am not saying these individuals are not good at their job. Most often than not, they’re capable people who reached the designation for a reason.
However, they failed to learn to be a team player.
And that makes others’ lives hell when their views conflict with that of the senior or the leader.
Software engineers find it highly frustrating when an idea is forced upon them with little discussion. They get demotivated. Their creativity takes a toll as they become unsure if their ideas will get accepted or battered based on how the person with power perceives them.
The passion erosion
Many people are passionate about programming during their college days. They dream of becoming software engineers. However, their passion evaporates after a few years in the software profession.
In college days, you code what you like or care about.
Your projects are always of your choosing.
You’ve all the creative freedom and have a personal interest in writing the best program.
But once you enter the professional world, you must code on projects your client pays for. You’ve to build it the way they want it. There’s not much scope for creativity in it.
And there won’t be much coding once you become a senior.
Once you reach a certain experience level, you’ll be expected to do a lot more than just programming. Somedays, all you get to do is take interviews, attend calls, prepare slides, write documents, train juniors, review codes, etc.
These non-programming tasks can get monotonous and demotivating, especially when they interrupt your programming routine.
Now the fun part of the programming you always loved about is killed.
People will tell you — you can do eight hours in the office, go home, and then go wild with your passion project in your personal time.
But it’s easier said than done.
After doing four to six hours of mentally draining tasks, most engineers do not feel like spending the rest of their work hours in the office. You’ll hardly have the mental equity to do more coding, even on your passion project.
All you would like to do is chill with your friends & family or have some quiet time after half a dozen conf calls at work.
Years will pass by, and you’ll realize your passion has evaporated in front of your eyes.
The imposter syndrome
Imposter syndrome is a big issue among most software engineers. People with decades of experience can attest to it. They, too, suffer from it even though they’ve achieved a lot in their career.
No matter how talented you’re or how large a company you work for, you struggle with feelings of inadequacy. You tell yourself you don’t deserve the designation or the salary.
You have a constant need to prove your worthiness.
Among the 17 companies that tallied up with the most survey responses, Expedia claims the number one spot for most employees suffering from impostor syndrome (72.88 percent), followed by Salesforce (66.88 percent), then Amazon (64.48 percent).
The fear of someone finding out about your incompetence will always bug you. Yet, you’ve to keep pretending that you’re confident.
As a result, you put pressure on yourself to push the limits. You try to work excessively. You also spend time outside work hours trying to keep up with the technology.
The constant drive for validation often leads to burnout and stress. The unhealthy work-life balance starts impacting personal life. With time, breaking free from the vicious cycle of imposter syndrome becomes harder.
Final Thoughts on Software Engineering Challenges
Software engineering is not an easy profession by any means. However, being aware of the challenges can help aspiring engineers and experienced professionals avoid the pitfalls.
You can be a successful software engineer without impacting your mental health or personal life.
With close to two decades of experience, I’ve faced all these challenges. Yet, I still enjoy what I do.
Adopting a mature attitude, finding the right work environment, fostering a collaborative workspace, and understanding my own limits work for me. Acknowledging the difficulties and taking proactive steps to address them helps me navigate the complexities of the software world more effectively.
Remember, software engineering is more than just technical expertise. It’s also about cultivating resilience and emotional intelligence and building a strong support network. You can also balance professional growth and personal well-being by knowing what matters most to you.
Subscribe to my free newsletter to get stories delivered directly to your mailbox.
Comments