Having built tech teams in several companies I have had an opportunity to evaluate a variety of candidates. While there is a fair amount of discussion on what technical skills one should look for and how not to evaluate technical skills, there is very little out there about what values and ethics to look for in candidates. Here I share the key ethical principles I aspire to have in my tech team members (including me).
Being humble means acknowledging that we are imperfect, that we are incomplete, that we make mistakes, that we are not all-knowing. Explicit acknowledgement and awareness of this allows us to accept our mistakes when they occur. The focus of the conversation then quickly turns away from blame-games to improving systems and processes to avoid major impact of human mistakes.
When everyone in the team is humble, it makes the environment conducive to learning. This is because when you ask a question you are confident that your teammates are aware of your humility and your question will be answered without the question being judged as a stupid question.
Having objective discussions about a problem also becomes easier. Suppose I propose a solution to a technical problem and another person in the team disagrees with the approach. If I acknowledge my imperfectness, it is possible for me to receive feedback on the solution without getting defensive about it. This results in a better overall solution. Further, the person who provided feedback feels confident that his/her opinions matter and that good feedback is received well, which results in positive team dynamics.
Integrity means doing the right thing even when no one is watching. Being able to trust your team mates is extremely crucial for any high performance team. The trust allows the team to align towards the same goal and hold each other accountable to it. It forms the base of the pyramid that allows the team to build traits of a performant team. However, this trust can only be achieved when each team member acts with integrity.
The trust breaks down when team members think something and say something else because it is inconvenient to say what they think. Trust also breaks down when team members do not do what the other team members expect them to do, whether they are being evaluated for it or not. With such dysfunctions in the team, any number of trust building exercises will fail to build the trust necessary.
Integrity allows one to have the confidence that everyone is working to the best of their ability. This is particularly important in early stage startups with small development teams as every team member forms a significant percentage of the total workforce. Even in larger companies, while lack on integrity in some team mates may not kill the company, it does damage the team dynamics and makes the work experience of those around negative.
Passion is the desire to do a good job of whatever you are working on. This should come as a no-brainer, but it is amazing how often we get engrossed in a variety of emotions/habits resulting in not doing a good job. These emotions could be about:
- I know what I am doing and someone not an expert in the domain has no right to critique my work.
- I can’t ask for more time than what I asked for before, because it would make me look incompetent.
- I can’t ask for help even though I need it because it would make me look weak.
- I don’t like that guy, so I will not talk to him even if talking to him will improve my work quality.
- I will not try this new technology, because it will be hard to learn, even if in the long run it is likely to be the right choice.
Passion is about having a certain mindset. It involves doing whatever needs to be done to achieve the goal. It also involves deriving satisfaction and happiness from continuously improving at your work. Without such passion, it becomes hard to grow professionally and one can become a burden on the team.
Service to Society
This is a rather unusual ethic for a development team and probably also the one that requires the most explanation. The ethic of service to society asks one to accept that we as members of society have a responsibility towards the society. The government through taxing citizens and redistributing the money across the country provides an organized way of contributing to the society, but there are a variety of small informal ways of contributing to the people around you.
- You can contribute to free and open source software if you believe in the free software philosophy.
- You can help team mates outside the development team to learn a new skill or solve a specific problem.
- You can contribute to smooth functioning of the office by helping out with maintenance.
- You can help your development team members get better at their jobs.
- You can volunteer at a soup kitchen or at a software training center for refugees.
Why is this ethic important for software developers? This is because the ethic of service to society inculcate the spirit of selflessness and makes you a true team person. All the other ethics above focus on the self, while this ethic explicitly acknowledges the existence of and responsibility to others around the self. This ethic ensures that you find happiness in being a team person, that you genuinely desire to help your team mates or your colleagues, and that you pursue the best interests of the team or the company and not just your self.
Having defined these ethics I aspire to have in the development teams I work with, it is important to ask how one would look for these attributes in new hires. This remains an open question for us. As we carry out the interviews with different candidates as a part of our recruitment process, we continue to learn more about this.