10 characteristics of an excellent software developer

What makes a great software engineer? There are plenty of opinions on this topic. Most common answers tell the following: able to produce maintainable working software, team player, keeping up-to-date with new technologies…

A study from the University of Washington ( “What makes a great Software Engineer?”) has uncovered 53 attributes of a great programmer. This is the result of almost sixty interviews of experienced engineers at Microsoft.
What makes a Microsoft software engineer great isn’t necessarily what makes a great software engineer. However most of these attributes are worth discussing.

The study classifies the 53 attributes in 4 groups and emphasizes on the most interesting ones in each group.
  1.  Personal characteristics
    “improving”, “passionate”, “open-minded” and “data-driven”
  2. Decision making
    “knowledgeable about people and the organization”, “sees the forest and the trees”, “updates their mental models and handles complexity”
  3. Teammates
    “creates shared context”, “creates shared success”, “creates a safe haven” and “honest”
  4. Software product
    “elegant”, “creative” and “anticipate needs”

Don't hesitate to check the whole list to understand better the ideas behind the attributes. Here below are the ones that resonate the most with us at CodinGame. Let's begin with three attributes from the first group.

1 - Passionate

The word “passionate” has been used and reused everywhere so much that it now appears as a hollow adjective. Still it remains an important trait of a software developer. Or any other company employee. Here at CodinGame, we all really love what we do and we believe in our goals. This is important for us that everyone in the team share this belief.

2 - Open-minded

To us, good software developers should be open-minded. Ready to change their opinion upon discussing with teammates or uncovering new information. No one is omniscient and anyone in the team can suggest ideas. Everyone welcomes and discusses them.

3 - Data-driven

Finally we’re willing to consider data before our own perception. It’s really easy to be deceived by your own judgment. Here at CodinGame we try as much as possible to stick to data instead of focusing on our own feelings before deciding what to do. It doesn’t mean we’re heartless. Of course we want to do awesome things for all our users, but in order to do so, we need to prioritize. At the end of the day, software developers are part of a business and they should decide what’s best for their business based on data.

In the second group, two attributes seem essential to us.

4 - Being knowledgeable about customers and business

As a developer, you build a product for a final user. Your job is to try to understand their needs and build features that are useful to them. Building features here at CodinGame is somewhat easier since we are also users of our platform. On the other hand we need to remain vigilant that we’re not building features for ourselves.

5 - Being knowledgeable about engineering processes and good practices

While processes slow things down, they’re are essential to ensure quality. One thing for example that is critical to us is code review. No feature goes to production before it has been code reviewed. For sure, there are areas where we can improve and we’re determined to keep building better softwares.

Great engineers are supposed to have a positive impact on their teammates. That’s what the third group of attributes is about. Any developer who has worked in a team knows how difficult it can be. Coding is very personal. Sharing your work and having it exposed to the feedback of the team can be hard.

6 - Not making it personal

One thing we agreed on at CodinGame is that we should not make it personal. As the study highlights, quoting a Microsoft manager:
You can have a very open and heated discussions. But it is all very professional; none of this is ever taken personally.” 
It doesn’t mean one can say anything just because it’s for the company’s greater good. To us, it’s just a common understanding that if there is something wrong, it has to be said. For the common good. We believe that good software developers should be egoless and put their company’s interests before their own.

7 - Honest

Software developers must learn to admit their mistakes. After all, making a mistake happens to everybody. The right thing to do is to try to learn from them and avoid them in the future. This is not as easy as it seems, but necessary to keep growing.

8 - Personable

Another one that is critical, especially for a small business like us, is what the study defines as "personable". Work is work but it’s so much easier to work when you get along well with teammates. A great software developer is also someone with whom you’ll enjoy sharing a beer outside of work.

9 - Creating shared success

This involves a lot of things. Software development is really a collaborative process. Each win (or failure) is the result of the team’s ability to work together. The more a developer manages to get everyone aligned on the same goals possibly using compromises, the more efficient the team will be.

Finally the last category regroups attributes about the software product that great engineers produce.

10 - Creative

Nothing is impossible and great software developers should be able to think out of the box and be innovative. However they should also know when to apply some answers to technical problems and avoid reinventing the wheel.

The bottom line is that this list of attributes can refer to a lot of jobs. Obviously a software developer should have plenty of technical skills. The key behind being a great software developer, is to be able to also grow and expand your non-technical skills.

What’s your definition of a great software developer? Which attributes resonate the most with you?

You can also read other very interesting point of views in the following resources:
A quora question What distinguishes a great software engineer from a good one?
And an article from Peter Nixey How to be a great software developer?

Reference: What makes a great software engineer?, by Paul Luo Li, Andrew J. Ko, Jiamin Zhu


  1. This comment has been removed by the author.

  2. what was Frederic Bautista's comments?

    1. well it was some kind of joke. As he decided to remove it, I won't share it.

    2. I got my kid a puppy as a present, but it died before Christmas...
      FML, now I'm stuck taking care of a puppy.

  3. Good article:) but I wish, this article can be more tecninical information about software engineer.