10 CHARACTERISTICS OF AN EXCELLENT SOFTWARE DEVELOPER

advertisement
10 CHARACTERISTICS OF AN EXCELLENT SOFTWARE DEVELOPER
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:
“improving”
“open-minded”
“passionate”
“data-driven”
Decision making:
“knowledgeable about people and the organization”
“updates their mental models and handles complexity”
“sees the forest and the trees”
Teammates:
Software product:
“creates shared context”
“elegant”
“creates shared success”
“creative”
“creates a safe haven”
“anticipate needs”
“honest”
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 nontechnical skills.
Download