Preface: This essay is part of an ongoing conversation inside my own head and will likely be updated from time to time.
Most people probably already have a picture of what a great developer might be - the attributes of what makes a great developer.
Typically I have mixed underlying motives when I ask this question: I want to discover how to become a better developer. Or I wonder - am I a "good enough" developer?
Establishing the context for asking this question is perhaps itself part of the answer.
This is a list of "great developer" characteristics or attributes, traits I've appreciated in the developers I've worked with. No single person possesses all these, although there could be such great developers out there!
Wicked productivity / output / fruitfulness / getting things done. An uncanny ability to stay focussed on what currently needs to be solved, without getting side tracked by secondary issues.
Solving problems no-one else can, either through sheer experience, creativity, clear thinking, or mathematical/logical deduction.
Great ability to explain and teach concepts concisely and at the needed level of detail, often with very little preparation needed.
Designing and writing code in a really clean, concise way that others can easily understand; the ability to group concepts, name things well, and to separate concerns cleanly.
Fast typing super keyboard shortcut ninja. Quick developers know how to crank out a working solution, fast.
Expertise gained over time through deliberate practise in a language/toolset/platform/domain. Familiar with a range of methodologies, techniques and tools. They know how to use the right tool for the right job.
A solid memory that can access detail about a specific implementation long forgotten by others is a great asset in any team.
Anticipating the needs of the customer, sometimes more clearly than even the customer or stakeholder themselves.
A pleasure to work with, possessing emotional intelligence, willing to share credit, do a fair share of work, compliments good work, respectful of all kinds of people. They enjoy working with people and people enjoy working with them. They display a sense of humour and don't take themselves too seriously. People with this attribute can work with almost any person alive.
They make sure they never let anyone down, almost always doing what they say they will do, or alternatively they renegotiate the terms of their commitments. They under-promise and deliver above your expectations.
A deep commitment to precision in all they do - never ships a defect, their build is always green. Counting keystrokes, allocating memory conscientiously, definitely no spelling errors in their code.
Known by business leaders, the customer, or other stakeholders. Such individuals are able to communicate with stakeholders in an authoritative way that other developers are not able to do.
Willing to experiment, measure, feedback, fail and learn from failure. Does not take "silly" or unconsidered risks, but willing to try something new, and genuinely learn if it adds value. Failure can be a great teacher.
Someone with a student attitude committed to figuring things out for themselves. Constantly self improving, such peoplare are open to receiving feedback.
Cares about you as a person and recognises people are more than just software coding resources. They think about team career development and the future.
Has a well maintained library of existing code samples, snippets, test data, example solutions they have kept and built and curated, and are kind enough to share.
Contributing prolifically to open source and the community, involved in open source projects and sacrificing their own time for the benefit of the larger developer community.
Has deep dev-ops skills and know their way around a terminal screen on any operating system or distribution.
Can connect you to the right person for any job, well connected and generous in referring people for the best reasons and motives.
Graphic design, and user experience design expertise can add tons of value to any project. Suprising side passions can bring a unique flavour. I once worked with a developer with an extraordinary passion for chess, and taught me about strategic thinking and competitiveness.
Some developers always need to be seen to be following the latest trends, even when the trends are clearly irrelevant. Perhaps a degree of underlying insecurity might be part of driving this.
Developers in some situations run the risk of adopting a tired attitude or an automatic "negative response". Even though it may be understandable why some developers grow weary and embittered in some situations, it is almost never helpful to consistently exhibit negativity in the workplace. Sadly some developers never seem to grow beyond this and become isolated as a result.
If you're interested in the topic of excellence in software development, take a look at my article on related resources for being a great developer.
That's partly why my site is called The Software Pilgrim - being a software developer is more like being on a continuous journey more than it is like arriving at a specific destination. I hope this essay has been helpful to you in some way on your own journey, whatever that may look like.