The best software engineer

My friend asked me: How do you know a best software engineer from an average one? Following is my personal opinion:

The best software engineer is very careful when writing code by focusing on the quality not the quantity. The average software engineers like to code, they seem to stay in front of the computer most of the time to generate a lot of code but their programs may or may not work so they have to fix them over and over. This “code and fix” wastes lot of efforts and never achieve the quality as expected by the customers. Good code is done by software engineers that are disciplined, they know how long each problem should take, and carefully planning their approaches to make sure that they complete their task accordingly. As a manager, I have seen both types of software engineer, when I told them “I need this task completed by Friday” then by Friday, someone come and let me know that they have tested their code and it is ready for integration testing. With these people I can feel that there will be very little, if any, defects found by the testing team. However, there are people that told me “I am still coding but it will be done late Friday or early Monday” then with them, I can be sure that they may have skipped some tests to meet the dateline and most of the time their codes are full of defects. Why? Because a good software engineer know how long it takes and plan the work carefully and will let me know whether they can make the dateline or not when an average software engineer would rather code first then ask question later.

For every problem there are many ways to solve it but the best software engineer would try to understand the problem first before doing anything. By having understood the problem, he will be carefully thinking on how to solve it and discuss it with their team on the best solution. He knows that there are many options and what he proposes may not be the best so he is seeking advises from others and come up with a logical and better approach. By look at the problem, figure out what the outcome needs to be, he will figure how much time he need to solve it, and what kind of quality being expected before he even starts to work on the solution. On the contrary, average software engineers would immediately start to code first without much thinking then fixing it if it does not meet the requirements. This type of “code and fix “then “fix then code” will never create quality software because the more they fix, the more defects they will injected into the solution.

Best software engineers always share things with the team and learn from each others. They know that by sharing, they learn more so when they learn new things, new technologies they will discuss with the team about what works and what do not work so people can avoid making mistakes. They are better by making other better .They always seek advises from senior people because these people have experiences, been through many projects and know by instinct to make the right decision. Average software engineers may be very good in what they do but they like to be a hero, to be recognized by others so they do not like to share and keep information to themselves, in this case they are losing their value because software work is teamwork and a team that have too many heroes eventually will have no hero at all because everybody will fail. Even if they are good and could finish their works on time but if the team did not then the project still fail. When a project fail, it does not matter who is finishing the work first and who can do good work it is a team’s failure because the overall goal can not be achieved.

One of the skills that can bring everything in the project together is organization skill. Average software engineers are very good in technical but if they are not organized, they will not be able to get things done and eventually will be overwhelmed by the project pressure. Best software engineers always keep a project plan with detailed daily tasks and are able to prioritize them accordingly. They know their daily outlook of meetings and tasks and keep up to date everything that they must achieve on that day so things will not get postponed into the next day. They keep track of all their works and can instantly pull up projects, meeting reports, and other details when asked. By getting things done each day they know their schedules and expectations and be able to adjust them to meet project’s goals. On the contrary, average software engineers do not think far ahead but only work according to what the manager tell them and what the schedule dictated each day. When things change, they do not know what to prioritize and have no plan to accomplish them but rely on the project manager to assign them works accordingly. Best software engineers not only thinking about the project goals, but also visualizes it and understands how to accomplish it because they can see exactly what they must be doing each day, each week, each month to meet the expectation.

Best software engineers will constantly improving their skills. They always seeking new knowledge and usually do not wait for managers to ask them to take additional training. They learn new things on their own because they want to be the best. They find new training classes that they want to go and ask managers for permission to attend so they can learn some thing new and contribute more to the organization. Average software engineers do not like to learn new things much because they believe that they already graduated from universities, have degrees and know “enough to do their jobs”. They are content of what they know but they do not understand the fact that technology always changes so after few working years they will worry about their career because they may not have the skills that the company need and may not be able to keep the jobs. Software is a very dynamic field and if people do not keep up with the technology change, they may be eliminated.

There are many average software engineers in the industry today but there are very few “best software engineers”. The reason is simple: today very few schools would teach communication and teamwork in the software engineer program. Average software engineers may be good in technical but poorly in communication and teamwork. They do not know how to discuss things over emails, participate in SCRUM meetings, share “Best practices: in a technical reviews, present to the customer about a technical solution and promote hundreds people about the software product in a marketing campaign. The ability to communicate clearly and effectively is very critical to all software engineers. The better your communication skill, the farther you will go because best software engineers spend most of the time in communication, explaining the company’s goal, solicit customer’s business, solving problems, giving directions, motivating other workers etc.

Of course some of you may think that I am so idealistic about software engineering but I have been in this software business for over 35 years and have seen a lot of good software engineers as well as average engineers. I can confidently stated that the better you can improve your software skill, make yourself proactive in learning, sharing, improving then the better chance you will become one of the best software engineer that you have ever imagined. If you choose to think of yourself as “good enough”, and have nothing more to learn, you will always staying where you are then over time, you will start to worry because if you are not moving forward, you are not even standing still but actually you are moving backward because the world is moving fast forward.

As a software engineer and a professor, my last advice to you is you must have passion on what you do. Without passion, you will not be a great software engineer, or great at anything. Lack of passion is the number one reason so many software engineer never become good for what they do and it is also the number one reason many people do not succeed in their career. By follow these advises, you may get the position you want, improve what you have been waiting for, and you will be happier with your career because the software industry always demand the best engineer and it is great to know that you are one of them.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University