If you do what is needed, but not what you are told, are you a hero, or a rebel?
In software, as in life, there are situations where you have to choose. Literature is filled with stories where the daring young man is told to “stay put” and he rushes into danger to save the damsel, or the brave soul takes on injustice when all counsel her to “stay out of it.”
So when you are writing software, what room do you have to do the right thing? If you are looking at a set of requirements, and it is clear that a use case is missing, do you write code for it? Do you invent your own process because the customer clearly needs it?
I think, in a team environment, the answer is muddy. Perhaps that’s why our heros of literature and the movies all prefer to “work alone.” In a team environment, you have to trust the skills of those around you. If a use case is missing, point it out, but if you write code, you may find that the customer Chose not to implement that use case, and you just risked the delivery of the project! Perhaps the functionality belongs in another app, or perhaps the data is supposed to be stable so no interface is needed.
Personally, I like team heros. A “team hero” is a team member who offers up honest answers when asked, who praises team mates in public, and offers constructive feedback in private. They get their work done efficiently so that they can help other team mates in need. If a team member is not doing well, for whatever reason, they help rally the strength of the team to assist that team member over their hump.
A team hero doesn’t have to ask if it is OK to do what is right, because they would be asking the team, and the decision is already made.
So cudos to team heros: those few key players who, through sheer passion, are singularly responsible for both the quality and capability of the teams fortunate enough to have them.