I hear this question sometimes, What makes a great developer? What are the traits of them? 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 attributes and habits I find in developers who I think are great.
Keep their skillset up to date
I will 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 doing. It requires a high level of technical understanding. But this can be hard in a time, where there is a new technology and approach everyday. It's hard to keep up. But somehow some developers are still able to do this. They might not have tried all new technologies but they know about most - which gives them an opinion. Being able to talk cons and pros of technology is great as it forces you to evaluate what you are currently using. Trying out new technology often gives you a new point of view and teaches you how to do things in a different way. It can also remind you why you love the technology you currently use so much!
Keeping skills up to date does not mean using bleeding edge technology in every application. But it often means tinkering around with it in hobby projects. Later when the technology is more mature it is easier to adept as you already know the basics. Often you will not be able to use the technology of your choosing at your workplace - but knowing what is out there gives you an advantage. If a great developer feels that he is lacking a skill to complete a task, he will find a way to learn it.
Understands the domain
Many developers are great programmers. They write great code and they make very few mistakes. But the mistakes they make isn't that the program is not working. It is just not working as intended. Sometimes we must ask ourselves why we are writing code. Most often it is to support business needs. 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 just the right solution to the problem.
You will proably never see a full featured specification of the business requirements - often specifications are lacking many details. Knowing the domain makes you able to know or ask about the details.
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 at being good listeners. So while they have immense knowledge they are also open to learning new things. They know they did not get where they are on their own - they most likely learned what they know through others.
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.
Problem solver, patience and persistence
Something that I often see discouraging people from programming is the time it takes. In a broader sense - 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. But trying yourself is very rewarding.
This is my honorable mention for this post. I am not a 100% sure this would fit as a requirement to be a great developer. But this is a quality I really like to see in developers. 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 how we learn. As long as you do not bombard others with questions of course.
Nothing beats experience. You do not become a top notch developer over night. 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.
Anything I left out? Please add it below! :)