Programmers are known to be proud of their work. Some developers even feel that writing elegant code is a form of art, and thus, they call themselves "software craftsmen." I am sure that the desire to perform outstanding work is normal in any profession, but in the case of software development, programmers are constantly exposed to pieces of code written by their colleagues. If everyone can see your code, you naturally feel the need to write well.
So now I ask you: Are you a good programmer? Are you above average as a software developer? Perhaps you are in the top 20%, or even in the top 10%?
I’m almost sure that your answer is that you are above average. Most programmers feel like that. But, of course, if most programmers think they are above average, many of them are wrong…
This general phenomenon of feeling "above average" is called Illusory Superiority, and it has been studied by social psychologists. Here is a definition from Wikipedia:
"Illusory superiority is a cognitive bias that causes people to overestimate their positive qualities and abilities and to underestimate their negative qualities, relative to others."
Here are some concrete examples that were observed by researchers in this field:
"87% of MBA students at Stanford University rated their academic performance as above the median."
"For driving skill, 93% of the US sample put themselves in the top 50%."
So MBA students and drivers are just two examples, but the same phenomenon has been observed in diverse environments. If you have experience with software development, you probably agree that programmers are no exception.
But, what is wrong about this Illusory Superiority? Self-esteem is certainly a good thing. A good professional should have confidence in his abilities to handle his tasks. No one would like to work with a person who is insecure.
The problem with Illusory Superiority is when someone underestimates the capacity of others. This is particularly dangerous when we expect people to work as a team, but someone in this team believes he is much more skilled than his colleagues.
Respect and Recognition
What is the cure for this illusory feeling of superiority? How can we make the programmers in a team respect each other and even admire their peers because of the recognition of their experience and skills?
I believe that the key for respect and recognition is joint work, as close as possible. And, in this case, the Agile methods provide more opportunities for cooperation than traditional approaches.
Perhaps the closest form of joint work is Pair Programming. In this case, software developers work in pairs, writing the code together. Several studies have demonstrated that Pair Programming has a positive impact on the quality of systems. But, in my opinion, another important benefit is the ability to strengthen the bonds among programmers working as a team.
In the case of Scrum, the daily stand-up meetings are an opportunity for each person to learn about the progress of the other members of the team. Even if each programmer is working alone on his individual tasks, he is able to follow the implementation of the system as a whole. In other words, we could say that Scrum promotes a holistic view, allowing each team member to appreciate the challenges being faced by the others.
But what happens when you are really superior? How should you behave when you are the most experienced developer in a team, or when you are the only one with particular skills? What happens when in your team there are programmers writing poor code?
I believe that when you are the most experienced developer in a team, this should give you a special kind of responsibility. Or, as in the famous quote from Spider-Man: “With great power comes great responsibility”.
In a working environment in which there is real cooperation between team members, your outstanding capacity will be soon recognized and respected. Then you can assume a natural role of leadership, at least in the areas in which you have special skills. Assuming this technical leadership role means:
- Teaching: If you are the only one with a particular skill, teach others.
- Sharing: If you are the most experienced, share your knowledge.
- Reviewing: If other programmers are writing poorly, review their work.
- Helping: If you can boost productivity, help people to handle their tasks.
But you must always remember that, even if you are "superior," you can always learn from others. As it’s written in the ancient Jewish book "Ethics of the Fathers":
"Who is wise? One who learns from every man."
In this spirit, I will be happy to learn from your opinions in the comments. Thanks!