3 must-have qualities of a great software engineer
There are many qualities of a great software engineer that will make you stand out. Among them, these 3 are crucial for you to become a great software engineer and leave the competition behind. Surely technical qualities matter a lot to be counted as a superior software engineer. On the other hand, this post is geared towards the non-technical aspects of software engineering.
Software engineer qualities to work on #
With no doubt, a great software engineer writes working, testable and maintainable code. Numerous technical skills will be required to differentiate yourself as a great software engineer. Writing clean code, debugging bugs, and following standard are some of these technical skills.
Some opine positive attitude and communication skills as must-have qualities of a great software engineer. Another post points to curiosity and a love of learning to be essential to be an efficient software engineer. You can find a great software engineer in Eastern Europe too if you are looking for one.
For this post, we are more concerned than just the hard skills needed to prove yourself as a valuable software engineer. Let’s proceed to the software engineer qualities you need to work on to set you up for success:
Good business acumen #
Simply put, business acumen is an understanding of how a company makes money and meets its goals and objectives. I have written in a previous talk too:
Solutions and value to the business is much more important than the latest language/framework.
As a software engineer, you must not worship a particular language or framework. Similarly, you should not apply the latest trends and fads to your day to day work just because it is trendy. Always think of what value does it add to the business. Also, analyze, how does it help make/save money for the business.
Think of the trade-offs and the cost to benefit ratio too. For instance, once we became aware of a bug. It was affecting ~0.25% of the customers.
The cost of fixing the issue at that time was far more than not fixing it. We did eventually fix the small bug but it was only in the next sprint.
This is an example of good business acumen as the business was not losing any money. Yes, a fraction of the customers were facing a minor inconvenience but that was also fixed in about a week.
Product managers/owners must have great business acumen. It is also important for software engineers to have good business acumen. I have never seen a software engineer who was promoted and had bad business acumen. Maybe their technical skill was a bit rusty but it was easily covered by good business acumen.
If you work as a software engineer for an e-commerce company, you must know what the conversion rate is. Similarly, it is better to know things like Customer acquisition cost (CAC) and Customer Lifetime Value(CLTV). In case you are working for a SAAS business, you much understand what churn rate is all about to sharpen your business acumen. You can learn more about how investors look at numbers in a fun way by watching Shark Tank. It sums up to having a great sense of how the business works and accumulate valuable domain knowledge over time are super crucial qualities of a great software engineer.
Highly responsible #
Great software engineers are highly responsible. If they take up a task, they make sure that it is working well on production. They will even go above and beyond to establish more clarity around the task by building reports for better visibility.
I have never met a great software engineer who will throw his/her work over the wall. By that, I mean saying things like “It is done from my end now it is QA’s responsibility” or “I have written the code, it is approved. Now it is DevOps’ headache to get it to production”.
A quality of a great software engineer is that they follow up the task on hand very well. Even after the task is done they will come back to it after days or even weeks to check that is it working fine. They will evaluate numbers and take pride in the great work they have shipped.
For an efficient and highly responsible software engineer the Quality Assurance (QA) team is more like a gate to pass by not a group of testers.
The engineer would have already thoroughly tested their work in both automated and manual ways. Finding obvious bugs in the work done by an amazing engineer would be difficult. As they would be already highly responsible to think about that edge case or that probable use-case and tackled it in the code. They might have gone ahead to write tests for such scenarios so that it doesn’t come back and bite the team in the future.
Following true DevOps and SRE philosophy, a great software engineer will own their work and be accountable for it.
If things break in something they have developed and deployed, they will be the first to respond.
The response can be as quick as a rollback or even write a quick fix to patch the issue temporarily. They will come back to the issue and release a permanent solution to the issues introduced by the code they have added. Basically, great software engineers truly live by the philosophy of you build it you run it. They also make great on-call engineers.
Ace team players #
Being an ace team player is another crucial quality of a great software engineer. Engineering resilient software is a team sport and efficient software engineers know this fact very well. A great software engineer is an excellent mentor and a coachable mentee too.
A great software engineer will always look out for the whole team. They will help engineers junior to him/her and not hesitate to learn from everyone. A valuable software engineer will logically help another teammate. This does not mean that software engineer will always leave their talk on hand, context switch, and help another engineer. This means given the task on hand is at a parkable state they will park it, then go and help the junior team member get unblocked.
Great software engineers have this innate ability to translate technical jargon and requirements into simple layman language.
This in turn helps all team members understand what is being done. For instance, a non-technical product owner can easily explain to the executive why this feature will take more time. A valuable software engineer would go the extra mile to explain the need to refactor and then only do the main task. This will make it faster in the long run and make the feature more reliable too.
A great software engineer is an impact multiplier. Let’s say if s/he is somewhat free and they see that the QA person has a lot to do in this sprint. They will not think twice about helping the QA person and help the QA person.
A great software engineer knows and values the team output. S/he contributes to the team’s flow and outcome to be better not only their own.
Imagine this, the sprint is near to an end but nothing is deployed to production even though pull requests have been approved. A software engineer who is a valuable team player would assist in things that would help code reach production. They will be able to do it without overstepping on anyone’s responsibilities. These software engineer qualities are found in great software engineers.
Conclusion #
All of the above will only foster if the Software engineering culture of the company is on the right path.
As Dr. Willam Tate mentioned - “Rarely do managers focus on the quality of the fish tank & what surrounds the fish: they mostly notice individual fish and become fixated on them. But if the water is toxic, the fish suffer. If there is no movement in the water, it will be deprived of life-giving oxygen”
To get the best qualities applied even out of great software engineers the whole software engineering culture needs to support it.