What makes a developer great?


Preface: This essay is part of an ongoing conversation inside my own head and will likely be updated from time to time.

 

Establishing a context

 
Most people probably already have a picture of what a great developer might be - the attributes of what makes a great developer.

  • a junior developer, while attending a technical conference, might label a gifted communicator standing up front on stage a great developer
  • a recruiter may describe a candidate with a comprehensive skills matrix, that can be easily placed in a new position, as a great developer
  • a manager, assessing a team member who capably gets things done in a traditional enterprise team, may introduce them to others as 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.

 

Some great attributes to have as a developer

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!

 

  • Productivity and focus

    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.

  • Problem solving

    Solving problems no-one else can, either through sheer experience, creativity, clear thinking, or mathematical/logical deduction.

  • Teaching ability

    Great ability to explain and teach concepts concisely and at the needed level of detail, often with very little preparation needed.

  • Clean code

    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.

  • Quick working

    Fast typing super keyboard shortcut ninja. Quick developers know how to crank out a working solution, fast.

  • Experienced (either broad and shallow, or deep and narrow, or broad and deep)

    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.

  • Great memory

    A solid memory that can access detail about a specific implementation long forgotten by others is a great asset in any team.

  • Customer focussed and intuitive towards customer needs

    Anticipating the needs of the customer, sometimes more clearly than even the customer or stakeholder themselves.

  • Pleasant, humble and courteous nature

    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.

  • Reliable and go the extra mile to delight

    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.

  • Precise

    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.

  • Respected reputation and "sensei factor"

    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.

  • Risk taking

    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.

  • Learn-it-all

    Someone with a student attitude committed to figuring things out for themselves. Constantly self improving, such peoplare are open to receiving feedback.

  • Caring and mentoring

    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.

  • The squirrel - stashes nuggets of knowledge or code for a rainy day

    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.

  • Community minded

    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.

  • Infrastructure knowledge and ability

    Has deep dev-ops skills and know their way around a terminal screen on any operating system or distribution.

  • Networking skills (in the people sense of the word)

    Can connect you to the right person for any job, well connected and generous in referring people for the best reasons and motives.

  • Other helpful secondary skills

    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.

 

Pitfalls to being a great developer. (The anti-great developer)

 

  • Flavour of the month developers

    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.

  • Negativity or bitterness

    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.

 

Useful related resources and reading

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.

 

Being a developer is a journey not a destination

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.