5 Most Important Lessons That Helped Me Grow As A Software Engineer
The most difficult lessons I had to learn to unlock my full potential and grow beyond myself to become a great software engineer
Depending on what you try to achieve in life, you might want to advance in your career or simply in the profession of a software engineer. Perhaps you want to become really good before you start your own business, or you want to climb the corporate ladder. But no matter what your motivation is, growing as an engineer does not only have a lot to do with your hard skills. It's also about soft skills and your own mental model.
Here are the five lessons, as far as I can recall, that helped me immensely to grow as a software engineer. Let me share them with you in the hope of them helping you as much as they helped me.
Learn to listen
There is a German saying: “Reden ist Silber, Schweigen ist Gold”, which roughly translates to: “Talking is silver, being silent is gold.”
What it basically means is: Sometimes, it’s better to not say anything unnecessary. In an even broader scope it can be understood as: Listening to others can often be more valuable than talking yourself.
Especially in software engineering, just listening to your peers can be a very valuable action to perform. You don’t always need to comment on everything, especially if a comment wouldn’t add a lot of value. The amount of knowledge you can gain by simply letting your colleagues talk about their experience with certain problems, or approaches they have taken in the past, is invaluable.
You also don’t need to interrupt your peers if you have questions. Let them finish first. If you are afraid to forget the question, write it down. Ask the question later.
Accept you don't know everything
Software engineering is too broad and too deep as if we could ever really know everything. You need to accept and understand that. The more senior you become, the more you realize what you don’t know. But that’s not a bad thing. It is just what it is.
There are many different fields in software engineering, and even many fields are so deep that you can never learn everything about them. Even if you try, your older knowledge will be outdated the moment you reach a quarter of what there is to learn in your field of interest.
Instead, focus on what you have most interest in and let projects drive your curiosity. On-demand learning can often be way more powerful than learning things only for the sake of learning them. Especially if you have a solid foundation of knowledge built up, it becomes way easier to absorb new concepts and technologies on the fly.
You will never catch all edge cases
Bugs are everywhere, and they will always be. It’s not optimal, but once again, it is what it is. That is what quality assurance measures like tests are for, to catch as many of them as possible. But at some point, it’s not worth putting more thoughts into catching all possible cases. No matter how much energy you put into it, there will always be cases you can’t even think of. It’s better to preserve this energy for more important tasks.
A better way to deal with this circumstance is to try to catch the most common ones you can imagine and then guard against the unforeseen cases as good as possible. In the end you need to make sure that bugs you couldn’t catch don’t bring everything down. Sometimes, a circuit breaker can lessen the blow of even the craziest cases of upstream errors, and sometimes a generic exception handler makes your day. And sometimes, you can even implement software in a way that leaves no room for unforeseen cases. That is also something you learn with more experience.
Software engineering is a team game
There is not much space for lone wolves in software engineering. We work in teams for a reason. Those teams are usually assembled to make working on difficult problems easier by having an available pool of talent who can learn from and help each other. Whether it’s just talking about an issue with your peers, a system design session with the whole team, or just the reviews your colleagues do for the code you produced, team members are a part of the process.
Not leveraging your peers as what they are (next to hopefully being awesome humans), valuable resources to make use of, is a waste of said resources. It’s even counter-productive.
You should also always take care of preserving a good atmosphere within your team. It makes no sense to ruin that atmosphere only because of a small dispute between you and one of your colleagues. Make sure to keep everything as inclusive as possible, including reviews. Healthy and happy teams are known to produce better results, and a good atmosphere, paired with great results, helps to keep your own morale up. You could call it a win-win situation.
Automated testing is not optional
Look anywhere online, and you will basically identify two camps of developers and engineers. The first one advocates for writing tests because they’re helpful. The other one advocates against tests and says that they are nice to have, but should never block you from launching something new.
The reality is, however: Automated tests are nothing else than an (drumroll, please) automation of all the manual tests you do over and over again. Especially if you launch a product on your own, your users won’t have infinite patience with you. If you repeatedly break something, users will drop your product in favor of another, more stable one.
Look at it from the perspective of a lazy human being: Why bother to manually click through a frontend over and over again if you can just let your computer do the work? The only thing you need to learn is a few more APIs, and you will probably need a little creativity to really test what you want to test.
Testing can also have a pretty positive impact on your career. Always having to ship hotfixes after each release will sooner or later catch your manager’s attention, but not in a positive way.
Summary
Before we end this article, let's do a quick summary of the five tips previously presented:
- Learn to listen
- Accept you don't know everything
- You'll never catch all corner cases
- Software engineering is a team game
- Automated testing is not optional
Those are the most important lessons that helped me grow. They are really easy-to-implement and won't cost you a lot. So, what are you waiting for? Go and try them out, they might help you to grow, too!
You have (finally?) come to the end of this issue, so let me tell you something:
Thank you for reading this issue!
And now? Enjoy your peace of mind. Take a break. Go on a walk. And if you feel like it, work on a few projects.
Do whatever makes you happy. In the end, that’s everything that counts.
See you next week!
- Oliver