Disadvantages of being a Software Engineer

The life of a Software Engineer is generally pretty great.

However, not every aspect is so great.  Let's talk about some of the disadvantages of being a Software Engineer.

Let's also cover mitigating techniques so they're not as bad.

Long hours

Expectations are often very high for Software Engineers.

They are known to be paid well.  Engineering teams are often understaffed.  Business commitments are made.  Dates are set.

Software Engineers then work to get the job done.  As they work, they discover problems with requirements, unforseen technical complexities, and so on.  With immovable deadlines, the solution becomes long hours.

In my experience, customers and folks from other parts of the business often have near zero experience with software construction.  Somehow, this leaves them with the impression that things can be fast and simple.  Resetting those expectations can be hard.

To mitigate against working long hours, educate your stakeholders on the complexities of software and their project, in particular.  As problems arise, ensure that you're communicating with your stakeholders.  If you can help them understand risks, challenges, and delays, often you can work together to come up with a workable compromise.

To mitigate further, tune your planning process.

Early-to-mid career, you may feel that you can improve upon your estimates - which is likely true - and worthwhile.  Later, you realize that your long, complicated estimation process is still no match for agile planning methodologies, which allow for uncertainty and refining plans over time and with increasing granularity.

Challenging deadlines

The nature of business requires urgency.  Once they have identified a need, they need it yesterday.  The level of urgency is especially high for start-ups and small businesses.

Set yourself and your team up to under promise and to over deliver.

You can do this by defining the smallest chunk of work that delivers the most value in the shortest period of time.

Then, deliver that value and repeat.  This iterative process is a core primise of Agile Software Development - the beauty of it is that you can avoid too much up-front planning.

By taking this iterative approach, you end up with a steady stream of value delivered to the business - oftentimes avoiding a huge, dreadful deadline way off in the future.

If you can deliver value reliably and predictably, this can satiate business demand in a way that deadlines can often - but not always - fade away.

On-call

You may need to be prepared to hop out of bed at 3:00 AM to troubleshoot a problem your customer is having.  And if your customer is having a bad day, you will be, too.

Operationalizing software is hard.  There are so many moving parts and everything is constantly evolving.

The best way to combat frequent and challenging on-call shifts is to build automated tests into your software itself.

When you're planning your work, plan for adding these automated tests and running them on every commit, called Continuous Integration.  Make sure your team's number one priority is keeping "the build" green - compiling and automated tests passing.

Another mitigating technique is to build quality controls into your team processes. The most basic example is to ensure that Software Engineers are running their test suite against changes before merging commits to mainline source control branches.

You will still have problems, and when you do, study them closely.  Once your customer is unblocked, your next step is to understand and fix the root cause.  But part of fixing the root cause is also adding an automated test so users never encounter that issue ever again.

Learn More

It does not take a Computer Science degree to become a Software Engineer!