What makes a great software engineer? There are plenty of opinions on this topic. Most common answers suggest 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 with 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 into 4 groups and emphasizes the most interesting ones in each group.
- Personal characteristics:
- Decision making:
- “knowledgeable about people and the organization”
- “sees the forest and the trees”
- “updates their mental models and handles complexity”
- “creates shared context”
- “creates shared success”
- “creates a safe haven”
- Software product:
- “anticipate needs”
Don’t hesitate to check the whole list to understand better the ideas behind the attributes. 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. It is important for us that everyone on the team shares 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 on the team can suggest ideas. Everyone welcomes and discusses all ideas.
3 – Data-driven
Finally, we believe it’s more important to make decisions based on data rather than on our own preferences. 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 must 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 essential to ensure quality. For example, one thing that is critical to us is code review. No feature goes to production before it has been code reviewed. No doubt there are areas where we can improve, but we’re determined to keep building better softwares.
Great engineers supposedly have a positive impact on their teammates. That’s what the third group of attributes is about. Any developer who has worked on 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 agree 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 quality 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 -which may involve compromises- 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; 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 apply 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 points 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