A good software engineer is a creative problem solver There are about worldwide, and this number is expected to grow to 26.4 million by 2019. Finding a out of this pool is not easy, especially when we do not have proper metrics. In interviews, we end up asking questions on thread pooling, algorithms, puzzles, and system design, and it’s rare for two interviews to give the same result. So, what is the missing part of the software engineer’s job description? 18.2 million software developers good engineer I feel that there is a misconception that the responsibility of a software engineer is just to code: the more cards you churn, the better you are. Sometimes, it’s about how well you can learn and remember algorithms. If the job of the goalkeeper is to stop goals, who is a better goalie, the one who blocks 50 goals and whose team loses, or the one who stops three goals and whose team wins? A good software engineer solves customers’ problems. He or she does this by collaborating with people and delivering reliable and maintainable software. I refer to anyone who is trying to solve a problem with software as a customer. When I ask a few developers why they are working on a card or feature, they say, “My manager/product/customer asked me to work on this,” or, “I got to learn machine learning.” Since developers, not the customers, build the software, it is the engineers’ understanding that gets built. How can you solve something that you don’t understand? So, the first non-negotiable quality is . It does not mean that you merely deliver what is asked for. An example would be the following: a customer may assume that software that works for 100,000 users will work seamlessly for ten million people. I believe getting to understand even 50 percent of what the customer wants is not so easy. Collaboration is more about and understanding the problem well. Eventually, it helps the customers with . collaborative problem-solving for customers questioning and eliminating assumptions creative solutions Customers are limited by time and cost. So, the next important thing is . When someone tells me that he or she exceeds expectations, I drill them to check if they are clear about the expectations. setting expectations How do you exceed expectations when you cannot understand them? Expectations change over time. First, you should be to accept the change. Then, keep the right. Communication is not about more or longer meetings or throwing around jargon. It is a consistent effort to keep the customer and the team on the same page. It is the comfort to question assumptions, to things that cannot be delivered, for things that get delayed, boldly say , , , push back features not useful for customers, create a safe place for discussion, pay attention to details, and to make . open-minded communication say NO proactively call out you don’t know ask for help give and take feedback ask questions informed decisions You , get feedback, and . Over time, the complexity of any project increases; older services are maintained and new features added, making the software less predictable in production. The usage peaks, software rots, the old license expires and the newer license requires an upgrade. Production incidents happen, especially during the planned personal time. You and solve it while managing the communication. deliver continuously improve continuously own the problem Keeping things simple is the hardest, especially over time. The services you own are relatively easier to debug and faster to fix, without breaking other systems. So, a good engineer , refactor the existing code, and . All this is done while managing the new-feature delivery pressure. You to deliver software that is reliable and cheap to maintain. strives to reduce complexity write maintainable software adopt good practices . If people say they are passionate about technology, I ask about their learning, and I know if they are passionate based on the answer. help in making good decisions and building better software. Further, aids in collaboration and . Curiosity is key Continuous learning and experimenting humility about your capabilities managing trade-offs As the system becomes complicated over time, it is rare for one person to understand it entirely. You offload it by building the team and . And you love to work with awesome people because you learn from them, despite their experience. You are responsible for building the team. A good engineer spends time on . During hiring, you spend time understanding the strengths and weaknesses that a person comes with. Understanding the existing system and team dynamics helps when customizing the of the new team member. sharing the knowledge hiring onboarding How can you be a good engineer just by writing code that is not used by anyone? Perfection is the enemy of progress. Just like a 30-minute workout and a balanced diet can keep you healthy looks simple, and yet is uncommon, a good software engineer is not so usual. At a minimum, a good engineer collaboratively understands the problem and uses technology to provide creative, maintainable solutions.