Should you choose Software Engineering as a career ?

       If you've found this page, you're probably contemplating a career in software development. Maybe you're in high school trying to decide on a college major, a parent trying to help your child choose a major or perhaps you're a working professional looking for a career change.
      I've personally answered this question not less than fifteen times over the last 8 years and it always startles me that people are keen to jump into a career path just because "they know someone who knows someone" who is having a "great career in software development". I think adding to the problem is the fact that any University / College website you go to always answers the question " Why you should be in Software Engineering " and paints a really rosy picture of the profession. No doubt software engineering provides a very lucrative and satisfying career, but the question that you really need to answer is " Is Software Engineering the right career for you ? ". How do you make that decision ? Well – start by considering a few pros and cons of working as a software professional.
1.  Job satisfaction from creating/building new things: If you've ever got a kick out of building tin robots as a child or creating new gadgets with science kits, then you'll probably like software engineering. This is probably one of the main reasons I'm in this profession – every time I build a new piece of software and see it work, it just makes my day.
2.  It's decent money : This is often the first question I get – does software engineering pay well ?  – infact this is often the first question someone asks me. I mean let's face it – we can all think of something we'd like to do more than working if money wasn't a concern. So, the answer is, yes it does – in fact the pay is consistently the second or third best among all engineering disciplines (after petroleum engineering). In US, expect to pull in anywhere between $75K – $90K if you make it to the top companies.
3. Immigration opportunities: If you're in a developing country like India, China etc., Software Engineering provides you with the most opportunities to move to U.S., Canada or Europe. This stems from the fact that software engineering is not a licensed profession like some other engineering disciplines in these countries. For example, in Canada you need a PE (Professional Engineer) to work in areas like Eletrical, Mechanical or Civil engineering disciplines. From what I've seen , it's a multistep process that can be frustrating and take years for folks coming into Canada with foreign degrees . Software engineers, on the other hand find it a lot easier to find work upon immigrating to Canada.
4. Opportunity to Work from Home/ remotely: Software engineering also provides more opportunities to work from home / remotely than many other engineering disciplines. After all, you cannot be a manufacturing engineer and not be present at the manufacturing plant ! So if your life situation demands being at home or having a more flexible schedule, software engineering has a lot to offer.
5.  Easier to go into business for yourself: If you want to start your own consulting business or SAS(Software as a service) or packaged software business, the barrier to entry is incredibly low when compared to traditional engineering disciplines. There is no factories to build, no machinery to purchase , no labor union issues – all you need is an idea, a computer and perhaps a cloud platform subscription like Azure or AWS.
          Okay, so now that we have seen some of the major advantages , let's talk a little about the disadvantages of being a software engineer. Again, this is strictly based on my experience and from what I've seen with my co-workers.
1. You need to keep on learning for rest of your working career: You'll need to learn new things in almost every profession – but the frequency with which you need to learn new things is extremely high in software engineering. Case in point, I had to learn three new automation frameworks, 3 new version control systems and 4 new programming APIs in the last 5 months or so. The need to learn might be continuous or come in bursts depending on the system you're working on –  but learn you must 🙂 Something to consider before deciding on this career path. 
2. You might have to be On-call : Gone are the days when only medical professionals and police had to be on-call and do night shifts. With the move of the software industry from the packaged software model to the software as a service (SAAS) model, chances are high that you'll need to be on call frequently to provide support for your product. So you need to be mentally prepared for that.
3. Your standard of living might be lower than some other engineers:This is a tricky one and took me a while to realize. If you're a software engineer, chances are you'll be living in a tech town filled with other software engineers like San Francisco or Seattle. What this basically means is that almost everyone is making around the same money as you are . So the cost of living (food, rent , services)in these places tends to be much higher than the norm. On the other hand , if you're a Mechanical Engineer working at a factory in a manufacturing town where the majority are blue collar workers , you're more likely to be in the top 5% of earners, which is going to give you a much better standard of living because the cost of basic necessities tends to be priced to fit the income profile of the average earner. For example, a two bedroom apartment in Redmond area near Microsoft campus will run around $2000 per month – you can rent 4 bedroom houses for the same amount or less in  most manufacturing towns.
4.  Risk of outsourcing : This is a real threat – it's much easier to outsource software jobs than jobs in industries that require heavy infrastructure investments like petroleum / chemical / mechanical engineering . So you need to be mentally ready to go where the jobs are and not get too attached to a specific place.
5. Long Hours : Although the typical workweek ranges from 40-55 hours, there are times when you might have to put in those 70-80 hour weeks, especially before release dates or while being on call. So be mentally prepared for that 🙂
6.  Sedentary lifestyle: This is true for most white collar jobs but especially pronounced if you're in a pure development role. I recently bought a fitbit and found that I'm averaging about 2200 steps throughout the workday , which is 8000 steps short of what is needed to maintain a healthy heart as stated by American Heart Association. Also, sitting in front of a computer for 8-10 hours a day can cause musculoskeletal issues. So if you're a programmer, make sure you get some physical activity in before or after work hours.
A couple of additional considerations:
1.   Software Engineering is a group activity: While it is true that you'll spend a large chunk of time coding / debugging by yourself, you'll spend an equally large chunk collaborating with other developers. testers and Program managers on activities such as design and code review, analyzing customer feedback etc. It is a total myth that if you're not a people person, you should become a programmer – in fact programmers who're not good at interpersonal skills and collaboration don't get very far in their career. At the end of the day, no matter what business you're in, you're definitely in the "people business".
 2.  Work Environment: In general, you'll probably be working with a group of people equally smart and motivated as you are. This is especially true if you're working in Apple, Google, Microsoft etc. So you'll have to really fight hard to differentiate yourself from the pack and get that next pay raise or promotion. On the other hand, this provides an incredible environment to learn from your peers and develop your skills. There's hardly any day at work when I don't pick up something new from my colleagues.
3.  Location (U.S. Specific):  If you're in US, most likely need to live in more expensive coastal areas where most of the jobs are concentrated (think New York, LA, Seattle). If you have family in the fly over country or want to live inland, it might be difficult to find a suitable tech job there.
       At any point of time, the above mentioned pros and cons have different weights in different people's lives. So if you're thinking about a career in software engineering, consider how much weight each factor has in your life and then go from there. Good luck and feel free to leave a comment/ contact me with a question you might have.