While the COVID-19 crisis has threatened the jobs of millions around the world, many of those who managed to keep theirs took the opportunity to pause amidst the chaos and think about the role “work” has in their lives.
How useful is it to society? Is it important to the economy? And how does it contribute to their personal growth and well-being? At the end of the day, we all want to find a dream job that’s enjoyable and meaningful, right? But what does that actually mean?
Having a meaningful job is something (almost) all of us are striving for but don’t always find easy to achieve. It certainly helps to be well-paid to generate motivation. But once you’re content with your salary, having more money will not help much. You would probably need something more to keep you moving forward... and with gusto, too. (In fact, we have an entire article before about whether money should really be a dealbreaker when job hunting. You should check that out.)
Of course, learning how to properly write clean code, learning the fundamentals, and all that technical jazz is exciting and crucial for the first few years of your career. But what about later?
For many software engineers, we’re usually motivated by new technologies. But then many also become tired of them quite quickly, especially when most new technologies don’t bring anything valuable to the table. Have you heard of the Javascript Framework Fatigue? You see, embracing new tech, just for the sake of it, can often be due to a lack of maturity. As a software expert, you need to learn or hone skills that you can actually use. No matter how shiny and new a technology is, if it doesn’t help you find the solution you need then it’s basically useless to you.
What you need is to develop the right mindset and habits that will serve your professional life for the long haul. Below are a few pointers to give you some inspiration, and to tackle one of, if not the most pressing problem of the software developer life—the search for meaning.
Every project is different so there are no hard and fast rules or list of priorities you can abide by. However, there are basic pointers on how you can tackle every project. Here are a few.
Understand what is valuable for every client.
How do you do this? The right way, of course. Do some research on their business and their end-users and ask questions. Remember that software solutions are created to solve real-life problems based on real users' struggles, so make sure you understand the "Whys" behind them.
Also, understand user feedback properly. Don't take it personally. Instead, consider these... Why did the user request the change? Why is that change essential for the client? This mindset will allow you to come up with relevant feedback, based on your experience, from the many web applications you have already created. On top of that, it will also open up new horizons and let you gain more knowledge on markets or industries that you might not know yet.
Another thing that may help is to involve a business stakeholder in the feedback process. And when you do, emphasize the timeliness of their response and the clarity of their priorities. Avoid having middlemen who may have a poor or insufficient understanding of the business.
There is a certain pleasure to having a neat schedule and well-organized agenda. Managing tasks is not easy, but doing it properly establishes a flow in the creation process and a sense of predictability. It also removes some uncertainty and lowers your stress since you know what to expect.
Also, being able to see results, and have tangible progress, is the best way to keep your motivation up. Below are some of the things you need to get a handle on from the get-go.
One of the most challenging tasks in software development is determining the tasks to prioritize. At the same time, it's also the most critical task to ensure project consistency and help understand how modules and objectives are related to each other. If you simply receive a set of assignments to accomplish without understanding how they are related to the short- and long-term objectives, you will end up as a mere cog in the machine executing tasks blindly.
You should avoid this at all costs. Why? Because it will most likely create disparate or unconnected modules or components that, when put together, will fail to create a consistent whole.
There are two notable points you need to know about priorities:
Don’t delay fixing bugs. The longer you wait, the more difficult it will be to correct the bug.
Also, work only on one task at a time. Multi-tasking breeds distractions and slows down the whole process of creation. If your client has a tendency to have a lot of ideas, ask them to set up a list of priorities. If they can’t make up their minds, make the decisions for them.
Lastly, don’t delay releases. The ability to release fast is one of the most important metrics of performance in the software development industry. If you’re afraid of releasing, it’s probably because you have an underlying problem of quality, lack of automated tests, or you’ve lost touch with the complexity of your own code. If you want to avoid that last bit, read about how to manage your stress effectively below.
We all hate redoing the same job twice. After all, you want to avoid technical debt. Rewriting software because it became unmaintainable is the worst thing that can happen to a project. If you catch yourself wanting to rewrite everything too many times it’s probably because you have a quality problem in the first place.
So make sure you answered the described stories properly and followed all the acceptance criteria. Don’t second guess. Step up and ask for clarification if necessary. Asking questions is the mark of someone who’s interested in their work and wants to do it right.
This has been repeated a thousand times throughout history but it’s still a valid point to seriously think about. Create simple solutions that are loosely coupled and open for change, using interfaces and layers of abstraction. Avoid using unnecessarily complex tools and libraries when something can be solved using a small and simple solution. There is a library for everything but that doesn’t mean you NEED a library for everything. A lot of very popular libraries—moment.js, among others—are also terrible in terms of performance, size, or security vulnerability. So think twice and be mindful about installing things. Make sure the ones you do are performing well and actually bringing value to the project.
Also, create a simple user interface and avoid cluttering it with unnecessary functionalities. Consistency, after all, is the mother of all good code.
Having the right attitude is essential with any job, more so if you’re working in a team. After all, maintaining good (if not excellent) team dynamics at work is equally important as the project output you'll deliver. And how do you ensure everything is copacetic when you're at work? Here are some pointers that could be of great help.
It's easy to feel overwhelmed, especially when working in an unorganized environment. For instance, if you work in a company that is full of bureaucracy that heavily relies on vertical communication and validation... or is constantly in rush mode. What you should do is manage stress, accomplishing one task at a time, such as...
Naturally, you won't always agree with your teammate's solution. But if it's not endangering the project such as adding technical debt or unnecessary complexity, then it's probably good enough, and you should give it a try.
The cost of creating unnecessary conflict is much higher than the benefit of always being right. Also, try to build rapport with your teammates. Enjoy some time with your teammates outside work, during which you can share some non-professional chit-chat and show some interest in their hobbies or families.
Being socially adept starts when you stop being selfish and egocentric and learn to think about others' feelings.
As with most things, it’s always good to have forethought and be ready for possibilities. So…
Learn how to properly express your ideas in a straightforward manner. If you don't know where to start, Toastmasters clubs are typically focused on helping you develop your communication and leadership skills. Check out clubs in your area and try getting an invite to a few of their club meetings. Don't worry, they're quite a welcoming bunch.
Avoid beating around the bush and answer questions directly. People constantly changing topics can be pretty annoying to deal with. It’s almost impossible to get an answer without going back to previously asked questions or having to clarify everything over and over again.
Hone your writing skills, so it is easily understandable. Today, the bulk of communication (including your code) is via writing, especially now that we are all stuck at home. So knowing how to properly put something on paper is not just for your recipient's benefit but is also a sign that you fully understand what you're trying to say/convey.
And if you can spare the time and money, invest in some English language classes, especially if English is not your native language or if you learned it by simply watching sitcoms and TV shows.
The ultimate question you should be asking yourself is not whether your profession as a software developer is meaningful or not... but whether you have rendered any significant contribution to the profession/industry.
As with most things in this world, everything has a purpose, given the right time, place, and circumstances. The question should be whether you have made your profession count for something in the grand scheme of things. Have you created a solution to a real-world problem? Have you delivered a great application to a client that helped his business in a significant way? These are the right questions to ask… and having these is better than having the correct answers to the wrong ones.
Software Architect
Software Architect
Eric has been working as a software engineer for more than 20 years. As a senior architect for Arcanys, he works closely with the developers to instill the habit of learning, clean coding, re-usability and testing with the goal of increasing the overall quality of the products delivered by the teams.
More insights from
Tech Tips