I hear this question sometimes: What makes a great developer? What are the traits? How do you become one? I have had the pleasure of working with many developers throughout the years. Everything from newly graduated to the ones who have been working in the industry for decades. Here I will list some of the characteristics and habits I find in developers who I think are great.
Keep their skillset up to date
Let us just get this one out of the way - as it is most likely given. Being a great developer requires you to have a high understanding of what you are working with. But this can be hard in a time where there is a new technology and approach everyday, it is hard to keep up. But somehow some developers are still able to do this. They might not have tried all new technologies but they have a basic understanding of most, which gives them the ability to be part of conversations on pros and cons between them. Being able to talk about the pros and cons of technology is great as it forces you to evaluate what you are currently using against what potentially is out there. Trying out new technology often gives you a new point of view and teaches you how to do things in a different way.
Keeping skills up to date does not mean you should be using bleeding edge technology in every application. It means knowing what is out there and using it when it is appropriate. Often you will not be able to use the technology of your choosing at your workplace.
Understands the domain they work in
Many developers are great programmers. They write great code and they make few mistakes. But the mistakes they make are not that the program is not working, but that it is not working as intended. Sometimes we must ask ourselves why we are writing this piece of code. Most times it should be because it is valuable to customers and that it supports a business need. If the business need is not understood it can be troublesome to write the right application to solve the task. Understanding the domain and client/customer helps you to create the right solution for the right problem.
You will probably not see a full featured specification of the business requirements - often specifications are lacking many details. Knowing the domain makes you able to know the gaps and ask about the details. If not an expert in the domain, a great developer is usually interested in the domain they make solutions for and work in.
Works as a mentor
If you think back to great developers you have met, you will probably be thinking of someone who taught you something. You also know that, that person would happily share his or her knowledge with you and be open to your opinion. Great developers share their knowledge while they work, they also have a tendency to be good listeners. So while they have immense knowledge they are also open to learning new things. They know they did not get to where they are on their own, they too learned what they know from someone else.
This does not necessarily mean that they organise meetings for knowledge sharing. It might simply be that they are good at pair programming, or talk joyfully of their previous challenges and how they got past them. They may even have a fun "war-story" about that big production problem years ago.
Patience and persistence
Something that I often see discouraging people from programming is the time it takes. In a broader sense - even outside programming - this is often the reason why people don't succeed in what they set out to do. They do not get results fast enough and they lose interest and give up.
Some developers just keep going and do not stop. When they are chasing a bug or trying to make the new framework work, they keep going until they have done it. They have no "I do not know this, so someone else must do it" attitude. They like to solve issues and get a kick out of it. Of course in some situations it makes more sense to ask than spend 20 hours figuring something out. You will often see great developers succeed together with others, when in company it is often easier to keep working on a problem.
This is an honourable mention for this post. But this is a quality that is great even outside software development. There is always that good developer who knows a lot and has great skills. But he or she is a know-it-all or directly rude. You would tolerate this kind of person because of his or her contribution. But you always dread asking him or her questions as you always leave with a feeling of being lesser or annoyed. Developers should never look down on one another for asking questions, as this is a great way to learn. As long as you do not bombard others with questions of course.
Is a problem solver
This is the basis of software development. You have an issue you need to solve or a need from a user you need to fulfil. Some tasks in programming are trivial and you know how to go about, others require you to "think outside the box". This is something that is hard to define, instead of taking the usual path on how to solve an issue you somehow come up with a better solution.
Another scenario is that there is no trivial solution to the problem. Great developers do not need to be told what to code, they only need to understand the need and from there they can make an appropriate solution. Sometimes the solution is far from clear at first, but they get there somehow.
Nothing beats experience. You do not become a top notch developer overnight. It takes time and dedication to become great - as goes with everything that you can master. If you have everything I wrote above I believe you can do it or maybe you are already there. Nonetheless you can always gather more experience or learn new things.
That is it
I hope you found this valuable, please leave a comment down below, I read them all!