I see this question relatively frequently from online forums, where people new to the field are curious about the downsides of being a software engineer. I think this is fed largely by the glitter and glamour people see in media. You often see people bragging about their large salaries and cool company perks. Overall, I love the work I do: the job security, the compensation, the project-based workflow and the flexibility. So...what's the catch?
- Product support sucks.
The extent to which this effects you is dependent on the company, team and project you work on. It can vary from "I do zero product support" all the way to "I am expected to be available 24/7 for weeks at a time, and this often results in getting up at 3 AM to fix complicated issues." The latter is obviously really disruptive to your work-life balance. Not only actually doing it, but just being on-call, since you never know when that alarm bell might sound.
- It's very competitive.
This is especially true for your first job, as well as the large and coveted tech companies. It's not uncommon to be measured against peers who are extremely smart, extremely dedicated and extremely passionate. That makes everything from getting your first job all the way to getting promotions difficult if you're not motivated or interested. The pressure to work long hours to keep up or advance past your peers can get to you if you're not careful.
- It requires a dedication to lifelong learning.
For me, this is a benefit most times, as I like learning new things. But if you're not interested in the field, you will be in danger of falling behind. And if you don't have a job where you're learning new things, you'll have to learn them outside of work on your own time. If you don't, you might start to worry about being irrelevant if you ever need to find a new job. I have friends who are in different fields, and after their college education completed, they are mostly coasting on that knowledge. Sometimes I'm envious of that.
- It can be demoralizing.
You'll experience this right off the bat when you start learning programming - trying to debug programs and deal with issues in complex systems can be very difficult, and extremely frustrating. This field is unlike other engineering fields in that we don't have any physical model to touch, feel and make sense about. There's a lot of juggling complex, ambiguous systems and states in your head. Also, due to the aforementioned competitiveness, it can be demoralizing when you compare yourself to your peers. Imposter syndrome is a very common psychological issue in this industry.
Despite all of that, I wouldn't trade my profession for anything else. All of those aforementioned points have silver linings! Yes, on-call support is no fun. But being at the heart of the company, the engineers who make things happen, can really instill a sense of pride in your work. The competition also implies that you're working alongside talented, smart and passionate coworkers. And if you're like me, lifelong learning is awesome! It's not unusual for companies to pay for you to take new courses, learn new technologies and explore new things. And while debugging complex systems can lead to many frustrating times, the feeling you finally get when it all comes together is unmatched.
So please don't let this slightly negative post dissuade you from pursuing the field, if it strikes your interest. It's truly a great career and industry to be in.