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.
 
PROS:
 
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.
  • Deb, this is fantastic advice for whether or not to go into software engineering. I would add that it’s a lot easier than other professions to try out before making any commitments. All you really need is access to the Internet and a computer. I also love that the profession has strong communities both online and offline.

    • That’s a great point Brian. The barrier to entry for trying out software engineering is really low – one can just pick up a programming language and do some pro bono work for local communities. Contrast that with trying to test drive aerospace engineering e.t.c. !

  • Don Hall

    All good points, Deb, but I have another take on it.

    Programming is a form of art and is no less attractive, to certain audiences, as a painting, sculpture, photograph, or poetry. Though a programming project may consume thousands of hours of effort, that are occasionally punctuated by a raised fist and a shout of “Yeah!” as you’ve solved a particularly devilish problem, when completed, it is a rush that you want to repeat.

    I began my career by learning FORTRAN in college which then led to various machine languages. PCs had not yet been invented and off-line storage was with either punch cards or paper tape. The internet was still germinating as Arpanet so online resources were not available. A college degree in the new area of Computer Science was the entry into the industry. Now, however, if you have the drive and potential then the internet can provide the
    resources to learn the skills, no real need to go to college. If a
    person has the skills, they are easily-demonstrated to
    potential employers through past projects.

    So, if you’re the type of person that conceives of new software products or services that others will find useful then brings them to fruition, you would never ask “Should I choose Software Engineering as a
    career?” since it is more likely that “Software Engineering has already
    chosen you”.

    Don

    • Thanks Don. You bring up a very valuable point – if the decision to enter software engineering is coming from a place of being passionate about writing code and treating it as a art, all these additional considerations probably won’t even come into play. I know that was certainly the case for me 🙂
      The issue happens when the passion for writing code is not strong enough to overlook the other incentives and disincentives. I know a lot of good software engineers who’re in it for the incentives – and that’s fine too – everyone has a different drive.
      And yes, the barrier to entry to software engineering is much lower than that of other mainstream engineering disciplines (like civil/ chemical). To be honest, if someone shows me a portfolio of projects that they’ve built and does well in an interview , I think I would not care so much if that person has a degree or not. All that matters at the end of the day is if they can write code and if they love writing code .:)

  • Richard

    “not a people person”, that is L. Torvalds, and he went far didn’t he. But the “interpersonal skills” thing is true, albeit sucking the fun out of the art, and bring politics into it…

    • +1 🙂 I think Torvalds is a bit of an exception to the norm – if you’re in the top 0.1% of your trade, I don’t think anything else matters much. For the rest of us though,interpersonal skills is pretty critical to get ahead beyond a certain point. The good news is that it is a learn-able skill 🙂

  • Mohamed

    I’ve been interested in robots, designing, creating, planning, and technology all my life. There were careers for these qualities. I eventually chose stuff like Mechanical but it was disrespected and has low salary and very high competition, I chose Mechatronics, but such courses and jobs are not available here in UK. I then wanted to choose Biomechanical engineering but that too wasnt in UK. So then I stuck to Mechanical eng or Automotive eng. But then when I tried to learn what they learn, I kept feeling unsatisfied and people keep scaring me that salary will be low or getting course related job is very hard. Then I realised what I truly like: Computers, smartphones, etc… I thought I liked the hardware of it but no, I liked using it. However, I’ve never coded before. When I did basic stuff like formula on Spreadsheet or HTML, I seem to be creative and really doing better than many other beginners. I really like that people value Software engineers. I love learning. I always watch documentaries, read books etc on different topics each time. And in Softare engineering, u have to keep learning and there are many languages to learn!
    Sad thing is, I cant. coz I am a loner. I dont socialize and very bad in socializing. But I can learn. I am also someone who makes a lot of stupid mistakes. I am a very bad problem solver when it comes to talking with others about the specific problem and complimenting to a solution. Like when I speak and my partner tells me a solution, I just accept it even though I cant accept it. And mainly, I am not practical so basically that means, I am not good at explaining things that I want to say to others especially when there is more than one person. I am not an A* student but like a B student in secondary school. Right now in Alevels, I get E’s. Because I cant focus on my studies while Im focusing on learning a lot of non-related studies like Python. 🙂

    • Hey Mohamed,
      thanks for sharing your thoughts.
      What you’re experiencing is not atypical at your age – when i was in high school, I wanted to be a physicist. That all changed by the time I graduated high school and I wanted to be a electrical engineer. Then in my 3rd year of engineering, I decided to switch to software. From what I’ve seen, this is fairly typical.
      You’re too early in the process to figure out if you’re good at solving problems or not — for most of us with normal IQ, it’s a learned ability rather than an innate one – so yeah, practice makes perfect 🙂
      If I were you, the only thing I’d focus on right now is getting through the A Levels with good grades — learning python / robotics etc can wait – but you really need good grades to have choices after high school. Once you get through your A Levels, a lot of options will open up in college. Most engineering programs have a common curriculum in the first year – which gives you a glimpse of the different engineering disciplines and will aid in choosing something closer to your natural inclination.
      And I wouldn’t really worry about the social aspect – most engineers are loners – they eventually learn how to be team players once they start working – some struggle more than others – but most eventually learn to be pseudo social 🙂
      If you have any questions – shoot me an email. Good Luck !
      -Deb.

      • Mohamed

        man fock you. I am not that guy anymore. I failed my life. Depression, diseases, infections disorders. no more engineering dreams. no more dreams. Just forget this life. trust me its focked up.