In 2008, Alex Iskold published a very popular blog on the topic of what it takes to be a great software engineer. He made some good points, but left out a number of very crucial traits. Additionally, a number of his points have become less true over the past three years. This article takes a more detailed approach in trying to fully cover the ultimate 10 traits that every modern engineer should embody.
1. Great Software Engineers Understand of Themselves
Every professional must understand what career path is best for them. To choose a career path, a person must have a good understanding of what they want out of their career and maybe out of life in general. Only when these larger goals are well-understood can the person have a greater sense of which projects are right for them.
The right project is out there for everyone. A "right" project is one that utilizes the programmer's strengths and helps improve on their weaknesses. The right project also offers learning, intellectual challenges and direction towards achieving ultimate career and life goals that the person has set out for themselves.
Choosing the right projects can mean higher motivation and passion levels, which are ultimately strong factors in the engineer's and the overall project's success.
If the engineer does not understand fully what they want and what kind of projects get the best out of them, they are more prone to choosing just any project or job, which more often than not leads to mediocre results all around.
2. Great Software Engineers Understand Product Design and Business
Engineers cannot be drones that simply carry out instructions handed out by their bosses. They must be proactive thinkers. When developers are designing and writing code, they must understand why this code is necessary in the first place. Furthermore, it is very important that the engineers be able to fully think thorough how the users will use the software or site. Having that understanding gives a greater sense and insight into the best ways to architect that software.
If the developers don't have a good sense of at least the general intentions of how the users will be using the software and what will make it unique and ultimately provide value to its users, how can the engineers possibly know what the important parts of the design of this software will be?
3. Great Software Engineers Understand Computer Science, Data Structures, Algorithms and DB Design
The perfect blend of software design is one where the business or project goals and needs are accounted for in an elegant, efficient and robust design of the software. That is almost the panacea of software. When the engineer who understands the greater non-software goals of the project can translate those goals into working software, birds begin to sing and flutes begin to play.
Successful projects either start out large or become large by being successful. They must ultimately be designed with the right fundamentals, algorithms and data structures to be able to grow nicely without being hampered by bad design. A good engineer must be able to balance high-quality product design and high-quality software design.
In nearly all cases, to design software that handles high loads, this can be done only with proper and often deep knowledge of computer science, algorithms, database design and data structures, as well as the ability to use the right ones at the right times. Otherwise, without having great fundamental building blocks, the software will collapse under increased load.
4. Great Software Engineers Pay Attention to Code Quality
Quality of code is a tremendously broad subject. This article cannot cover all the possible ways in which software can be of high quality, but here are a number of points that are at the top of the list when it comes to quality, in no particular order:
- Write maintainable code.
- Document the code.
- Write secure code.
- Continuously revise, refactor and improve the existing code.
- Write automated tests for the existing for the code.
- Write code that actually works!
- When possible aim for simple and proven solutions.
5. Great Software Engineers Are Accountable and Ethical
Great dependability and an aspiration to a high level of ethics are purely professional and human values, not just engineering ones. How can people work with an engineer who is not dependable and trustworthy? This does not mean that the engineer must always meet all deadlines. Not meeting particular deadlines is something that often happens in the engineering world. And it can often be the result of the deadline being overly aggressive rather than
the engineer's fault.
To be dependable, accountable and trustworthy, the programmer must strive to be accountable for the deadlines he agrees to, and honest about the mistakes he makes. More often than not, it is OK to make mistakes. Making errors is just part of being human. The important issue here is handling the making of the mistakes in a proper, constructive, and ethical way that helps to limit damage within the project.
Additionally, in general, a good engineer is one who you can give a task to, and more or less expect that it will be done in 90% of the cases unless some large obstacle stands in the way. Quite often, the engineer must be able to solve problems independently and come back with solid solutions to given problems. That builds trust and accountability.